Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

「面白法人カヤックVR分室」としても活動しています。詳細はこちら

いろんなノイズを触ってみた

学部2年の木村です. 最近ジオメトリーシェーダーでGPUパーティクル的なものを作ろうとしてパーティクルの動き方など決めるのに悩んでいたとき, ノイズを使ったらいい感じになったのでそのときに使ったノイズの紹介やそれぞれのノイズについての特徴を調べてみたいと思います.

いい感じにしたいやつ↓

ジオメトリーシェーダーで各ポリゴンの高さと模様をランダムに変えていて, このランダムの部分を他のノイズに置き換えていきます.

目次

ノイズとは

プログラミングをしている中で, 不規則な値が必要なときにランダムな値として乱数を使うかと思います. 下の画像のように白黒がバラバラで規則性はなさそうです. 最初の動画で使っていたのもこれです.

それに対してノイズはある程度の規則性を持っており, 雲や炎や岩の形状や模様など自然の表現によく使われているようです.

ブロックノイズ

ブロックノイズは, 格子状に区切ってそのままそのブロックを塗りつぶしています.

ブロックみがあります.

バリューノイズ

バリューノイズは, 格子状に区切ったときの周囲の格子点のランダムな値から補間した値を返します. 補間してるのでちょっと滑らかになってます.

ジオメトリーシェーダーで使ってみると山のような形が出てきました.

パーリンノイズ

パーリンノイズは, 映画「TRON」の制作の際ににリアルなテクスチャーを生成するために開発されたノイズで, 炎や雲の表現や, 地形の自動生成などに使われています.

パーリンノイズも途中まではバリューノイズと似ているようですが, 補間をする前に格子内の点と格子点へのベクトルとの内積をとり, その内積を補間に使っています. それによって格子点の値も滑らかなグラデーション状になっています.

低い山がたくさんになりました.

シンプレックスノイズ

パーリンノイズの改良版です.
格子でなくシンプレックス(?)を使うみたいです. 2Dなら三角形, 3Dなら四面体のようにn次元に対してn+1点のみ考慮するとのことですがよくわかりませんでした. とりあえず, 格子点を使わないからこれまでのノイズにあった正方形のパターンがなくなっています.

カールノイズ

カールノイズはパーリンノイズやシンプレクスノイズを基にさらに回転を計算し, 流体のような表現ができるノイズです.

かっこいい.

この例はシンプレクスをもとにしていますが違いがわかりにくいですね

セルラーノイズ

セルラーノイズはuv座標をタイル状に分割して各タイル内にランダムに点を置き, それらの点の中から最も近い点までの距離を返すノイズです.

最後に

使ったノイズは以上です! ノイズを使うと手軽にいい感じの表現ができそうなのでぜひ試してみて下さい!

あと, このノイズをVRChatで見ることもできるのでよかったらこちらのワールドへ!

参考

https://wgld.org/d/glsl/g007.html https://thebookofshaders.com/11/?lan=jp https://en.wikipedia.org/wiki/Value_noise https://catlikecoding.com/unity/tutorials/simplex-noise/ https://qiita.com/nyamadandan/items/2a8bc7a3639e7b5ce9c9 http://nn-hokuson.hatenablog.com/entry/2017/01/27/195659

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!