西川善司の3Dゲームファンのための「PICA200」講座(後編)
「MAESTRO-2G」からニンテンドー3DSの表現力を考察する!


6月収録

会場:DMP本社




 「PICA200」講座前編に引き続き後編では、DMPの独自グラフィックス機能である「MAESTRO」によって提供されるグラフィックス表現の1つ1つを見ていくことにしよう。

 DMPは、PICA200の技術デモには、業界標準ベンチマークソフトとして名高い「3DMark」シリーズの開発元であるFuturemarkと共同開発した「MIKAGE(御影)」を用いており、本稿でも、これを見ながら解説をしていくことにする。まずは本文に入る前に下記デモをごらん頂きたい。


【MIKAGE(御影)】
DMPとFuturemarkとのコラボレーションで生まれたリアルタイム3Dグラフィックス・デモ「MIKAGE(御影)」


■ MIKAGEデモに見るMAESTRO-2Gの表現力

FuturemarkとDMPとの共同開発で生まれたPICA200のテクノロジーデモ「MIKAGE(御影)」
今回のE3で公開されたニンテンドー3DS「Nintendogs+cats」より。ファーシェーダー表現は、3Dモデルの表皮に積層させたポリゴンに対して法線マップを適用することで実現が可能

 このMIKAGEデモは、OpenGL/ES1.1+1.1拡張パックの機能をフル活用し、さらにPICA200のMAESTROの部分も駆使されている。なお、現在のPICA200のMAESTROは第二世代であり、これは「MAESTRO-2G」と呼ばれている。これは2006年の初公開時から変わりが無い。なお、MAESTRO-1Gは、ULTRAY2000に搭載されたものであった。

 このMIKAGEは、OpenGL/ESアプリケーション開発者にとってのベンチマークソフトとしての立場もあることから、「OpenGL/ES1.1までを使う」、「+1.1拡張パックまでを使う」、「+MAESTRO-2Gまでをフル活用する」といった段階別の表現を確認することができるようになっている。

 PICA200の最もベーシックなレンダリングとなるOpenGL ES1.0ベースでは、頂点単位のライティング計算を行ない、これをピクセル単位で線形補間して描くスタイルになる。OpenGL ES1.0でも、テクスチャマッピングは利用できるのでプレイステーション1世代程度のグラフィックス表現は余裕で行なえる。

 なお、αブレンディングも行なえるため、これを利用することで負荷はかかるが映り込みの模擬表現を行なうことができる。具体的には、床を除いたシーンを床面で反転した位置から鏡像としてレンダリングして、これに床面をレンダリングしてαブレンディングし、最後に床上の光景を普通にレンダリングする。


【αブレンディング】
OpenGL ES1.0によるレンダリング結果(左)、OpenGL ES1.0においても、鏡像のレンダリングを行なってからαブレンディングを行なうことで力業の映り込み表現は可能(右)

 前述したように、OpenGL/ES1.1と1.1拡張パックを利用すると、キューブ環境マップやスペキュラマップが利用できるようになるので、静的な映り込みであればOpenGL ES1.0時よりも高効率に表現ができるようになる。

 MAESTRO-2Gまでを利用すると、ほぼプログラマブルシェーダーベースの表現に近いライティング効果も利用できるようになる。MIKAGEのデモにおいてその効果として分かりやすいのは、法線マップによる微細凹凸表現だ。

【キューブ環境マップ/スペキュラマップ】
OpenGL ES1.0によるレンダリング結果(左)、OpenGL/ES1.1+1.1拡張パックによるレンダリング結果(右)。キューブ環境マップやスペキュラマップの効果に注目

【MAESTRO-2G】
上段がMAESTRO-2Gを使用しないレンダリング結果で下段が使用したレンダリング結果。法線マップの適用以外に、異方性反射にまで配慮したフォン(Phong)シェーディングや、クック・トランス(Cook-Torrance)の鏡面反射モデルに準拠したピクセル単位のライティング(Per-Pixel Lighting)が行なわれている


■ MAESTRO-2Gのプロシージャルテクスチャ生成機能

