経年変化をプロシージャル生成する(3)~実際のゲームタイトルにおける時間経過表現

こうして風化、錆、浸食……といった3つの経年表現をみてきたわけだが、どれも、とてもリアルタイム実装できるものではない。では、こうした時間経過で3Dモデルの状態が変化する動的表現はリアルタイム実装は無理なのだろうか。

実は、そういうわけでもなく、かなり簡略化して実装することで、プロシージャルな動的状態変化表現はすでに実例存在する。

NVIDIAは、以前、Dorsey氏のプロシージャルベースの錆表現に非常に近いものをGeForceFXシリーズのリアルタイムデモで実装したことがある。1950年代のビンテージカーをスライダーで任意の経年に設定すると、その経年に応じた塗装の劣化や錆の出現を見ることができた。

新品状態

光沢が薄れて錆が微細凹凸として出現してくる。塗装の剥げたところから赤錆も出現

赤錆が全体を覆う

(※画像クリックでアニメーションGIFが開きます) その連続アニメーション

前出の独CRYTEKの「CRYSIS」では、動的な氷結表現をプロシージャル的なアプローチでリアルタイム実装している。

3Dモデルの各面の向き(法線)のうち、天空に向いていれば向いているほど雪テクスチャを積層させる(合成する)陰影処理を行っている。「面の向きが天空に向いていれば雪は積もる」「傾いていれば雪は落ちる」という動的なプロシージャル的な積雪シェーダを実装しているわけだ。

また、解けた雪が再び氷結して氷粒が出来る様もCRYSISでは動的に生成している。これは2層の法線マップで表現されており、積雪シェーダとは逆に、天空に向いていない垂直面や斜面に対して多く氷粒の法線マップを適用している。これは流れ落ちた水滴が凍るのが垂直面や斜面での場合が多いという仮説に基づいた処理なのだろう。

また、雪や氷は光を乱反射させるためキラキラと光をきらめかせる。この表現をするために乱数によって生成したベクトルをまばらに格納したランダムベクトルテクスチャを用意し、これに鏡面反射の陰影処理を行って、キラキラときらめく表現を付加している。

こうした3つの「氷結表現」シェーダの結果は、前述したようにパーリン・ノイズをキーにしてさらにランダム性を持って合成される。

元の状態

積雪シェーダの結果

氷粒シェーダの結果

全てを合成したファイナルフレーム

しかし、これはかなり重いシェーダで、実際、CRYSISはゲーム中、雪原ステージがもっともフレームレートが下がっていた。

一方、コナミの「メタルギアソリッド4」(2008)では、積雪シェーダをよりシンプルな方法で実装している。具体的には、頂点枚に積雪量を動的に決定し、この値を元にして事前に用意しておいた積雪テクスチャを合成するアプローチとしている。

リアルタイムで出来ることに限界はあるにせよ、実際のリアルタイム3Dグラフィックス、3Dゲームグラフィックスでも、徐々にプロシージャルな表現をするシェーダの実装は始まっているのだ。(続く)

(トライゼット西川善司)