いろんなノイズを触ってみた
学部2年の木村です. 最近ジオメトリーシェーダーでGPUパーティクル的なものを作ろうとしてパーティクルの動き方など決めるのに悩んでいたとき, ノイズを使ったらいい感じになったのでそのときに使ったノイズの紹介やそれぞれのノイズについての特徴を調べてみたいと思います.
いい感じにしたいやつ↓
比較用
— bigdra (@bigdra50) October 28, 2019
random pic.twitter.com/S6sqiJuj2c
ジオメトリーシェーダーで各ポリゴンの高さと模様をランダムに変えていて, このランダムの部分を他のノイズに置き換えていきます.
目次
ノイズとは
プログラミングをしている中で, 不規則な値が必要なときにランダムな値として乱数を使うかと思います. 下の画像のように白黒がバラバラで規則性はなさそうです. 最初の動画で使っていたのもこれです.
それに対してノイズはある程度の規則性を持っており, 雲や炎や岩の形状や模様など自然の表現によく使われているようです.
ブロックノイズ
ブロックノイズは, 格子状に区切ってそのままそのブロックを塗りつぶしています.
block pic.twitter.com/KqyLVtcLUQ
— bigdra (@bigdra50) October 28, 2019
ブロックみがあります.
バリューノイズ
バリューノイズは, 格子状に区切ったときの周囲の格子点のランダムな値から補間した値を返します. 補間してるのでちょっと滑らかになってます.
value pic.twitter.com/hlYdgzkQE0
— bigdra (@bigdra50) October 28, 2019
ジオメトリーシェーダーで使ってみると山のような形が出てきました.
パーリンノイズ
パーリンノイズは, 映画「TRON」の制作の際ににリアルなテクスチャーを生成するために開発されたノイズで, 炎や雲の表現や, 地形の自動生成などに使われています.
パーリンノイズも途中まではバリューノイズと似ているようですが, 補間をする前に格子内の点と格子点へのベクトルとの内積をとり, その内積を補間に使っています. それによって格子点の値も滑らかなグラデーション状になっています.
perlin pic.twitter.com/pnHE38ZPE4
— bigdra (@bigdra50) October 28, 2019
低い山がたくさんになりました.
シンプレックスノイズ
パーリンノイズの改良版です.
格子でなくシンプレックス(?)を使うみたいです. 2Dなら三角形, 3Dなら四面体のようにn次元に対してn+1点のみ考慮するとのことですがよくわかりませんでした. とりあえず, 格子点を使わないからこれまでのノイズにあった正方形のパターンがなくなっています.
simplex pic.twitter.com/n9wwNaVbHn
— bigdra (@bigdra50) October 28, 2019
カールノイズ
カールノイズはパーリンノイズやシンプレクスノイズを基にさらに回転を計算し, 流体のような表現ができるノイズです.
curl noiseをfBmにしたらかっこよくなった pic.twitter.com/bHA7d29YQH
— bigdra (@bigdra50) September 1, 2019
かっこいい.
curl pic.twitter.com/NR7DKbCiV4
— bigdra (@bigdra50) October 28, 2019
この例はシンプレクスをもとにしていますが違いがわかりにくいですね
セルラーノイズ
セルラーノイズはuv座標をタイル状に分割して各タイル内にランダムに点を置き, それらの点の中から最も近い点までの距離を返すノイズです.
cellular pic.twitter.com/IkDZdRj75z
— bigdra (@bigdra50) October 28, 2019
最後に
使ったノイズは以上です! ノイズを使うと手軽にいい感じの表現ができそうなのでぜひ試してみて下さい!
あと, このノイズをVRChatで見ることもできるのでよかったらこちらのワールドへ!
#MadeWithVRChat
— bigdra (@bigdra50) October 28, 2019
ノイズを観測するだけのワールドです.https://t.co/qdFXREzaHW pic.twitter.com/8wgYLxOWoK
参考
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