MAESTRO-2Gが提供するプロシージャル・テクスチャ機能

 組み込み機器や携帯機器において、最もクリティカルな問題となるのがメモリ容量だ。デスクトップPC等と違い、大容量のメモリを搭載できない機器での3Dグラフィックスでは、いかに少ないメモリで豊かな表現が行なえるかが重要なポイントとなってくる。

 まず、3Dグラフィックス表現に関わるリソースにおいて最も直接的にメモリを消費する要素と言えばテクスチャだろう。テクスチャはいわば画像素材であり、そのシーンやモデルを豊かに見せようとすればするほど必要になってくる。

 しかし、近年では、よく用いられる典型的な自然物のテクスチャについては算術合成してしまおうとする研究が進みつつある。それがいわゆる「プロシージャル・テクスチャ」(Procedural Textures)だ。

 プロシージャル・テクスチャはシェーダープログラムで実現しようとすると、非常に負荷が高くなるため、未だ最先端の3Dグラフィックスにおいても実用例は少数に留まる。しかしDMPは、組み込み機器や携帯機器にとっては、少ないパラメータで多彩なテクスチャを産み出せることはメリットが大きいと判断し、MAESTRO-2Gにプロシージャルテクスチャ生成専用のロジックを組み込むことを決断した。実際、これは2006年の初仕様公開以来、他に未だ類を見ないMAESTRO-2G独自の機能となっている。

 DMPの発表によれば、この機能により、256×256テクセルの32ビットテクセルの実体容量256KB相当のテクスチャを、プロシージャル・テクスチャで表現すれば、わずか3KBで表現できるという。これは容量比でいえば1/85に相当する。

 実は、プロシージャル・テクスチャ機能のメリットは、容量の節約だけに留まらない。MAESTRO-2Gのプロシージャルテクスチャ生成ロジックは、同じパラメータを与えれば常に同じ値が得られるような、反復周期性のあるノイズ生成ユニットが原動力となっている。このためプロシージャル・テクスチャは、その生成パラメータだけを持っておけば、任意の解像度のテクスチャとして利用ができるのだ。

 つまり、レンダリング時には、そのピクセルに対応するテクスチャアドレスを与えれば、そのプロシージャル・テクスチャにおけるテクセル値を一意的に得ることができるため、どんなに視点がテクスチャに近づいてもそのテクスチャがカクカクして見えることがない。いうなれば、プロシージャル・テクスチャ機能によって生成されるテクスチャの解像度は無限大ということになる。


【プロシージャル・テクスチャ】
MAESTRO-2Gのプロシージャル・テクスチャ機能によって生成された大理石模様テクスチャ(左)、MAESTRO-2Gのプロシージャル・テクスチャ機能によって生成された木目模様テクスチャ(右)
レンズフレアや光芒表現で用いられる幾何学模様的なテクスチャもプロシージャル・テクスチャ機能を利用することで得ることができる。右は実際の利用例

 MAESTRO-2Gのこのプロシージャル・テクスチャ機能によって生成できるテクスチャのタイプとしては、木目、大理石のような自然物模様から、煉瓦、石畳、水玉のような人工物パターンまで対応する。もっと単純なドーナツ型や星形、円のような幾何学模様テクスチャの生成ももちろん可能だ。

 MIKAGEデモでは、床の木目テクスチャが、このプロシージャル・テクスチャ機能を用いて生成したプロシージャル・テクスチャになる。MIKAGEデモでは算術合成であることがバレないように、このプロシージャル・テクスチャの木目の上に微細凹凸の法線マップを重ねる工夫でリアリティを増強している。こうしてみる限り、実用度は高そうだ。

【プロシージャル・テクスチャ その2】
MIKAGEデモにおける木目模様のプロシージャル・テクスチャ(左)。法線マップを加えてさらにリアリティを強調(右)。言われなければ、これが算術合成された木目だと気がつく人は少ないはず


■ MAESTRO-2Gはテッセレーション機能も内蔵する

E3で公開されたニンテンドー3DS「新・光神話 パルテナの鏡」より。こうした球形状のモンスターもPICA200だからこそ美しい曲面で表現できたのかもしれない

 3Dモデルを構成するメッシュデータは、多ポリゴンのモデルになればなるほど、表現としては美しくなるが、その分多くの頂点データを含有することになるため、メモリ容量を圧迫する。しかし、低ポリゴンのモデルでは、パフォーマンス的には有利だが、大写しになったときにカクカク感が目立ち、クオリティの低さが露呈してしまう。

 一般的な据え置き型ゲーム機やPCゲームの3Dグラフィックスエンジンでは、多ポリゴンモデルと低ポリゴンモデルの2つを用意して、視点からの距離が近い大写しになるときには多ポリゴンモデルをレンダリングし、視点から遠い小さくレンダリングされるときは低ポリゴンモデルの使用に切り換えるLOD(Level of Detail)の仕組みを用いることが多い。しかし、多ポリゴンモデルと低ポリゴンの2モデルをメモリに置くのは、メモリ容量が潤沢ではない組み込み機器や携帯機器ではあまり歓迎されることではない。

 そこでDMPは、MAESTRO-2Gに、低ポリゴンモデルに対し算術的に頂点を補って多ポリゴンモデルへと変身させる「サブディビジョンサーフェース」(または「ポリゴン・パッチ」)のロジックをハードウェア実装させた。この仕組みにはポリゴンを算術自動分割する仕組みである「テッセレータ」(Tessellator)の存在が欠かせないが、MAESTRO-2Gでは、これを内蔵していることになる。

 MAESTRO-2Gのテッセレータは頂点パイプライン側の頂点プロセッサに内蔵されており(正確には頂点プロセッサにおいてサポートされているジオメトリシェーダ機能によって実現される)、入力されたポリゴンを「どの程度の細かさで分割するか」をパラメータで指定できるようになっている。このため、視点から近い3Dモデルに対しては滑らかな曲面が得られるように高精度に分割し、視点から遠い時には分割しない、といった処理の切り分けをすることが可能だ。これは、つまり、CPU側で動作する3Dグラフィックスエンジン(ゲームエンジン)ではなく、GPU側の頂点パイプライン側にて実質的なLOD(Level of Detail)制御を行なえることになり、ゲームエンジン設計のシンプル化とハイ・パフォーマンスの両立化ができることになる。

 もちろん、このテッセレータの仕組みを活用する場合は、ゲームエンジン側で管理する3Dモデルは低ポリゴンで済むため、メモリ使用量の節約にも繋がる。DMPによれば、最大で、入力ポリゴンの16倍のポリゴン数に分割することも可能だとのことで、逆に言えば3Dモデルのメモリ占有量を1/16にできるのだ。

 MIKAGEデモでは、銅鑼(どら)や燭台にMAESTRO-2Gのテッセレーション機能が利用されている。銅鑼に関して言えば、オリジナルデータはたかだか40ポリゴンだが、これにテッセレーションを適用して16倍の640ポリゴンに分割している。その効果は銅鑼の輪郭の滑らかさを比較すれば明らかだ。

 ちなみに、テッセレータは、最先端3Dグラフィック環境であるPCにおいても、やっとDirectX 11にて標準パイプラインに組み込まれたほどの先端技術になる。組み込み機器向け、携帯機器向けのGPUというと「妥協仕様の塊」という先入観があるかもしれないが、前述のプロシージャル・テクスチャ機能もそうだが、MAESTRO-2G(PICA200)においては、必要な要素技術に関しては貪欲に先端技術を取り込んでいる。


【テッセレーション】
40ポリゴンで構成された銅鑼(左)とテッセレーションにより640ポリゴンに増強された銅鑼。そのシルエットは限りなく円に近い
布のシミュレーションを低ポリゴンで行なう(左)。その結果をテッセレーションを行なって描画する。こうすることで、少ない頂点数のシミュレーションでパフォーマンスを稼げ、なおかつ描画結果は美しくできる
上段はオリジナルの燭台モデル。下段はテッセレーションを行なった燭台モデル。テッセレーションを行なうだけで曲線で構成された美しい燭台に変貌する


■ ソフトシャドウ及びセルフシャドウ表現に対応するMAESTRO-2Gの影生成

