イベント
[CEDEC 2013]「OpenSubdiv」セッションレポート(後編) :OpenSubdivの今後とゲームグラフィックスの関わりについて
先日掲載したレポート前編では,OpenSubdiv誕生の経緯,そして現行のゲームグラフィックスとは異なるPixar独特の“ジオメトリ文化”を紹介した。
後編では,次世代ゲーム機では,ポテンシャル的に(すべては無理だとしても),Pixar的なグラフィックスアプローチに移行できるのではないか,という議論が起こりつつある,OpenSubdivの技術面の話題をお伝えする。
OpenSubdivの動作原理
まずは,OpenSubdivの動作原理について,簡単におさらいしておこう。
OpenSubdivは,SIGGRAPH 2012で発表された「Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces」(※PDF)という論文を実装したものだ。
この研究はPixarとMicrosoftの共同研究で進められたもので,Pixarが長らく採用してきた,Catmull-Clark(カトマル・クラーク)法ベースのSubdivision Surface(細分割曲面。本稿では,広義的にテッセレーションという言葉を用いる)技術を,適応型処理を組み合わせてリアルタイム実践する技術になる。
なおSubdivision Surfaceとは,ローポリゴンで構成された3Dオブジェクトをより細かなポリゴンメッシュに分割し,滑らかな曲面になるよう変換する手法だ。
Catmull-Clark法のテッセレーションにより生成される曲面は,双三次B-Spline曲面(Bicubic B-Spline Curved Surface)と等しくなる。しかし,この手法が適用できるのは,各頂点の価数(=隣接している頂点の数)が4のときだけで,それ以外の特異点(Extraordinary vertex),例えば頂点の価数が3や5のときには適用できない。
そこでまず,特異点以外の部分では,普通の双三次B-Spline曲面に置き換え,DirectX 11世代GPUのテッセレーションステージを使って,必要なクオリティでポリゴンを分割してレンダリングする。一方の特異点については,特異点内側のクアッドの分割レベルを1段上げて分割するというルールを適用していくのが,OpenSubdiv(のベース論文)の方針だ。
通常点と特異点の境界部分の分割に際しては,「トランジション・パッチ」と呼ばれる,推移箇所専用の専用分割アルゴリズムを適用するという。
着目しているクアッド(下に示す図中で赤く示した部分)に対して,特異点を含む周辺クアッド(図中の緑のクアッド)がどのように接しているかのパターンに合わせて,事前に用意しておいた分割手法を当て込んでいく。ここがまさに適応型処理の最たる部分だ。
例えば,図中の左端のパターンでは,特異点を含むクアッドが上に1つあるので,特異点を当該クアッド内の2頂点で結んだ三角形で分割する。その右隣のパターンでは,特異点含有クアッドが上と右に2つあるので,2つの特異点と当該クアッド内の1頂点を結んだ三角形で分割する。
そして,必要な回数までポリゴンメッシュを分割していき,最後の最後はクアッドのまま残したり,あるいは「Gregory Patch」(※PDF)と呼ばれる拡張型ベジェ曲面をはめ込だりしてごまかす……という手段をとる。
ただ,Catmull-Clark法に限ったことではないが,こうした曲面分割では,「角張ったものが何でもかんでも丸くなってしまう」という結果も生まれてしまう。
OpenSubdivでは,そうした箇所を特別扱いし,周囲のテッセレーションによる分割レベルから隔離(Isolation)させられる。隔離させた領域のテッセレーションレベルをIsolation Levelとして取り扱い,適度なところで設定することで,角張った箇所や,やや丸みを帯びた角(Semi-Sharp Crease)を持ったモデル表現を行えるようにしているのだ。
OpenSubdivの実装形態
手島氏は,PC上でのOpenSubdiv実装形態の解説を行った。
現状の実装形態では,3Dモデルを形成する情報のうち,Pixar式Catmull-Clark法テッセレーションを行うためのトポロジーデータと頂点データ(Pointデータ)を分けてデータ処理を行っている。
トポロジーデータは,「どこをどのくらいテッセレーションするか」といった制御情報や結線が入っているデータだ。これは,Subdivision Tableデータとして,GPU側に取りまとめられる。
一方の頂点データは,アニメーションを行うための基本形状モデルとも言うべきもので,レンダリング時に頂点パイプラインに流すための頂点バッファオブジェクト(VBO)に流し込まれる。
特徴的なのは,通常面を双三次B-Spline曲面に置き換えたり,特異点を含む面をGregory Patchに置き換えたりといった処理を,GPGPU(※コンピュートシェーダやCUDA)で行ってしまう点だ。この処理の結果も,もちろんVBOに流し込まれる。
VBOに必要なデータが集まったら,これをGPUのグラフィックスレンダリングパイプラインに流し込んで描画を行う。その際,双三次B-Spline曲面やGregory Patchの実際の処理は,グラフィックスパイプラインのテッセレーションステージが担当する。
OpenSubdivのAPIとしての機能
OpneSubdivは,Windowsをはじめ,OSX/iOS/Android/Linuxといったプラットフォームで展開されている。オープンソース化されたということもあって,中にはPixar社外のボランティア開発者達が開発しているものもある。
OpenSudivは,主に描画を行う「Draw」,通常面や特異点を含む面に対して適応型の処理を行う「Compute」,生成した曲面に対して評価を行う「Eval」という3つのモジュールから成り立っている。それぞれがさまざまな既存APIを用いて,各プラットフォーム向けに実装されているという形だ。
なお,前段落で描画パイプラインの解説を行ったが,これらは実質的に,「Draw」と「Compute」の部分に関するものだ。
「Eval」は,生成した曲面との衝突を取ったり,あるいは頭皮から毛髪を生やすというように,生成した曲面にさらに別のオブジェクトをつなげるといった際に利用するものになる。
「Draw」は,DirectX,OpenGL,OpenGL ESといった描画系APIを用いて実装されている。
「Compute」はCPUコードそのままだったり,あるいはOpenMP,OpenCL,CUDAといったGPGPU寄りのAPIが利用されていたりする。
「Eval」は,最近やっと実装され始めたモジュールのため,CPUコードの実装しか稼動していないそうだ。
OpenSubdivがサポートするOSプラットフォーム |
OpenSubdivの3つのモジュールが,どのAPIによって実装されているかを表した図 |
OpenSubdiv自体が提供するAPIは,ジオメトリの表現に関するテンプレートライブラリの「HBR」(Half-Edge Boundary Representation),通常面や特異点を含む面に対して適応型処理等などを司るAPIの「FAR」(Feature Adaptive Representation),ComputeとDrawの相関処理(Interop)を司るAPIの「OSD」(OpenSubdiv)という3階層からなっている。
HBRでは基本的に,PixarのレンダリングシステムであるRenderManのコードがそのまま使われている。また,OSDは,ハードウェアを実際に駆動させるモジュールだ。
なお,描画の実践に際しては,OpenSubdiv側が用意したハルシェーダ(OpenGLではTess.Control),ドメインシェーダ(OpenGLではTess.Evel),ジオメトリシェーダコードが走ることになるので,クライアントアプリケーション側では,頂点シェーダとピクセルシェーダだけを用意すればよい。
OpenSubdivの今後とゲームグラフィックスの関わりについて
手島氏は,OpenSubdivの開発にあたり,現行GPUが搭載しているテッセレーションステージの仕様に対する不満がいろいろと浮かび上がってきたと語る。
現行GPUにおけるテッセレーションステージの仕様では,着目しているポリゴンの任意の方向の辺に対して,異なるテッセレーションレベルでの分割はできるが,トランジション・パッチで必要とされているような,中点で一つ,各辺ごとに中点の左右でそれぞれ任意の分割数で分割,ということができない。このため,やむをえず三角形ドメインを使って3〜4回に分けて,中点を保証しつつ分割している。
そのため,先述した5つ(とその回転パターン)のトランジション・パッチの適用に際して,それぞれ別のハルシェーダプログラム,ドメインシェーダプログラムを稼動させる必要があるので,描画コール(DrawCall)が不用意に増大してしまっているという。
これについては,APIレベルの拡張で済むのか,ハードウェアレベルの拡張が必要なのかは不明だが,OpenGLを司るKHRONOSグループやNVIDIAなどのGPUベンダーに対して働きかけて,仕様拡張の提言をしていきたいと,手島氏は話していた。
OpenSubdivには,DrawCallを削減するための,DrawCallまとめ上げAPIも用意されている |
OpenSubdivの今後の機能拡張の方向性 |
2012年のOpenSubdivプロジェクト発表以来,業界からの反響は大きく,グラフィックス制作ソフトウェア方面へのOpenSubdiv採用は急速に進んでいるという。
ゲーム業界での採用事例も多いAutodesk Mayaは,次期バージョンでOpenSubdivへの統合がなされるとのことで,今回のプレゼンテーションで,その評価版の映像が公開された。
最後に手島氏は,OpenSubdivとゲームグラフィックスとの関わりについての展望を語った。
結論から言えば,現状のOpenSubdivはまだ,そのままゲームエンジンに組み込んで使えるものではないという。
というのも,OpenSubdivはもともと,リファレンスライブラリとして提供されるものだからだ。そもそもゲームエンジン向けに設計されたものではなく,どちらかと言えば前述したような,グラフィックス制作ソフトウェアをアクセラレーションするために開発されたものである。
そのため,まずは3Dモデルの制作を行うようなオーサリングツールへの組み込みにOpenSubdivを利用してはどうか,と手島氏は提案していた。
また手島氏は,たとえ直近のゲームのランタイム上でそのまま表示できないとしても,OpenSubdiv準拠のグラフィックス制作ソフトを用いて,3Dモデルを制作する価値はあると語る。
例えば,PlayStation 4向けのゲームタイトル用に,ある3Dモデルをテッセレーション前提で制作したとする。このゲームをスペックの低いゲーム機に移植する際,OpenSubdivを用いれば,スケーラブルに品質の高い3Dモデルが生成できるのだ。
同じ3Dモデルを低ポリゴンでもう一度モデリングしたり,あるいは専用コンバータや手作業によるポリゴン削減をしたりしなくてもよくなるわけだ。
手島氏は,「PlayStation 1で作った車をPlayStation 2で作り直し,PlayStation 3でまたまた作り直す。こうしたことはもうやめにしましょう」と,元ポリフォニー・デジタルのエンジニアらしいジョークを飛ばしていた。
ちなみにポリフォニー・デジタルでは,SPUを用いた適応型テッセレーションを実装した自動車モデルの制作手法を導入済み。「グランツーリスモ6」(PS3)には,適応型テッセレーションによって表現された自動車モデルが登場する予定だ。これが,PlayStation 4など将来への展開を見据えた制作戦略であろうことは,容易に予想が付く。
手島氏は,従来のポリゴン数が異なる3Dモデルのバリエーションを複数作りおく方式から,テッセレーション前提の3Dモデルの制作形態への移行を,「ドットフォントからアウトラインフォントへの移行」にたとえていた。確かに,テッセレーション前提の3Dモデル制作は,いわばアウトラインフォント(ベクトルフォント)の制作に相当すると考えれば,分かりやすく説得力のある話である。
まずはオーサリングツールへの導入が適しているのではないか |
多ポリゴンモデルの制作は高解像度ドットフォントの制作と同じこと……という例え話 |
レポート前編でも触れたように,低ポリゴンモデルに対して,複雑なシミュレーションや制御を行い,曲面やディテール盛りつけは,スケーラブルに後付けすべき…という主張がなされた |
手島氏は,そうしたテッセレーション前提の3Dモデルもいずれ,ゲームのランタイムで利用できるようになっていくはずだ,と予見する。
OpenSubdivに組み入れられた技術の数々は,オープンソースの形で提供されるため,ゲームのランタイム用に高速化したり,あるいはゲーム向けの最適化や近似といった,高速化のための“手抜き”を実践させることも,理論上は可能なはずだ。
ピクサーでも,3Dモデル自体は低ポリゴンモデルでモデリングしたものを用いているが,そこに付随するシワや突起といったディテール部分は,ディスプレースメント(変移)テクスチャとして分離して持っている。レンダリング時にはテッセレーションして多ポリゴン化した後の多ポリゴンモデルに,これを適用している。
すなわち,「低ポリゴンモデル→テッセレーションして多ポリゴン化→ディスプレースメントマッピングによるディテール付加」という流れだ。
ゲームグラフィックスにおいてOpenSubdiv的な発想が導入された場合も,同様のアプローチになると思われる。その際は「低ポリゴンモデル→テッセレーションして視点からの距離に比例した多ポリゴン化→視点からの距離に比例したディスプレースメントマッピングによるディテール付加」といった形になることだろう。
なお,この方法に対応した3Dモデルを構築しておけば,マルチプラットフォーム展開における低スペックマシンへの3Dモデル出力においても,固定頂点量の3Dモデルをディテール付きで必要な頂点解像度で適宜出力できる。
ゲーム業界では,DirectX 11世代GPUのテッセレーションステージの活用にいまだ消極的だが,PixarのOpenSubdivプロジェクトの進化や関連技術が洗練され,今後,どのような影響をゲーム開発サイドやGPUベンダーに及ぼしていくのか注目されるところだ。
- この記事のURL: