ニュース
[GDC 2010]AMDのエキスパートが語る「DirectX 11」におけるテッセレーションの実際
冒頭,Bilodeau氏が会場に集まった聴講者に「テッセレーションを試したことがある人?」と聞いたところ,ちらほら手が上がっていたので,最新技術をゲームに取り込む動きは進んでいるようである。なお,このセッション自体は,DirectX 11での具体的なコードによる実装の話が中心なのだが,コードの内容には踏み込めないので,概要だけ紹介しておこう。
まず,なぜテッセレーションを行うかについてだが,テッセレーションには数多くのメリットと一つのデメリットがあるという。すなわち,
- 表現が簡潔
- リアルタイムで無段階のLODが可能
- 輪郭が綺麗
- 3DCGツールの曲面データをそのまま表示可能
- アニメーションは分割前のモデルで行われるので高速
といったメリットがある半面,
- テッセレーションは不要である
面白いのは,講演のデモ中に「ワイヤーフレームに切り換えます」と操作しても見た目がまったく変わらないことも多く,きわめてポリゴン数の多いワイヤーフレームはテクスチャを貼っていないポリゴンとまったく変わらないくらいの高密度になっているのがよく分かり,次世代レンダリングシステムの候補として,ポイントレンダリングの話が出てくるのも納得できる。
テッセレーションを,単に使うのではなく,どううまく使っていくかが重要になりそうだ。
さて,講演では最初に単純な例を二つ,そして応用的な例を示すというかたちで,コードの提示とデモが行われた。
単純なテッセレーションの指定,これはポリゴン2個で構成された平面に対して,単純にテッセレーション処理を施すもので,横から見てもはっきりとした凹凸が生成されており,元が単なる平面だとは思えないくらいの効果を発揮している。
Bi-Cubicベジエ曲面が適しているとして,そのサンプルが示された。
いまのところ,DirectX 11のテッセレーションで自由曲面を扱う場合,決まってベジエ曲面が持ち出されるのだが,ベジエ曲面を扱う3DCGツールは,いま一つ少数派かもしれない。国産CGツールのShadeシリーズでは伝統的にサポートされているが,世間一般では自由曲面というとNURBS(Bスプライン系の曲面)を使うモデラーのほうが多いように思われる。DirectX 11のテッセレータでNURBSの実装もできないわけではないだろうから,本格的なパラメトリック曲面がゲームに実装されるようになるのは,NURBSの実装が終わってからではないだろうか。
これは形状の一部が破壊された場合などの変形を,テッセレーションで処理するもので,形状の一部を貼り替えたかのような雰囲気のものになる。形状全体を細分化するのではなくて,変化のある部分だけをテッセレートするため,効率も上がっている。おそらく,ある程度効果的にテッセレーションを活用する方向としては,デカール方式が最適なのだろう。“エキスパート”である氏が選んだのだから間違いはない(?)。
「遅いです。8ピクセル未満のポリゴンって効率悪いんですよ」
と述べているように,ポリゴン数を無数に増やしているわけなので,当然ながら処理は重くなる。
そこで,距離によって適当に間引くLOD処理が重要になってくる。テッセレーションにはLOD処理が必須というか,それを動的に行わないのなら,最初からハイポリゴンのデータを使っていればいいだけの話になってしまう。分割すること自体に意味があるのではなくて,いわゆるアダプティブなテッセレーションで動的に制御することが,そもそも目的なのだ。
実際,距離によって適切に間引きを行わないと高い負荷になることが示されており,LODを使った実装ではfpsが上がるのが確認できる。
さらに,「変化してるところだけでいいですよね」とか「裏面は描かなくてもいいですよね」とやっていると,だんだん実行速度も上がってくる。
このように,テッセレーションは,最適化次第でかなりパフォーマンスが変わってくるようだ。今後登場してくると思われる,テッセレーション活用タイトルを見る際の予備知識として,頭の隅に置いておくとよいかもしれない。
- 関連タイトル:
DirectX
- この記事のURL: