パーリンノイズ
パーリンノイズ(Perlin Noise)は、コンピュータグラフィックスにおいて自然なテクスチャ、地形、動きなどを表現するために、ケン・パーリン(Ken Perlin)が1983年に開発したグラディエントノイズの一種である。完全にランダムなホワイトノイズとは異なり、パーリンノイズは隣接する値が滑らかに連続する特徴を持ち、プロシージャル生成(Procedural Generation)で広く使用されている。
ケン・パーリンは1982年の映画『トロン』(Tron)の制作時に、コンピュータ生成画像の「機械的な」印象を和らげるためにこのアルゴリズムを開発し、その功績により1997年にアカデミー技術功労賞を受賞した。
概要
パーリンノイズは、格子(Grid)構造と、各格子点(Grid Point)に割り当てられたランダムな勾配(Gradient)ベクトルに基づいて生成される。特定座標のノイズ値を計算するため、その座標を取り囲む格子点の勾配ベクトルと、座標から格子点への距離ベクトルの内積(Dot Product)を求め、これらの値を滑らかに補間(Interpolation)して最終的な値を得る。
この方式により、パーリンノイズは以下の重要な特性を持つ。
- 結果の値は連続的であり、急激な変化なく滑らかに遷移する。
- 同じ入力座標に対しては、常に同じ結果値を返す。
- 視覚的に自然なランダム性を表現できる。
生成原理
- 格子の設定: 整数座標からなる多次元格子を定義する。
- 勾配の割り当て: 各格子点にランダムな単位ベクトル(勾配)を割り当てる。このベクトルは、事前に定義されたテーブルから取得するか、ハッシュ関数を通じて生成することができる。
- 内積の計算: ノイズ値を求めたい特定の点を囲む各格子点(例: 2Dでは4点、3Dでは8点)について、格子点からその点へ向かうベクトルと、格子点の勾配ベクトルの内積を計算する。
- 補間: 内積によって得られた値を、滑らかな曲線関数(主にフェード関数と呼ばれる5次多項式, )を用いて補間する。これにより、格子の境界で値が不連続に変化するのを防ぎ、滑らかな結果を生み出す。
オクターブ (Octaves)
単一のパーリンノイズは滑らかな波の形をしているが、より複雑でリアルなパターンを作成するために、複数のパーリンノイズ関数を重ね合わせる手法が用いられる。これを「オクターブ(Octaves)」または「フラクタルノイズ(Fractal Noise)」と呼ぶ。
基本周波数のノイズ(低いオクターブ)に、より高い周波数と低い振幅を持つノイズ(高いオクターブ)を何層にも重ねていくことで、大きな形状の輪郭と細かいディテールを同時に表現することができる。
特徴
- 自然さ: 雲、地形、波、炎など、自然現象の不規則性を模倣するのに非常に効果的である。
- 制御の容易さ: 周波数(Frequency)や振幅(Amplitude)といったパラメータを調整することで、ノイズのパターンを容易に制御できる。
- 次元の拡張性: 1D, 2D, 3Dなど、様々な次元に容易に拡張が可能であり、線、平面、空間上のノイズをすべて生成できる。
応用分野
- プロシージャル地形生成: ゲームワールドの山、谷、平野など、様々な高さの地形を自動的に生成する。
- テクスチャ生成: 木の年輪、大理石の模様、雲などの自然な質感を生成する。
- アニメーション: キャラクターの髪の揺れや、炎の燃え上がりなどの動きを滑らかで自然に表現する。
- シェーダー効果: 水面の揺らぎや霧の立ち上りなどの視覚効果をリアルタイムでレンダリングするために使用される。