お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2008/09/11 10:00

イベント

[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

画像集#003のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 ゲーム開発者向けイベントCEDEC 2008の2日目では,朝から夕方まで4コマにわたってNVIDIAによるグラフィックス技術を中心としたセッションが行われた。CEDECでは恒例となっている「開発の鉄人」のサブイベントである。ここでは,NVIDIAの一連のセッションの内容をまとめてレポートしておく。とはいえ,かなりプログラマ寄りの難しい話も多かったので,4本分の講演から,4Gamer的においしい部分をかき集めて紹介してみたい。


DirectX 11時代のオブジェクト表現手法


DirectX 11でのテッセレーションでの注意点を解説するNVIDIA風間隆行氏
画像集#004のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 まず,「DX11における変位細分割曲面のテッセレーション」という講演では,その名のとおりDirectX 11に追加されるテッセレーション(オブジェクト分割)の仕組みに関する講演が行われた。先日行われたGamefestでマイクロソフト自身が解説した新パイプラインの話とかぶる部分も多いが,とくにベジエパッチの計算法について念入りな解説がなされていた。あまりに細かい部分は,ここではパスしておくが,DirectX 11のテッセレーションが実現されると,キャラクターモデルなどが近くにきても輪郭がカクカクしないことだけ理解しておけばよいだろう。
 さらにテッセレーションでは,ポリゴン分割を行う際に,ベジエ曲面などを使って滑らかに補間するような頂点を出力する。これは確かに滑らかではあるが,これだと,のっぺりと丸いモデルしかできないので,ここにディスプレースメントマッピングを加えて,非常に詳細なモデリングに仕立てようというのが,DirectX 11時代でのポリゴンモデルの扱い方となる。
 ところで,ローポリモデルにノーマルマップでディテールを追加する手法は,最近のゲームでは主流といえるものになっているが,それを初めて実用レベルで実装したDOOM 3を思い起こすと分かるように,ノーマルマップで飾っても,ローポリモデルのままだと輪郭がカクカクでいま一つクオリティは高くならない。ディスプレースメントマッピングは,ノーマルマップと似ているが,ポリゴン内の見え方だけを変更するノーマルマップとは異なり,実際に凸凹を貼り付けると形状そのものが変化するので,横から見ても違和感のないモデルを作ることができる。
 ディスプレースメントマップとテッセレーションを組み合わせる際の手法と注意点や新しいツールなどについても紹介があった。

ディスプレースメントマップをうまく張り込むための手法の一つ。MipMap適用時にはやや注意が必要とのこと
画像集#006のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 さて,新しく追加されるハルシェーダ,テッセレータ,ドメインシェーダの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を効率よく回すには,このような機能分担がよいのだろう。
 講演の趣旨とはちょっと違ったところかもしれないが,個人的にちょっと理解できていなかった部分がすっきりしたのは収穫であった。

画像集#005のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 ちなみに,今回行われた講演中のデモモデルに使われていたのが,なんとなくエイリアンぽい人型やモンスターデータで,なんでもValveから借りてきたものだとかいう話だった。既存のゲームでは見たことのないモデリングデータなので,DirectX 11世代にリリースされるValveの新作なのかも……と,妄想を膨らませてみるのもいいかもしれない。


PhysXを使いやすくするAPEXの追加情報


PhysXとCUDAを紹介するKitty Vongsay氏
画像集#007のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 以前ちょっと紹介したPhysXで環境ごとに負荷制御ができるようになるAPI,APEXについて少し情報が追加できたのでそれも紹介しておこう。
 APEXは,ゲームの実行環境によって,どの程度PhysXの負荷を増やすのかをいろいろな項目別に指定できるようにする仕組みで,負荷調整機能を伴った高機能APIが作られている。今回は,Destruction,植物,布のモジュールの動作が確認できた。
 Destructionは,物体が壊れる挙動を物理演算でシミュレートするもので,PhysXでは,あらかじめ壊れたあとの分割済みオブジェクトを定義しておいて,必要に応じてオブジェクトをそちらに切り換え,破片を物理運動させる方式となる。破壊の規模が変わると,ゲーム物理に影響するのではないかとの懸念もあったのだが,デモとその解説からすると,破片の大きなものは最低レベルでも最高レベルでも同じように処理され,レベルが上がることで変わるのは,ごく小さい破片の量だけで,ゲーム物理には影響しない部分での調整のようだ。まあ順当な実装ではあるのだが,レベルを上げてもそんなに派手な割れ方になったりはしないのは少し残念か。

画像集#008のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#009のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 植物系のモジュールは,植生のミドルウェアとして有名なSpeedTreeに対応したもので,SpeedTreeの樹を物理運動させることができるというものになる。負荷制御の詳細は不明だったが,枝葉などの動かす単位などによるものと推測される。

植物系モジュールのデモ。木々をかき分けて乗り物が進んでいく
画像集#013のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#012のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 布は,ゆらゆらと揺れるさまであったり,破れたりといった事象が物理シミュレーションで実現できる。負荷制御は,布上の制御点をどれくらい細かく取るかで実装されている。
 APEXを使えば,こういったものを比較的簡単に実装できるようで,しかも負荷コントロールできるので,さほど実行環境を問わない(PhysXカードがないとゲームにならないといったことはなくなる)。今後のゲームでは,かなりいろんな物理表現が積極的に盛り込まれてくることが期待できそうだ。

メッシュの細かさが違うと少し破れる感じは変わるが,そう大きな差ではない
画像集#014のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#015のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#016のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが


ついにきたリアルタイムヘアシミュレーション


ヘアシミュレーションを解説するBryan Dudash氏
画像集#017のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 今回の目玉は,(個人的に)これだろう。「GPU上でのリアルタイムヘアシミュレーション」という講演では,ついに有重力化での髪の毛の表現について具体的な進捗を確認できた。
 NVIDIAで髪の毛といえば,NVIDIAの歴代デモ娘を抜きには語れない。大昔のものを除けば,GeForce FXとともに登場した妖精Dawnから始まり,Dusk,Nalu,Luna,Adrianne,Medusaと続いているわけだが,Down,Duskは髪の毛を1本1本描くという当時としては画期的な処理がされていたものの,ショートヘアで髪の毛自体に動きはなかった。Naluでは一転して長髪となり,水の流れとともにうねうねとした動きと金髪の表現など一気に進化を見せていた。しかし,Lunaでは,Naluと大差ない無重力下の長髪表現,Adrianneでは髪の毛はまとめられており動きはまったくなし,Medusaでは髪の毛ですらなかった。ごく普通の髪の毛というのが,これまで表現されていなかったのだ。

 今回発表されたのはNVIDIAが,DirectX 11を前提に開発を進めている髪の毛の表現である。

画像集#019のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 ざっと見ると,大まかなところはNaluで実現された技術をベースとしているようだ。髪の毛は166本の「ガイドヘア」に限ってシミュレーションされ,ガイドヘアとガイドヘアの間は補間して埋めていくというアプローチだ。Naluのときと比べてガイドヘアの本数がかなり少なくなっているのだが(762→166),少なくても十分と判断されたのか,GPU上で処理するために削減されたのかは不明だ。実行結果だけ見ると,十分に自然であり,166本で十分だったようにも思われる。
Naluの髪。結構カクカクしている
画像集#020のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 Naluのときと比べての最大の変化は,髪の毛が滑らかであることである。それなりの頂点数で作られていたとはいうものの,Naluの髪の毛はよく見るとカクカクしていた。頂点数に限りがある以上,直線部分が見えるのはいたしかたない。
 新しい髪の毛表現では,テッセレーションによって,そのカクカクをなくしている。そのため,GeForce GTX 280を使ってさえ運動時で41fps(ハイポリ時17.5fps)程度と処理はかなり重いものになっているが,DirectX 11のテッセレータパイプラインを使うことで,このあたりは大幅な高速化が期待できるので,次世代ゲームには十分期待できる。現状では,DirectX 10ベースでジオメトリシェーダとストリームアウトを繰り返すことで演算が行われている。はっきりいってNVIDIAのジオメトリシェーダは,特定条件以外では非常に遅いのだが,頂点シェーダでは頂点1個しか扱えないのでジオメトリシェーダが使われている。

画像集#030のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#029のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 髪の毛を構成する頂点は,それぞれパーティクルとして扱われており,前後の頂点間で一定の距離を保つという規則が適用されている。また,髪の毛同士の重なりを防ぐため,ボリューム処理で髪の密度が多いところでは力が働き,密度の薄い方向へ自然と移動するような実装となっている。


画像集#028のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#033のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 ガイドヘア以外の髪の毛は,ガイドヘアと同じものを近くに配置するクランプベース補間と,ガイドヘア同士を補間するマルチストランド補間の両方が使われている。クランプベースでは,髪の毛の束になった感じが表現され,マルチストランドでは,サラサラの滑らかな髪の表現となる。組み合わせると,なかなかよい感じだ。

画像集#031のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#026のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

画像集#024のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
 ただ,なにも考えずにガイドヘアを補間すると,顔を突き抜けたりするので,起点から障害物との衝突ををサーチし,どこかにぶつかった時点でクランプベースの処理に切り換えるといったアルゴリズムが使われているという。ちなみに,クランプベースの処理も障害物に食い込むことはあるのだが,ガイドヘアと(衝突などを回避する処理がきちんと行われている)かなり近い場所にしかないので,少々の食い込みは見ても気にならず,放置しても大丈夫とのこと。

画像集#032のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#023のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 そのほか,細かい工夫が重ねられて,なかなか見事な髪の毛がシミュレートされている。三つ編みとかは別処理でやったほうがいいだろうが,カールをかけることもできるとのこと。
 とりあえず,DirectX 11をターゲットに研究されているようなので,DirectX 11対応GPU登場時のデモ娘の髪に期待しておこう。

画像集#022のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#025のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが
画像集#027のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが 画像集#021のサムネイル/[CEDEC 2008#07]NVIDIA開発の鉄人総ざらい,ついにリアルタイムヘアシミュレーションが

 会場で公開された,Dawnちゃんにブロンドの髪を生やしてみたというなかなかレアなデモムービーのファイルをもらったので,ぜひ開発途上のリアルタイムヘアシミュレーションをご覧いただきたい。


 なお,最後に高速なアンビエントオクルージョン処理に関する講演も行われたのだが,基本的にGDC 2008のときに紹介したものと同じとのことなので,ここでは割愛する。

 全体にDirectX 11に関係した内容もいくつかあったのだが,DirectX 11自体がまだ存在しないので,NVIDIAにもよく分からない部分も多いらしい。しかし,リファレンスラスタライザなどを含む開発版が登場すれば,DirectX 11への流れが一気に加速しそうな雰囲気も感じられた。逆に見れば,この時点ですでにDirectX 11をターゲットにした話がいくつも動いているというのも凄い話かもしれない。いろいろと強力な機能を備えてくるので,約1年後に登場するといわれるDirectX 11に期待したいところだ。
  • 関連タイトル:

    DirectX

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:12月17日〜12月18日