E3で公開された3DS版「バイオハザード」より。中央の男性の頭部の影が胸元に投射されているセルフシャドウ表現に注目

 MAESTRO-2Gの影生成は、シーンの遮蔽構造を深度バッファ(Zバッファ)にレンダリングしてから、この情報を元に光源からの光の照射の可否判定を行なっていく「デプスシャドウ」(シャドウマップ)技法に対応する。MIKAGEデモでは、これは背景物のリアルタイム影生成に利用されており、例えば紅葉の木の枝の影が自身の葉の上に投射されるセルフシャドウ表現は、この技法ならではのものといえる。

 なお、光源からの光の照射方向に3Dモデルの各頂点を引き伸ばして得られる影領域(シャドウボリューム)をステンシルバッファにレンダリングして影を抜き出す「ステンシルシャドウボリューム」技法にも対応できるとのことだが、MIKAGEデモでは利用されていない。

 この他、最も基本的な手法である投射テクスチャマッピングによる、いわゆる「投射シャドウ」(Projection Shadow)技法にも対応する。これは光源位置に視点を置いて主要キャラクタのシルエットをテクスチャにレンダリングして影テクスチャを生成し、これを投射テクスチャマッピングすることによって実現されるが、この影生成技法はOpenGL ES1.1の1.1拡張パックに含まれるFrame Buffer Object(FBO)機能を利用することで実現できるため、MAESTRO-2Gの力を借りなくてもOKだ。MIKAGEデモでは、鎧武者の影生成に利用されている。こちらはその関係でセルフシャドウが出ていない。

 よく観察すると、デプスシャドウ技法による影、投射シャドウによる影、全ての影表現に輪郭がぼやけた「半影処理」(Penumbra)が適用されていることに気がつくと思うが、これはMAESTRO-2G側の独自のサンプル技術によって実現されているという。


【影生成】
上段が影生成オフ、下段が影生成オン。影輪郭が、柔らかい半影表現になっている点に着目


■ MIKAGEデモに見るPICA200の頂点パフォーマンス

 DMPは、MIKAGEデモにおいて、陽光に照らされた紅葉の裏側が薄く見えると言う表現に、疑似的な表面下散乱の表現を用いていると説明する。しかし、これは実際には、いわゆる両面ライティングとか両面テクスチャリングと呼ばれるテクニックと推察される。DMPによれば、MIKAGEデモには含まれないが、オブジェクトの形状(厚みや曲率など)に配慮した表面下散乱の表現も可能だとのことで、そうしたタイプの表現を実践したサンプルショットも以下に示しておく。

 PICA200の頂点プロセッサは、前編でも触れたように、実質的にはプログラマブル頂点シェーダーなので、こうしたことが実現できる。これは視線と光源が相対していると判断できるときに追加のライティングとテクスチャリングを行なうことで実現される。

 MIKAGEデモの紅葉表現では、葉の表側のテクスチャ適用結果と裏側のテクスチャ適用結果をそれぞれレンダリングして、その2つの結果を、陽光と視線の角度に依存してα合成していると推察される。

 鎧武者の動き、籏(布)のはためき、木々の揺れなどの表現にも、PICA200の頂点プロセッサが効果的に機能を果たしているが、これらは、これらはOpenGL ES1.1のベースライン機能である頂点スキニングによって実現されているものになる。


【その他の表現】
両面ライティングオフ(左)、両面ライティングオン(右)
MIKAGEデモによるボーンスキニングの様子。鎧武者、紅葉の木、奥の布にまでボーンが仕込まれている点に注目

【その他の表現 その2】
不透明なガラス素材の表現(左)、ゴム素材(あるいは蝋)の表現(中央)、肌の表現(右)


■ MIKAGEデモに用いられていない、その他のMAESTRO-2Gの機能

ULTRAY2000発表時に公開された、布の質感を表現するBRDFデモ
E3で公開された3DS版「マリオカート」より。この雲の表現はガス・オブジェクト・レンダリング機能によるものか。レンズフレアはプロシージャル・テクスチャ機能によるもの?

 MIAKEGデモには使われていない、MAESTRO-2Gの機能もある。その1つがBRDFベースのシェーディング機能だ。BRDFとはBidirectional Reflectance Distribution Functionの略で、和訳すると双方向反射率分布関数になる。なにやら難しそうなイメージだが、簡単に言えば入射光に対して出力光がどうなるかを表した関数になる。

 実際のリアルタイム3Dグラフィックスにおいては、光の反射応答特性データをテクスチャ化し、入射光方向、面の向き(法線ベクトル)、視線方向をパラメータにしてこのテクスチャから値を取り出し、これをベースにしてライティング計算をするような実装を行なう。この仕組みをパラメトリックに取り扱える仕組みがMAESTRO-2Gに備わっていることになる。

 布の陰影や特殊なコーティングがなされた金属材質表現、あるいは薄膜表現などの異方性のライティング表現に重宝するメソッドになる。

 MAESTRO-2Gには、「ガス・オブジェクト・レンダリング」という機能も備わっている。これは実体のない気体(ガス・オブジェクト)をレンダリングするためのもので、突き詰めて言えばMAESTRO-2Gのパーティクルシステムということになる。

 具体的には、パーティクル自体に法線マップを適用したり、その他の3Dオブジェクトとパーティクルが交差した際に、交差線を出さないようにするソフトパーティクル処理を行なったりするもののようだ。


