Appearance
第06回 ノイズ
前回: 第05回 TextMeshPro と SDF / 次回: 第07回 ベクトル演算とライティング
今回の授業内容
- ランダム値と連続性のあるノイズを比較する
- Simple Noise、Gradient Noise、Voronoiの特徴を理解する
- スケール、速度、しきい値で模様を調整する
- ノイズを色、透明度、UVの変化へ利用する
Smoothstepを使ったディゾルブを実装する
ノイズの役割と種類
ランダム値とノイズの違い


上は隣同士の関係が弱いランダム値、 下は値がなめらかにつながるノイズの例
ランダム値は、単純に不規則な値です
隣の値との関係が弱く、脈絡がありません
一方でノイズは ランダムさに空間的・時間的なつながりを持たせたもの です
ノイズは不規則ながらも連続性があるため、 雲、煙、炎、水面、地形のような自然物の表現に向いています
計算で作るノイズと画像素材の違い
ノイズは、専用の画像素材を用意しなくても Shader Graph のノードや他の計算手法で生成できます
画像素材は用意した時点の模様に固定されますがノイズはスケール、速度、しきい値などのパラメーターを後から変更して好みの表現に調整できます
色ムラ、煙の揺らぎ、ディゾルブのマスクなどを自然に表現し調整するのに計算だけで完結できるノイズは非常に有用です
人力でのイラストレーションでは作るのが難しい表現を数値調整だけで扱えるようになるのは非常に大きな利点です
自然な変化を作るノイズ

地形生成ソフト Gaea による地形生成の例
ノイズとシミュレーションで自然な起伏を作成できる Screenshot created with QuadSpinner Gaea. Gaea is a trademark of QuadSpinner.
- 自然界には、完全な規則性のあるものはほとんど存在しません
- ですがノイズを使えば、規則的な形や色に自然なムラや揺らぎを加えることができます
- 例えば地形の起伏、雲の形、炎の揺らぎなどはノイズを使うと自然に表現できます
- ノイズは幅広い用途で自然な変化を表現するために利用可能です
画像表現で使うノイズの種類

左上から右に向かってホワイトノイズ、パーリンノイズ、フラクタルノイズ、ボロノイノイズの例
- ホワイトノイズ: ざらつき、粒状感、グリッチ
- パーリンノイズ: 雲、煙、水面、地形のような自然なムラ
- フラクタルノイズ / fBm: 複数のノイズを重ねた細かなディテール
- ボロノイ / セルラーノイズ: 細胞、石、ひび割れ、泡のような領域表現
Shader Graphのノイズノード
画像を使わずにノイズを作る
Shader Graph には、いくつかのノイズ系ノードが用意されています
Simple Noise、Gradient Noise、Voronoi などのノードは UV 座標を入力してノイズ値を出力します
これらのノードを使うと、画像素材を用意せずにノイズを生成して表現に利用できます
計算の精度や設計から表現に制約がある場合もありますが、 調整のしやすさやリアルタイムでの変化を加える用途には非常に便利です
Simple Noiseで手軽なムラを作る

Simple Noiseノード
Simple Noise は、雲や煙のような表現に適度な粒状感を加えるのに便利なノードです
入力する UV と Scale によってノイズの細かさが変わります
単色の面に情報量を加えるのに有用ですが自然物の揺らぎを表現するには表現力不足です
https://docs.unity3d.com/ja/Packages/com.unity.shadergraph@10.0/manual/Simple-Noise-Node.html
Gradient Noiseでなめらかな変化を作る

Gradient Noiseノード
Gradient Noise は、値の変化がなめらかで自然物の揺らぎに使いやすいノイズです
Scale を小さくすると大きなムラに、 大きくすると細かなムラになります
雲、煙、水面、炎のような表現で使いやすいノードです
https://docs.unity3d.com/ja/Packages/com.unity.shadergraph@10.0/manual/Gradient-Noise-Node.html
Voronoiでセル状の模様を作る

