ニュース
[CEDEC 2005#05]NVIDIAデモのさらなる秘密
2005/08/30 23:59
最新デモの解説を行うランディ・フェルナンド氏
 CEDECとの併催という形で,今年もNVIDIAの「開発の鉄人」セッションが開催された。今回は,GeForce 7800 GTXと共に発表されていたLunaとMad Mod Mikeのデモの制作秘話が明かされた。
 これらは,現在のゲームハードウェアにどこまでの処理ができるのか,ということを端的に示すものである。とくに今年(2005年)のデモは,キャラクター一人だけに全パワーを集中させるのではなく,複数のキャラクターを使ったり,シーンの移動なども含んだりした,多少は現実のゲームっぽいものになっているので,これからのゲーム内での表現を占うという意味で興味深いセッションとなった。

●Lunaに見る表面下散乱
 人体など,ごくわずかに半透明な物体をリアルに表現するときに必須の処理が「表面下散乱」である。
 手のひらを太陽にかざしてみれば,真っ赤に流れる血潮の色が見て取れるだろう。これは,太陽の光が皮膚を透過して体内で散乱しつつ,血液の色に染まるからだが,こういったものをシミュレートするものだと思えばよい。とくにリアルな皮膚を描くためには欠かせない処理といわれている。入射光が,皮下で何層にもわたって反射・屈折・散乱を繰り返す処理は,シミュレートがかなり難しいと聞く。
 それはともかく,今回実現されていた処理は,透過による内部拡散と内部遮蔽物(骨),血管などを合成したものだ。光源を通過してくる光が,どれくらいの厚さの筋肉を透過するかで透過光量を算出したり,前面にあるポリゴンを加算ブレンド,背面のポリゴンを減算ブレンドでバッファに書き込んでいく手法がある。
 演算結果はそのままではひび割れなどがあって使えない。そこで,11×11ドットという広めのブラーをかけて穴をつぶしている。こうして出てきた透過光量は,テーブル参照で色が決定されるのだ。どのくらいの透過量でどういった色というのは,割と適当に作られたグラデーションに割り当てられている。あとは,内部遮蔽物と表面色を加えて調整して,できあがり。
 なお,Lunaのデモでは,Luna自身の皮膚にはこういった処理は行われておらず,Lunaの周りを漂う「Oracle」にのみ適用されているという。NVIDIA自体は皮膚の表現にはあまりこだわっていないようだ。思えば,2004年はNaluの髪の表現で,反射光の表面下散乱などもすでにやっていたわけだし,やろうと思えばいつでもできるはずなのだから。



●ディスプレイスメントマッピング
 今度は壁の凸凹である。ここではディスプレイスメントマッピングが使用されている。これは,バンプマッピングのちょっと派手なやつだと思っておけばよい。
 ゲーム機などでは,すでにパララックスマップによる凹凸表現が実用化されているというが,これは全体的に滑らかな変化である場合に有効である一方,遮蔽物があったり,細かい起伏があったりすると使えない。Lunaのデモに出てくる壁は非常に彫りが深く,壁の突起自体の影になる部分も出てくるわけだが,こういうものに対応するため,今回はレイキャスティングによるリアルタイム凹凸表現に挑戦しているとのことだ。
 レイキャスティングによるリアルタイム凹凸表現とは,表面の凹凸部を細かいキューブで近似し,3Dテクスチャとして視線ベクトルがぶつかる部分の色を採用する方針で処理を進めるものだ。3Dテクスチャを使う方法だと,将来的には,凹凸だけでなく,穴の空いたような表面にも対応できると期待されている。



●目玉のレイトレース
 Lunaが変身するときに出てくる大きな目玉には,GPUを使ったレイトレーシング(説明すると長くなるため,速報である当記事では省かせていただくが,いずれ「西川善司の3Dゲームエクスタシー」で解説予定)が実装されている。目玉のモデリング自体はただの球体でしかなく,そこにくぼんだように見える虹彩部や瞳孔などは,表面のピクセルシェーダ(Pixel Shader)によって実現されている。とくに虹彩部には,リアルタイムレイトレーシング処理が行われているという。
 まず,目玉を完全な球体として定義し(実際の眼球は単純な球ではないが),もう1個,虹彩部分をえぐる見えない球体を想定して,演算を行っていく。レイトレーシングの場合,ポリゴンなどの単位ではなく,数式で表現できるプリミティブのブーリアン演算で形状を作ることも多い。今回の目玉も基本的にはポリゴンで作られているが,虹彩のシェーディングでは二つの球の方程式によるレイトレーシングが行われている。
 この部分はGeForce 6800シリーズでも描画可能ではあるが,虹彩部分が全画面に広がると重くなりすぎ,GeForce 7800シリーズでないと十分なレンダリングはできないことが確認されている。
 涙で濡れた質感を出すために,収束度の高いスぺキュラー(反射光)が合成されており,かなりの効果を上げている。



デザイナー用の設定変更ツール
●ヒーロースーツ 
 変身後のLunaのヒーロースーツには,シェーダが山盛りで使われている。実際,ほとんどジオメトリを使わずにシェーダだけで処理されている。とはいえ,見た目的には異方性反射(特定の角度でのみ強く反射する)を複数入れているのが目立つ程度で,それほど特筆すべき点は見当たらない。何層にもわたるシェーダの合成について延々と説明があったが,正直,ここはどういう表現になっても構わない部分なので,正解というものがなく,好きなように処理すればよいところでしかない。
 技法として気になったのは,ノイズを多用しているところ。今回は非常に滑らかな材質の表現なのだが,各所にノイズを乗せないとディテールが出てこないのだそうだ。
 NVIDIAとしては,これまでのデモでは衣服部分はシェーダをあまり使わず,軽い処理だったのが,Lunaでは衣服部分も重い処理になってご満足といったところか(まあ,これまでのデモの女の子があまり服を着ていなかったのだが)。

左上:レイヤー1層目
右上:レイヤー2層目
左下:デザイナーの初期イメージスケッチ
右下:最終画像


●髪の処理?
 ほとんど説明はなかったのだが,キャラの頭髪については,今回のデモでのテーマは「髪形」だったらしい。髪の毛を1本1本表現できる時代にはなったのだが,その1本1本に座標データを与えていく作業は,なんらかのツールがなければとんでもなく大変なことになるだろう。
 Dawnが発表されたGeForce FX世代では,技術的に可能なものが短髪の固定髪形だけだったので,モデリングツールだけでもなんとかなっていたのかもしれない。人魚のNaluのような長髪だと,身体の動きで髪が変形する。Naluの髪は「長髪」という大まかなデザインだけが決まっていて,あとは物理法則のみで制御されていたので,なにもなしで放っておくと実は大変なことになるらしい。今回のデモでは,Mad Mod MikeのヒゲやLunaの髪形も,髪形としてまとめることが大変だったそうだ。
 この説明のとき,Lunaの変身前の姿が紹介されていて,ケープをかぶっているから髪がはみ出したら大変だろうななどと思って納得していたものの,思い返すと,とくに凄い処理をしていたようには思われない。ちなみに,Lunaのケープを脱がしてみると,右のような髪形だったりする。髪形といえば髪形だが,下に垂らしただけでまったく何もしていないように見える。変身後も髪はふわふわしていて,基本的にNaluの髪の処理と大きな違いはないようだし……(だから,デザインは大変だという話になっているのか)。Mad Mod Mikeのヒゲも,別にあまり大変な長さではないと思うのだが,あれはあれで柔らかく動く面に生えているので大変なんだそうだ。
 最近では,写真から髪形のデザインを抜き出してモデリングすることもできるというが,自由な髪形のデザインが使えるようになるには,もう少し時間がかかりそうだ。

 セッション中は,「ここは,あとでどうせボカすから」といった言葉がかなり多く聞かれた。計算誤差でひび割れなどが出ていても,強めのブラー処理をかけてごまかす。あとでぼかすところは,最初からデータ解像度自体を落として演算する。遠いから半分でいいやとかいうのはまだしも,理論的な根拠なしで,「ここの反射は右にずらしてみた」とか,「そのままだと影がキツいので,陰影はこれくらいの傾きで」「そのままだとエッジがキツく出るので,光が強くなるほど反射を減らして」「映り込みをXYZ方向にブラーして」と,結果オーライなテクニックが多かったように思われる。
 ほかには「こっちの手法はマズいし,こっちの手法にも問題がある。じゃあ組み合わせて使おう」といったアプローチが多く見られた。厳密なシミュレートよりも,それなりの出力となるものを手っ取り早く作るというのが,高性能を出す秘訣のようだ。
 とはいえ,シーンの限定されたデモならともかく,自由度の高いゲーム内では破綻しそうな気がするのだが……。(aueki)


【この記事へのリンクはこちら】

http://www.4gamer.net/news/history/2005.08/20050830235908detail.html



4Gamer.Lobby

【現在人参加中】

【現在人参加中】