イベント
[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
DirectX 11時代のオブジェクト表現手法
さらにテッセレーションでは,ポリゴン分割を行う際に,ベジエ曲面などを使って滑らかに補間するような頂点を出力する。これは確かに滑らかではあるが,これだと,のっぺりと丸いモデルしかできないので,ここにディスプレースメントマッピングを加えて,非常に詳細なモデリングに仕立てようというのが,DirectX 11時代でのポリゴンモデルの扱い方となる。
ところで,ローポリモデルにノーマルマップでディテールを追加する手法は,最近のゲームでは主流といえるものになっているが,それを初めて実用レベルで実装したDOOM 3を思い起こすと分かるように,ノーマルマップで飾っても,ローポリモデルのままだと輪郭がカクカクでいま一つクオリティは高くならない。ディスプレースメントマッピングは,ノーマルマップと似ているが,ポリゴン内の見え方だけを変更するノーマルマップとは異なり,実際に凸凹を貼り付けると形状そのものが変化するので,横から見ても違和感のないモデルを作ることができる。
ディスプレースメントマップとテッセレーションを組み合わせる際の手法と注意点や新しいツールなどについても紹介があった。
ハルシェーダは,パッチに関する操作を行う新シェーダで,ドメインシェーダは頂点を扱う新シェーダである。32頂点からなるデータを扱うハルシェーダでの処理のあとに1頂点ずつの処理を行うドメインシェーダの処理が行われるわけだが,その間にあるテッセレータというのはどのような処理をしているのか,それがいま一つ謎だった。今回聞いた話では,少なくとも現状のところ,テッセレータはドメインシェーダのセットアップユニットとして動作するものという理解でよいようだ。
例えば,ベジエ曲面による分割を行う場合,曲面自体を規定する制御点は16個分の情報が必要となる。そして,パッチ内の位置を表すのに,u,v座標が指定される。ハルシェーダで扱うパッチ内をu方向に10回,v方向に5回分割する場合,uv座標ごとに(0.1,0.0),(0.2,0.0)……(0.1,0.2)……といった感じでパラメータが指定され,そこから新しい頂点が生成される。この処理で,新しい頂点の座標を計算し生成するのはドメインシェーダの役目となる。テッセレータはというと,(0.1,0.2)といったパラメータを生成して,順にドメインシェーダに渡して呼び出すだけ。名前からすると,テッセレーションの中心的な処理をしている雰囲気があるのだが,非常に単純な処理をするユニットだという。
分割の実体はドメインシェーダで行われ,ここはプログラマブルなのだから,ベジエ以外での分割法実装も可能だということだ。ベジエパッチ以外に軽くグレゴリーパッチ(改良型ベジエ曲面)の話や,言葉だけだがBスプライン,NURBSといった単語も出てきていた。
そもそも,なんで3個ものユニットに分けて処理しているのだろうかというのを想像すると,例えば,極端な例で100×100個に分割を行う必要があった場合,1個のユニットで高次方程式を使う処理を1万回繰り返すとさすがにボトルネックになりそうだ。呼び出し部分が独立していれば,複数のドメインシェーダを使った並列処理もできる。GPUを効率よく回すには,このような機能分担がよいのだろう。
講演の趣旨とはちょっと違ったところかもしれないが,個人的にちょっと理解できていなかった部分がすっきりしたのは収穫であった。
PhysXを使いやすくするAPEXの追加情報
APEXは,ゲームの実行環境によって,どの程度PhysXの負荷を増やすのかをいろいろな項目別に指定できるようにする仕組みで,負荷調整機能を伴った高機能APIが作られている。今回は,Destruction,植物,布のモジュールの動作が確認できた。
Destructionは,物体が壊れる挙動を物理演算でシミュレートするもので,PhysXでは,あらかじめ壊れたあとの分割済みオブジェクトを定義しておいて,必要に応じてオブジェクトをそちらに切り換え,破片を物理運動させる方式となる。破壊の規模が変わると,ゲーム物理に影響するのではないかとの懸念もあったのだが,デモとその解説からすると,破片の大きなものは最低レベルでも最高レベルでも同じように処理され,レベルが上がることで変わるのは,ごく小さい破片の量だけで,ゲーム物理には影響しない部分での調整のようだ。まあ順当な実装ではあるのだが,レベルを上げてもそんなに派手な割れ方になったりはしないのは少し残念か。
植物系のモジュールは,植生のミドルウェアとして有名なSpeedTreeに対応したもので,SpeedTreeの樹を物理運動させることができるというものになる。負荷制御の詳細は不明だったが,枝葉などの動かす単位などによるものと推測される。
布は,ゆらゆらと揺れるさまであったり,破れたりといった事象が物理シミュレーションで実現できる。負荷制御は,布上の制御点をどれくらい細かく取るかで実装されている。
APEXを使えば,こういったものを比較的簡単に実装できるようで,しかも負荷コントロールできるので,さほど実行環境を問わない(PhysXカードがないとゲームにならないといったことはなくなる)。今後のゲームでは,かなりいろんな物理表現が積極的に盛り込まれてくることが期待できそうだ。
ついにきたリアルタイムヘアシミュレーション
NVIDIAで髪の毛といえば,NVIDIAの歴代デモ娘を抜きには語れない。大昔のものを除けば,GeForce FXとともに登場した妖精Dawnから始まり,Dusk,Nalu,Luna,Adrianne,Medusaと続いているわけだが,Down,Duskは髪の毛を1本1本描くという当時としては画期的な処理がされていたものの,ショートヘアで髪の毛自体に動きはなかった。Naluでは一転して長髪となり,水の流れとともにうねうねとした動きと金髪の表現など一気に進化を見せていた。しかし,Lunaでは,Naluと大差ない無重力下の長髪表現,Adrianneでは髪の毛はまとめられており動きはまったくなし,Medusaでは髪の毛ですらなかった。ごく普通の髪の毛というのが,これまで表現されていなかったのだ。
今回発表されたのはNVIDIAが,DirectX 11を前提に開発を進めている髪の毛の表現である。
ざっと見ると,大まかなところはNaluで実現された技術をベースとしているようだ。髪の毛は166本の「ガイドヘア」に限ってシミュレーションされ,ガイドヘアとガイドヘアの間は補間して埋めていくというアプローチだ。Naluのときと比べてガイドヘアの本数がかなり少なくなっているのだが(762→166),少なくても十分と判断されたのか,GPU上で処理するために削減されたのかは不明だ。実行結果だけ見ると,十分に自然であり,166本で十分だったようにも思われる。
新しい髪の毛表現では,テッセレーションによって,そのカクカクをなくしている。そのため,GeForce GTX 280を使ってさえ運動時で41fps(ハイポリ時17.5fps)程度と処理はかなり重いものになっているが,DirectX 11のテッセレータパイプラインを使うことで,このあたりは大幅な高速化が期待できるので,次世代ゲームには十分期待できる。現状では,DirectX 10ベースでジオメトリシェーダとストリームアウトを繰り返すことで演算が行われている。はっきりいってNVIDIAのジオメトリシェーダは,特定条件以外では非常に遅いのだが,頂点シェーダでは頂点1個しか扱えないのでジオメトリシェーダが使われている。
髪の毛を構成する頂点は,それぞれパーティクルとして扱われており,前後の頂点間で一定の距離を保つという規則が適用されている。また,髪の毛同士の重なりを防ぐため,ボリューム処理で髪の密度が多いところでは力が働き,密度の薄い方向へ自然と移動するような実装となっている。
ガイドヘア以外の髪の毛は,ガイドヘアと同じものを近くに配置するクランプベース補間と,ガイドヘア同士を補間するマルチストランド補間の両方が使われている。クランプベースでは,髪の毛の束になった感じが表現され,マルチストランドでは,サラサラの滑らかな髪の表現となる。組み合わせると,なかなかよい感じだ。
そのほか,細かい工夫が重ねられて,なかなか見事な髪の毛がシミュレートされている。三つ編みとかは別処理でやったほうがいいだろうが,カールをかけることもできるとのこと。
とりあえず,DirectX 11をターゲットに研究されているようなので,DirectX 11対応GPU登場時のデモ娘の髪に期待しておこう。
会場で公開された,Dawnちゃんにブロンドの髪を生やしてみたというなかなかレアなデモムービーのファイルをもらったので,ぜひ開発途上のリアルタイムヘアシミュレーションをご覧いただきたい。
なお,最後に高速なアンビエントオクルージョン処理に関する講演も行われたのだが,基本的にGDC 2008のときに紹介したものと同じとのことなので,ここでは割愛する。
全体にDirectX 11に関係した内容もいくつかあったのだが,DirectX 11自体がまだ存在しないので,NVIDIAにもよく分からない部分も多いらしい。しかし,リファレンスラスタライザなどを含む開発版が登場すれば,DirectX 11への流れが一気に加速しそうな雰囲気も感じられた。逆に見れば,この時点ですでにDirectX 11をターゲットにした話がいくつも動いているというのも凄い話かもしれない。いろいろと強力な機能を備えてくるので,約1年後に登場するといわれるDirectX 11に期待したいところだ。
- 関連タイトル:
DirectX
- この記事のURL: