3Dゲームファンのためのグラフィックス講座

西川善司の3Dゲームファンのための「Panta Rhei」講座(前編)

「Panta Rhei」におけるテッセレーションの活用

 話を今1度、「Panta Rhei」に戻し、特にそのグラフィックスエンジンの素性と実力を探っていくことにしたい。「Panta Rhei」のグラフィックスエンジンは、DirectX 11世代のGPUに完全対応しており、逆にDirectX 11世代よりまえのDirectX 10世代以前のGPUには対応しない。グラフィックス世代でもMTフレームワークとは決別を図っており、裏を返せば、PS3、Xbox 360といった現行機向けにはMTフレームワークを引き続き活用していくという方針が明確化されているといえなくもない。

 さて、DirectX 11世代のグラフィックスパイプラインと言えば、特徴的なのはジオメトリ(ポリゴン)を分割増減処理が行なえるテッセレーションステージだ。テッセレーションステージはDirectX 11から新設されたフィーチャーであり、効果的な活用が期待されている注目株の機能でもある。

【DirectX 11のレンダリングパイプラインとテッセレーションステージ】
DirectX 11のレンダリングパイプラインとテッセレーションステージ。拙著「ゲーム制作者になるための3Dグラフィックス技術 増補改訂版」より

清水氏:Panta Rheiでは「Approximating Catmull-Clark Subdivision Surfaces」法(ACC法)を実装して組み込んでいます。ただ、描画システム全体に組み込んで使うには少々重すぎるという結論に達しています。ちなみに『deep down』のリアルタイム映像デモでは、魔法使いが着ていたローブの描画にだけ使用しています。

【「ロストプラネット2」とテッセレーションステージ】
カプコンは「ロストプラネット2」のPC版(DirectX 11対応版)の開発に際して、テッセレーションステージの活用を実践した。この時にも、ACC法などの導入を検討している

 つまり、描画するオブジェクトの全てにACCを組み込むにはアルゴリズム的に負荷が高いと言うことだ。もし、そうした活用を目指すならば、より高速化を考えなければならず、その高速化の一案として、フォン・テッセレーション法とのハイブリッド化が開発チーム内で検討されているとのこと。

 現在、「Panta Rhei」では、こうしたポリゴン自動分割機構を3Dモデル表現に応用するうえで「ZBrush」「3D-COAT」などを標準ツールとして対応を果たしている。

 「テッセレーションステージの活用」という意味では、これまでGPUメーカーは、LOD(Level of Detail)システムをGPUで実践させることを啓蒙してきた。LODとは、視点からの距離に応じて、描画する3Dモデルの品質を適宜切り換えていく仕組みのこと。具体的には、視点から近い位置においては多ポリゴンモデルを用いてハイディテールな表現を実践し、小さく描画されがちな視点から遠い箇所にいる3Dモデルについては低ポリゴンモデルに差し替えることでパフォーマンスを優先させるわけだが、このLODのレベル分けが大ざっぱ過ぎると、低ポリゴンと多ポリゴンモデルの切換の瞬間がプレーヤーに気づかれてしまう。これは特に「ポッピング現象」と呼ばれる。

【動的LODシステム】
テッセレーションステージを活用した動的なLODシステム。MATT JONES氏の論文より

三嶋仁氏(株式会社カプコン、大阪開発部、技術研究室、プログラマー)

三嶋氏:「Panta Rhei」でも、テッセレーションステージを駆使したLODシステムについては、こちらのシステム側で用意したシェーダーを組み合わせることで実現できるような設計にはしてあります。地形描画などにおいては、稜線にポッピングがでてしまうとクリティカルなので実践を奨励していますが、登場する全ての3Dモデルに対してこの手法を適用することはパフォーマンス面の見地から難しいですね。

 PS4の場合、比較的メモリ容量が大きいので、PS3世代と比較してLODのレベル分けを細かくして、多量のLODモデルを持たせた方が、「ポッピングの回避」と「パフォーマンスの安定性」の両立を実現させやすいかもしれない。

 そうなってくると、PS4、Xbox One世代のゲームグラフィックスにおいてもテッセレーションステージはあまり活用されないフィーチャーとなってしまうのだろうか。

三嶋氏:「Panta Rhei」では、テッセレーションステージを、より現実的な使い方で活用はしていますよ。例えば、ビルボードの動的な生成に使っています。グラフィックスパイプラインの中で、ポリゴン生成的な処理を行なうことを考えると、普通はジオメトリシェーダーでやることを連想しますが、これをテッセレーションステージやると意外に早くて、処理の流れとしてもスマートなんです。

 教科書通り的な概念で言えば、ポリゴンの増減はジオメトリシェーダーが担当するはずの処理系だが、「Panta Rhei」では、入力された1頂点をクワッド(四辺形)を構成する4頂点に“分割”することでビルボードを生成する処理系を実装したというわけだ。

 テッセレーションステージはハルシェーダー、テッセレーター、ドメインシェーダーの3段構成で、ハルシェーダーは入力された1頂点から四辺形を構成する4頂点を生成するアルゴリズムを実行し、その結果に従ってテッセレータが1頂点を“分割”して4頂点を生成する。このテッセレーション・ビルボード法の美点は3段目のドメインシェーダーの処理系にある。4頂点化された四辺形に対し、頂点シェーダーがやるべきような座標変換や、ピクセルシェーダーがやるべきライティング計算をドメインシェーダー側でやってしまうのだ。ジオメトリシェーダーで同様のことをやろうとすると、頂点シェーダーに差し戻す処理系になるが、この手法ならば、テッセレーションステージ内で帰結できるのだ。地味ながらも、なかなか賢いテクニックである。

【ドメインシェーダーでのライティング/シェーディング】
頂点シェーダーとピクセルシェーダーの中間的な解像度でのライティング/シェーディングをドメインシェーダーで行なうテクニックは、GDC2010でNVIDIAも提唱していた

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