次回へ→

Game Developers Conferenceレポート


DirectX 9注目の新テクノロジー「D-MAP」を理解する --その1

D-MAPテクノロジーについて発表を行なったMatroxのJuan Guardado氏

会期:3月19日~3月23日(現地時間)

開催地:San Jose McEnery Convention Centerなど



 サンノゼにて19日から24日まで開催されたGame Developers Conferenceにおいて、MatroxはDirectX 9のDirect3D(通称D3D9)においてサポートされることが決定しているディスプレースメントマッピング(Displacement Mapping)と呼ばれる新テクノロジーについての技術解説を行なった。

 本稿ではこのテクノロジーの基本を理解すると共に、ここから見えてくるD3D9対応ハードウェアの姿までを予想する。本日と明日の2回に分けてレポートする。


■ディスプレースメントマッピングとはなにか? ~頂点テクスチャという発想

 ディスプレースメント・マッピング(Displacement Mapping:以下D-MAP)とは、Displacement=変位、置換をMapping=貼り付ける……という意になる。

 テクスチャマッピングという表現は聞いたことがあるだろう。これはテクスチャと呼ぶ画像をポリゴンで形成された3Dオブジェクトに貼り付けるテクノロジーで、現在の3Dグラフィックスの最も基本となっている表現手段だ。

 D-MAPでは映像を貼り付けるのではなく、直観的には「頂点情報を貼り付ける」というふうに捉えるとイメージしやすいだろう。Matroxのセッションでも「頂点テクスチャマッピング」という表現を提案していた。

 「頂点を貼り付ける」とはどういうことか。

 たとえば球体があったとすると、これに対して別の頂点情報を貼り付けることにより、例えば魚のような形状に変形したり、あるいは目鼻形の付いた人間の頭部に変形することができるのだ。さらに例えるならば、基本となる3DモデルにD-MAPを適用すれば、粘土細工のように変形ができる…… ということになる。

 基本となる3Dモデルに対して凹凸を付ける表現としてはバンプマッピングと呼ばれるテクノロジーを連想する人も多いことだろう。

 バンプマッピングは、ハイトマップと呼ばれる、凹凸を表現した(あるいはその法線ベクトルを格納した)テクスチャを用いてポリゴンに凹凸を貼り付けるというイメージのものだが、D-MAPはその凹凸情報で3Dモデルをジオメトリレベルで加工(転換)してしまうテクノロジーである。

 バンプマッピングの凹凸情報はたかだか8~16bit整数程度のダイナミックレンジしかなかったが、D-MAPでは最大32bit浮動小数が利用できるため、かなり複雑な形状が表現できることになる。

このような球体が…… D-MAPでこう変形される。ただし、この例ではセルフシャドウイングまではやっていない事が見て取れる


■D-MAPのメリットとは? ~バンプマッピングではダメな理由

 例えばバンプマッピングで凹凸情報を、32bit浮動小数で表現できたとしたらどうだろう? そのオブジェクトに対して非常に豊かな凹凸表現ができるので、その3Dモデルを変形させたのと同等のビジュアルを作り出せるのではないだろうか。

 実はこれはうまくいかない。

 一般的なバンプマッピングではレンダリング時にピクセル単位でライティングを行なったとしても、そのピクセルにおけるシェーディング(陰影処理)しか行なわれない。その凹凸が周囲に及ぼす陰影が再現できないため、実際には正しい映像にはなっていないのだ。

 これを概念的に表したのが図1aだ。一般的なバンプマッピングでは凸部分の陰影は凸部分にしか反映されない。本来ならば、凸部分の影はその麓周辺にまで及ぶはずなのだが、これが処理できないのだ。そう、いわゆるセルフシャドウが反映されないのだ。

 肌や岩壁のザラザラ感などの微妙な凹凸感ならば、そこまで厳密な陰影処理を行なわなくてもそれっぽく見える。しかし、その凹凸のダイナミックレンジが、非常に大きい場合には、図1aのようにこのウソが露呈してしまうのだ。D-MAPではジオメトリレベルで凹凸ができるので、セルフシャドウも考慮される(しようと思えば…… だが)。

 図1bは凹凸の大きい内積バンプマッピングだが、本当に凹凸があるならば球体のエッジにも凸凹が現れるはず。バンプマッピングはイメージベースのテクノロジーなのでこのような弱点があるのだ。

【図1a】バンプマップとD-MAPは似て非なるもの 【図1b】プログラマブル頂点&ピクセルシェーダーを使った内積バンプマッピングの映像


■D-MAPで頂点節約~同一基本形状モデルから全く外観の異なるキャラクターを形成する

 フォトリアリスティック表現のグラフィックスでは3Dモデルの多頂点化が著しい。この流れは表示解像度の高解像度化と共に当分続くと見られる。

 こうしたキャラクタモデルの頂点情報はメモリ上に置かれて管理されるわけだが、頂点数の多い複雑な形状を持ったキャラクタモデルが多くなれば、その分メモリ消費量も多くなる。D-MAPはこうした問題を解決するソリューションにもなりうるという。ある基本形状を持った3Dモデルさえあれば、それ以上の細かい形状表現はD-MAPで処理してやればいいというのだ。

 画面aは100ポリゴン前後の非常にシンプルな形状の人体モデルだ。

 画面bは同じこの100ポリゴンのシンプル人体モデルにD-MAPを適用した例だ。同一形状のシンプル人体モデルがD-MAPによってまったく別の形状を持つキャラクターに変身させてしまった……というわけだ。

 画面cはこれにテクスチャを貼り付けた完成形だ。同一基本モデルから作り出したとは思えないほど、異なるルックスのキャラクターになっているのに驚かされる。