【ガス・オブジェクト・レンダリング】
MAESTRO-2Gによって提供されるガス・オブジェクト・レンダリング機能


■ まとめ~ニンテンドー3DSの3D性能はいかほどなのか?

DMPのロードマップ
取材当日に見せて頂いたPICA200(NV7)ベースのGPUで動作するMIKAEデモの裸眼立体視版。こちらも「3DSQUARE」の支援なし、PICA200の単独での立体視レンダリングであった

 既にネット上では、PICA200のパフォーマンスに関する考察が始まっているようだ。DMPのサイトに公開されている、V4×P4の基本デザインを200MHz駆動させたPICA200のパフォーマンスは頂点性能4,000万ポリゴン毎秒、ピクセル性能8億となっており、このパイプライン数やこのパフォーマンス値で過去をあたると、大体、NVIDIAでいうところのGeForce2~GeForce3くらいのパフォーマンスになるだろうか。

 PSPのGPU性能である頂点性能3,300万ポリゴン毎秒、ピクセル性能6億6400万ピクセル毎秒とよく比較され、「思ったほどハイスペックではない」という意見も聞かれるようだが、むしろコスト重視の任天堂にしては、十分過ぎるほどのスペックを持ってきたという印象すらある。

 なにしろ現行のニンテンドーDSは、Zバッファがなく(深度値は数ラインしかバッファリングできず、使い捨て)、フレームバッファすらない、スプライトベースの2Dグラフィックスアーキテクチャに簡易的なジオメトリエンジンを積んだだけのグラフィックスサブシステムだったわけで、それと比較すれば、3DSはちゃんとしたモダンなリアルタイム3Dグラフィックス・レンダリングパイプラインを備えたことは大きな進歩だといえる。

 もっとも、ニンテンドー3DSが上記のリファレンスデザインのままのPICA200を実装するとは決まっていない。もしかするとパイプライン数が変わるかも知れないし、動作クロックも変わるかも知れない。

 ところで、高負荷な印象がある立体視向けのレンダリングだが、実はこれについてはそれほど心配はいらない。3DSは、モダンな3Dグラフィックスパイプラインを採用するため、同一シーンを2つの視点から描くだけでレンダリングすれば、それだけで立体視に対応できてしまうからだ。

 実質的なレンダリング負荷は普通に800×240ドットに対するレンダリング負荷とほぼ等価と見てよく、立体視に対応するからといってグラフィックス処理が重くなることはない。なお、DMPが任天堂に供給したのはPICA200のIPコアだけであり、DMPが自社技術として持つ立体視向けのレンダリング支援技術「3D-SQUARE」は提供されていないようだ。

 PICA200の3DS採用の報道においては、「固定機能シェーダー」が大きく取り沙汰された関係で、その表現力については心配する声もあったが、実際にはPICA200は、プログラマブルシェーダー・アーキテクチャを、組み込み機器/携帯機器向けに最適化したコンフィギュラブルシェーダー・アーキテクチャを採用しているため、表現力に関してはプログラマブルシェーダー・アーキテクチャベースのGPUと比較しても見劣りしない。

 PICA200を「4年前の技術」として「古い」という声もあったが、先端技術のプロシージャル・テクスチャ機能やテッセレーションの仕組みを先取り採用していたこともあり、こうしてみてきても、実際には古くささは感じない。純国産GPUパワーが解放されるまで、もうしばらく。我々3Dゲームグラフィックスファンは、その日が来ることを一日千秋の思いで待つことにしよう。


【「MIKAGE」デモ(3D立体視版)】

(C) 2010 株式会社ディジタルメディアプロフェッショナル

(2010年 7月 16日)

[Reported by トライゼット西川善司]