世界で最も有名なノイズ「パーリンノイズ」とはなにか?
フラクタルノイズで最も有名なのは、やはり「パーリンノイズ」(Perlin Noise)だろう。このパーリン・ノイズは、今でもプロシージャル・テクスチャの"種"として非常によく用いられるフラクタルノイズだ。なお、発明者のKen Perlin氏は、このノイズ関数の発明で1997年のアカデミー技術賞を受賞している。
下図は二次元のパーリンノイズの生成方法の一例を示したものだ。
左上から右上に向かってのコマについて解説すると、まず、ある着目した四辺形の一頂点から乱数で決めた傾きを生成する(A)。他三点にゼロに着地するような適当な曲面減衰関数を与える(B)。この2つを掛け合わせて取っておく(A×B)。
左下から3つは、他の3頂点についても同様の計算を行って、合計4つの「ある頂点から立ち上がって他の頂点に着地する曲面」を得る。この4つを全て掛け合わせたものが図右下の最終結果となる。これと同じ処理を他のグリッドについても行い隣接するグリッド同士は適当に補間して繋げる。このあたりのより詳しい解説はKen Perlin氏のプレゼンテーション・サイトにも掲載されている。また、別の実装法が毎日コミュニケーションズ刊の「DirectX 9 シェーダプログラミングブック」の著者としても知られる今給黎隆氏のサイトにも掲載されているのでそちらも参考にして欲しい。
概念的には複数の周波数のノイズを、低周波ノイズを強めに高周波ノイズを弱めに合成したような感じになる。
Ken Perlin氏はこのパーリンノイズを用い、高次元のテクスチャで生成してテクスチャから興味深い造形を得る「ハイパーテクスチャ」(Hyper Textureという概念も発表している。
プロシージャル技術で生成したテクスチャを、単なるデカールテクスチャ(画像テクスチャ)として利用するだけでなく、複数枚のプロシージャル・テクスチャを互いに関連性を持つような形で生成し、これをボリュームレンダリング的な手法でレンダリングしたり、あるいはマーチングキューブ法などを使って等値面生成してポリゴン化してレンダリングするわけだ。
あえて"難しく"いうと、この複数枚のプロシージャル・テクスチャから「空間充填関数を制作する」ということになる。
ハイパーテクスチャは、高次元プロシージャルテクスチャを得てから、これを3Dモデルにするという、やたら回りくどい手法なので、オーサリング手法としてはあまり現実味はない印象を持つが、3D形状モデルをプロシージャル的に得るという点ではとても興味深い。
下図の中央の火球のハイパーテクスチャを例に解説を行うと、この火球は球体形状の関数(Sphere)と、パーリンノイズベースの乱流関数(Turbulence)を組み合わせて生成した高次元プロシージャルテクスチャからレンダリングしたものとなっている。
険しい名前が付いているこの乱流関数とは、その実体は2倍の周波数のパーリンノイズを半分の強度で反復的に合成して形成した合成ノイズ関数だ。
この周波数と合成バイアスをいろいろと調整してのパーリンノイズを組み合わせた多段の合成ノイズ関数は非常に興味深い模様となるのでプロシージャルテクスチャ生成のテーマでは色々と実験と研究が繰り返されている。
なお、身近なソフトでもパーリンノイズの効果は体験できる。
3DMark06には「Perlin Noise(SM3.0)」というそのままズバリの名前のFeature Tests(項目テスト)が搭載されている。
これはパーリンノイズから雲のテクスチャを合成するもの。パーリンノイズそのものをピクセルシェーダでテクスチャに生成する495命令からなる結構長いシェーダプログラムでの実行となり、GPUのピクセルシェーダ性能を測定するベンチマークテストになっていた。
実際のゲームではどうか。
「Conflict Vietnam」(SCI,2004)はパーリンノイズを活用したゲームとしてはけっこう早期タイトルだといえる。この作品では「空の雲」の表現に、512×512テクセルの雲のテクスチャの生成を5オクターブのパーリンノイズから生成していた。
独CRYTEKの一人称タイプの3Dシューティングアドベンチャー「CRYSIS」(2007)では、凍結したジャングルシーンの生成に、三次元パーリンノイズ(3D Perlin Noise)が利用されていた。雪や氷粒のテクスチャを、シーンと合成する際に、ボリュームテクスチャとして生成した三次元パーリンノイズをキーにして実行している。(続く)
(トライゼット西川善司)