This explanation is currently available in Japanese.
ひとことで
格子点に乱数の値そのものを置き、その間を補間するもっとも素朴なノイズです。勾配を使うパーリンノイズより単純で速く、実装も数行で済みます。そのぶん格子の癖が出やすいので、重ねて使ったり、細部より「ぼんやりした変化」がほしい場面に向いています。
ゲームでの使いどころ
- 明かりのちらつき:時間を入力にした 1 次元の値ノイズで、たいまつや蛍光灯の明るさを揺らします。安いうえに十分それらしく見えます。
- 雲の影・霧の濃淡:地面に落ちる大きな雲影など、ぼやけていてよい模様。
- fBm の下地:何オクターブも重ねると格子の癖が目立たなくなるので、コスト重視の地形や雲に使われます。
- CPU での手軽な乱数場:勾配ベクトルの表を持たなくてよいので、サーバー側の生成処理などにも組み込みやすいです。
しくみ
2D の場合、点 を含むセルの 4 隅の乱数値 を、セル内の位置 で双線形補間します。
ここで重み関数 の選び方が見た目を大きく左右します。
| 補間 | 重み | 見た目 |
|---|---|---|
| 最近傍 | なら 0、それ以外 1 | 段差のあるブロック。値が連続しない |
| 線形 | 値は連続するが、格子線で傾きが急変し折れ目が出る | |
| スムーズ | (smoothstep) | 格子点で傾きが 0 になり、折れ目が消える |
時間方向にも同じ考え方が使えます。整数時刻ごとに乱数を決めて、その間を smoothstep で補間すれば、値がなめらかに移り変わります(デモの「時間方向にも補間」)。
実装のポイント
- 5 次の重み: に替えると、2 階微分まで連続になり、法線を計算したときの格子模様がさらに減ります。
- テクスチャで代用:乱数を並べた小さなテクスチャをバイリニアで拡大するだけでも、線形補間の値ノイズになります。GPU ではこれが最速です。
つまずきやすい点
- 格子の模様が見える:値の最大・最小が必ず格子点に来るため、1 層だけだと規則的な「こぶ」の並びに見えます。回転させた座標で複数層を重ねると緩和できます。
- 低周波の成分が強い:値ノイズはパーリンノイズに比べて大きな塊ができやすく、コントラストが格子ごとにばらつきます。細かい模様にはパーリン系が向きます。
- ハッシュの品質:
fract(sin(x) * 43758.5)型のハッシュは GPU によって精度が異なり、座標が大きいと縞が出ます。整数演算ベースのハッシュの方が安全です。
デモで試すこと
- 補間を最近傍 → 線形 → スムーズと切り替え、面の変化を観察してください。黄色いピン(格子点の乱数値)は同じまま、間のつなぎ方だけが変わっています。
- 「格子の数」を増やすと、同じ面積により細かな起伏が入ります。これを何層も重ねたのが fBm です。
- 「乱数を振り直す」で別の地形になります。シード値を変えるだけで無数のバリエーションが得られるのが手続き的生成の利点です。