【画面a】これが基本モデル 【画面b】これにD-MAPを適用したところ。同一基本モデルから変形したとは思えないほどダイナミックな形状変化が達成できている 【画面c】テクスチャとバンプマッピングを行なって完成形。これがD-MAPの表現力

 漠然としたたとえになるが、現在の3Dゲームの人体キャラは1,000ポリゴンくらいはある。この例のように100ポリゴン程度の人体モデルで1,000ポリゴン相当のキャラクターを表現できたと考えたとすれば、これはつまり頂点数を1/10に圧縮出来たことになる。

 そのゲームにおける登場キャラクターを全てこのシンプルな形状の人体モデルを基本にしてD-MAP適用で表現したとしたら、ゲーム全体ではかなりの頂点データ量の節約になる。頂点データを節約できればCPU-AGP間の頂点転送数も減ることになるわけだから、ひいてはCPU-AGP間のバス節約にもなるわけだ。

 しかし、D-MAPにはそれなりの制約もある。

 まず、D-MAPをもってしても、サイコロのような立方体を鋭角面だらけの宇宙船に変形させることはできないということだ。ある程度の基本形状がなければダメだし、D-MAPのつなぎ目が美しくならない。このことについては後述する。

 また、人体モデルのような、多関節キャラクターの場合は、動きの自由度をボーンにて設定、制御しなければならない。その際、あまりにも外皮側のモデル形状がシンプルすぎては、そのキャラクターを動作させたときに動きが破綻する可能性がある。このあたりはカット&トライを繰り返したり、今後登場してくるだろうと思われるD-MAPユーティリティなどを利用して検討しなければならない部分だろう。

 基本形状モデルがいくらシンプルでも、結局最終的にはD-MAPによって頂点数は増加するわけで、その意味では、GPUコア側の処理頂点数が減るわけではない。

 また、取り扱う基本モデルの形状がシンプルで頂点点総数が少なくて済み、CPU-AGP間のバス節約になるといっても、GPUのローカルバス側はD-MAP処理系によって増やされた頂点転送で、その分忙しくなる。表で楽になった分、裏は忙しくなる……ということなのだ。


■D-MAPはN-PATCHとは似て非なるもの

 「D-MAPは指定されたジオメトリデータに従って3Dオブジェクトを変形させるもの」とひとくちに表現できても、その実現様式はなかなかに複雑だ。

 「3Dオブジェクトを変形させる」のに、処理系として必要になってくるのが、「適応的かつ動的な頂点の自動生成」だ。

 バンプマッピングではシェーディングの際に凹凸情報に準じたライティング計算をやっていくだけだったわけだが、D-MAPでは実際に凹凸を形成する。つまり凹凸を形成するポリゴンが生成されることになるわけで、これはすなわち頂点が生成されることにほかならない。

 「頂点の自動生成」というと、ATI RADEON 8500系GPUの特殊機能である「TRUFORM」機能を連想する人も多いだろう。

【図2】

 TRUFORMはN-PATCHと呼ばれる平面分割(とどのつまりは頂点生成)の仕組みをハードウェアアクセラレートする機能だ。Nは法線ベクトル(Normal)を意味するので、N-PATCHとは「法線ベクトル(N)をつぎはぎ(PATCH)する」というような意味になる。

 図2はTRUFORM(N-PATCH)の基本アルゴリズムを図解したものだ。N-PATCHでは三角形の3つの頂点の法線ベクトルの向きに着目し、3つの頂点の間に、法線ベクトルの変化が自然になるような新しい頂点を定めていく。このようにしてポリゴンを分割していき、結果として滑らかな曲面を自動形成していくのがN-PATCHだ。N-PATCHを適用すれば、ゴツゴツ、カクカクした、ポリゴン数の少ない形状の3Dモデルであっても、最終的には生物的で柔らかな面を持ったオブジェクトを表示できる……というわけだ。

 D-MAPにおける頂点生成も、算術的に頂点を生成するという意味ではN-PATCHの概念に似ているが、D-MAPでは用意した凹凸情報を元にして頂点を3Dオブジェクト側に生成していくところが違う。(次回へ続く)。


【お詫びと訂正】
※前回記事「DirectX 9対応のビデオカード第一弾はMATROXから?」の初出時に、DirectX 9のリリース時期が2003年としておりましたが、Micorosft Third-Party Windows Gaming & Entertainment DirectorのTED HASE氏に再度確認したところ「2002年夏頃βリリースを行ない、2002年秋頃に正規版を提供予定」という返答が得られたので、ここに訂正いたします。

□関連記事
【3月22日】【GDC】DirectX 9対応のビデオカード第一弾はMATROXから?
http://pc.watch.impress.co.jp/docs/2002/0322/dx9.htm

(2002年3月28日)

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


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp

Copyright (c) 2002 impress corporation All rights reserved.