Voronoi は点同士の距離からセル状の模様を作るノードです
セルの大きさや形を調整できるほかセルの領域別の出力も可能です
ひび割れ、結晶、細胞、泡、魔法陣の模様など様々な表現に使えます
https://docs.unity3d.com/ja/Packages/com.unity.shadergraph@10.0/manual/Voronoi-Node.html
ノイズ計算の参考資料
- ノイズのアルゴリズムには、原論文や作者本人による実装が存在します
ここではコンピュータグラフィックスでよく参照される資料を紹介します - Improved Perlin Noise: Ken Perlin によるリファレンス実装と解説
https://cs.nyu.edu/~perlin/noise/ - Simplex Noise: Stefan Gustavson による解説資料
https://itn-web.it.liu.se/~stegu76/simplexnoise/simplexnoise.pdf - Cellular / Worley Noise: Steven Worley による原論文
https://itn-web.it.liu.se/~stegu76/TNM084-2019/worley-originalpaper.pdf
ノイズを制御する
スケールで模様の大きさを変える
ノイズは UV 座標を入力して値を作ります
UV を拡大して入力すると模様は細かく繰り返されます UV を小さくして入力すれば大きなゆるいムラになります
Shader Graph では Tiling And Offset や UV への Multiply で調整できます
様々なスケール設定を試してみましょう
時間でノイズを動かす
Time を UV に足すとノイズの位置を時間で変化させられます
位置だけでなくノイズの生成パラメーターにも時間を入れるとより複雑な動きを作成可能です
ノイズを動かすことで炎、煙、水面、オーラのような動きを表現できます
時間経過でのノイズの操作は、有機的な動きを作るのに非常に有効な手法です
是非いろいろ試してみてください
ノイズでUVをゆがめる
ノイズ値を UV に足すとテクスチャーのサンプリング位置をずらせます
小さく足せば水面や熱気のような揺らぎになります
大きく足すと形が壊れやすいため Multiply で強さを抑えるのが基本です
画像そのものを変えるのではなく読み取る位置を変えるのがポイントです
ノイズでSDFの形を崩す


SDF生成のUVにノイズを足した例と SDFの距離をノイズで評価した例
いずれも円の形状をノイズで崩せている
前回扱った SDF は、輪郭からの距離で形状を表現するものでした
この SDF の距離にノイズを足すと輪郭がゆらいだ図形を作れます
また、UV から計算で画像を作る SDF 関数にノイズの影響を加味すれば、炎やオーラなどのゆらぎの表現を作ることもできます
SDF で形を決め、ノイズで形状を崩すコンボは非常に強力です
ノイズを利用した表現
水面の高さを変える

簡素な水面のシェーダー例
ノイズを複数重ねることでより複雑な表現も可能
ノイズを Height Map として使い、 法線に変換して水面の揺らぎを作ります
Time を使ってノイズを動かせば水面が流れるような表現になります
ディゾルブで溶けるように消す

パーリン+フラクタルノイズをグラデーションにマップした徐々に燃え尽きるような表現の例
ノイズの値を Threshold でしきい値処理すると値が低い場所から徐々に消えていく表現を作ることができます
ノイズを加工した後に Sample Gradient でカラーグラデーションにマップすれば、 ゲームで有効なディゾルブ表現になります
Voronoiを色と法線に使う

Voronoi ノードの出力加工例
Voronoi ノードのセル分割に色を割り当て、 グラデーションを加工後法線に変換すれば細胞や石のような表現ができます
Shader Graph の Voronoi ノードはセル中心からの距離が遠景に出力されるため等高線表現やエッジ分割には向きませんが有機的な表現に便利です
実習:ノイズノードを使って様々な表現を作る
ノイズの出力を色、透明度、境界へ順番に利用し、見え方の違いを確認します
実習1:ノイズを表示する
URP Unlit Shader Graphを作成するUVをSimple NoiseまたはGradient Noiseに接続する- ノイズの出力を
Base Colorに接続する Scaleを変更して模様の大きさを確認するTimeとTiling And Offsetを使いノイズをゆっくり動かす
実習2:ノイズを透明度に使う
- Graph Settings で Surface Type を
Transparentにする - ノイズの出力を
Smoothstepに接続する ThresholdとSoftnessのプロパティを作成するSmoothstepの出力をAlphaに接続するThresholdを動かして表示範囲が変わることを確認する
実習3:ディゾルブの縁を作る
- 本体用の
Smoothstepを作る - 境界用に少し違うしきい値の
Smoothstepを作る - 2つの値を引き算して縁だけのマスクを作る
- 縁には明るい色を割り当てる
Thresholdを時間で変化させて溶けるように消える表現を作る
実習4:Voronoiを使った模様を作る
Voronoiノードを追加するCell Densityを調整する- 出力値を
Smoothstepで加工する - 線の色と背景色を
Lerpで混ぜる - 魔法陣、結晶、ひび割れなどの表現に寄せてみる
授業内課題:ノイズで出現・消失するマテリアルを作る
ノイズの種類、しきい値、境界表現を調整し、変化の意図を説明できる作品にします
完成条件
Simple Noise、Gradient Noise、Voronoiのいずれかを使っている- ノイズの
Scaleをプロパティから調整できる Thresholdで表示範囲を変更できるSmoothstepで境界の柔らかさを調整できる- 境界に色、発光、または濃淡の変化がある
- スクリーンショットまたは動画で変化が確認できる
今回のまとめ
- ノイズは隣り合う値がつながった不規則なデータです
- Shader Graph では
Simple Noise、Gradient Noise、Voronoiなどのノイズ計算ノードが利用可能です - ノイズを閾値で加工するとマスクやディゾルブ表現に使えます UV に加味することで画像をゆがませることもできます
- ノイズは自然物やエフェクト表現に欠かせない重要なツールです