👻

Unity|備忘録|パーリンノイズ(Perlin noise)

に公開

パーリンノイズとは

パーリンノイズの使い所

Unityのサンプルコード[1]を適当な図形に適用すると、以下のような動きになった。

以下のような、規則性のない自然の揺らぎを表現したい場合に使える。

  • 地形生成
    • 2Dや3Dのマップに「デコボコの高さ」をつける
    • 山や谷を自然に表現
  • 雲や空模様の生成
    • ノイズをテクスチャにして、自然な雲を描く
  • 水面や波の揺れ
    ノイズ値を高さに変換して、リアルな波を作る
  • キャラクターやオブジェクトのゆらぎ
    炎や木の葉の揺れ、光のチラつきなどに利用
  • アニメーションの自然化
    単調な動きを「自然なランダム感」に変える
    カメラの揺れ(手ぶれ演出)など
  • バイオーム分け
    マップを「草原・砂漠・雪原」などに自動分類する
  • エフェクト表現
    炎、煙、マジックエフェクトに使うと不規則でリアルになる

1次元から理解しよう

次のグラフを見てください(動画の揺れをグラフにしたものではありませんが、参考にしてください)

  • X = Seed値[2]
    サンプルコードのTime.time[3] ✕ xScaleに相当する。
  • Y = ノイズの高さ
    サンプルコードのtransform.positionに相当する。

解説

ノイズの高さYはSeed値Xに何が入っているかによって一つの値に決まるので関数と言える。

動きを激しくしたいか、穏やかにしたいかは、xScaleを参照している。
一旦xScaleを無視してみるとわかりやすい。
その場合、ノイズの高さはグラフの線を指で左から右へなぞるように動いていくことが想像できるだろう。(Time.timeは止められないストップウォッチのようなものなので永遠と連続して左から右へ動く)

xScaleをかけるとどうなるか
入力が飛び飛びになるので、xScaleが大きくなればなるほどノイズの高さは細かく変化する。

脚注
  1. https://docs.unity3d.com/ScriptReference/Mathf.PerlinNoise1D.html ↩︎

  2. コンピューターがランダムな数値を生成する際の「初期値」となる数値 ↩︎

  3. アプリケーション開始からの秒数 ↩︎

Discussion