![]() |
![]() |
会期:3月19日~3月23日(現地時間)
開催地:San Jose McEnery Convention Centerなど
米国カリフォルニア州サンノゼにて19日から24日まで開催中のGame Developers Conferenceにおいて、Microsoft DirectX Day(以下MSDXDay)のセッションが設けられた。
![]() |
Microsoftパーソナルビジネスグループ プロダクトマネージャのCharles Boyd氏 |
MSDXDAYは、プレス向けの情報開示というよりは、完全にゲーム開発者のための技術講習的な意味合いが強く、主催はMicrosoft、聴者はゲーム開発者が中心、壇上に上る講師もゲーム開発者であるため、まさに「開発者の、開発者による、開発者のためのカンファレンス」といったコンセプトになっている。
この中でMicrosoftパーソナルビジネスグループ プロダクトマネージャのCharles Boyd氏は、「Next Generation 3D Gaming Technology(次世代3Dゲームテクノロジについて)」というセッションの中でDirectX 9の仕様とそのテクノロジーのデモンストレーションを行なった。
●「ディスプレースメントマッピング」が切り開く新たなフォトリアリティ3Dグラフィックスの領域
DirectX 9のデモンストレーションでまず公開されたのは、ディスプレースメントマッピング(Displacement Mapping)と呼ばれるテクノロジーによる映像だった。
具体的には数百ポリゴン程度のキャラクタ画像が、ディスプレースメントマッピングを適用することで、非常にリアルで複雑な形状を持つものになる……というものであった。
単純なキャラクターがリアルな形状になるというと、ATI RADEON8500シリーズがサポートする自動ポリゴン補間機構「TRUFORM」(N-PATCH)などを連想する人も多いことだろう。これは端的に言えば直線的なキャラクタモデルを生物的な曲線で形成されたようにレンダリングしてくれるものだ。ディスプレースメントマッピングはこれとは全く別のアプローチで、キャラクターモデルが持つジオメトリに対してかなり独立した形状に変換することができる。
Displacement=転置、転換という意味があるが、ディスプレースメントマッピングとはどういったものなのか? かなり乱暴な言い方をすればバンプマッピングの拡張版ということができる。
バンプマッピングは、ハイトマップと呼ばれる、凹凸を表現した(あるいはその法線マップを格納した)テクスチャを用いて平面に凹凸を貼り付けるというイメージのものだが、ディスプレースメントマッピングはその凹凸情報をもとにポリゴンデータを加工(転換)してしまう……というイメージになる。
バンプマッピングの凹凸情報はたかだか8~16bit整数程度のダイナミックレンジしかなかったが、ディスプレースメントマッピングで適用できる凹凸情報は32bit浮動小数点なので、かなり複雑な形状が表現できることになる。
デモンストレーションでは、ポリゴン数が少なくてのっぺりしたキャラクタの胸板に浮き出たあばら骨の形状などを出させたり、頂点数が少なくていびつな頭部をなめらかな輪郭ラインを持った形状に変更する様を見せていた。
![]() |
![]() |
非常にシンプルなメッシュモデル画像がディスプレースメントマッピングを適用することでリアルなキャラクターモデルに変身する。ディスプレースメントマッピングはDirectX 9の目玉機能のうちの1つ。右下にはMATROXのロゴが意味深に輝くが、はたして……。 | |
動画【873KB】 | 動画【618KB】 |
具体的な形状変更の実現方法はGPUごとに異なる模様だが、N-PATCHを実現するときのような適応型テッセレーション(ポリゴン分割)の仕組みが利用されると思われる。
そのキャラクタが遠くにいて小さく見えるときなどはディスプレースメントマッピングの精度を自動的に落として演算量を稼ぐ動的LODなどの仕組みも提供されるようだ。
なお、DirectX 9では複数のディスプレースメントマッピングを同時に1つのオブジェクトに適用することはできないという。2つの形状を合成したりするような仕組みはDirectX 10以降のサポートになるようだ。
ただ、Boyd氏に確認したところ、バンプマッピングとの併用は可能で、実際に先に見せられたビジュアルデモにおいて、キャラクターのスキン表現にはプログラマブルシェーダを活用したバンプマッピングを適用しているとのこと。
●プログラマブルシェーダのバージョンは「2.0」に統一
DirectX 9に対する最も高い関心事の1つであるプログラマブルシェーダのバージョンについてはプログラマブル頂点シェーダ(PVS)、プログラマブルピクセルシェーダ(PPS)ともにバージョン2.0に引き上げられる。DirectX 8.1では前者が1.1、後者が1.4というアンバランスな関係になっていたが、バージョン番号が統一されすっきりした形となる。
なお、DirectXとは本来、「ハードウェアの違いを吸収」しつつ高速に動作するAPIとして生まれたはずが、DirectX 8.1でNVIDIA系とATI系にサポートするフィーチャーが分極化した感じになった。DirectX 9ではこれへの反省点を含めてか、プログラマブルシェーダ2.0サポートを唱うためには「PVS1.1以前、PPS1.4以前の完全互換が不可欠とする」と明言された。PVS2.0については後述するが、PPS2.0はPPS1.4がベースになっていることは明らかなので、PPS1.4にフル対応したATI RADEON系の後継であるGPU“R300”がPPS2.0をインプリメントしてくる可能性は高い。
●PVSに分岐命令とサブルーチンコールがサポートされ、GPUはますますCPUライクへと進化する
PVS2.0では大がかりな命令増設が行なわれており、なんと、分岐、サブルーチン/コール命令がサポートされることとなった。
分岐は比較命令結果を受けての二値条件(TRUE/FALSE)分岐が可能。ただし、下方向へ限定される。サブルーチン命令も同様の仕様だ。サブルーチンがあるということはスタック操作があるわけだが、スタックを操作した規定外ジャンプや再帰構造はサポートされない。
分岐命令にはループ制御レジスタを使ったループ構造の構築も可能で、最大16重ループが可能だが、ループから抜けることはできないという制約がある。
とはいえ、依存性の少ないロジックに限定されていたPVSが、一気に依存性の高い自由度の高い命令セットになった関係で、複雑な頂点フローが実現できるようになった反面、PVSの算術ユニット(ALU)のトランジスタ数は激増すると思われる。GeForce4 Tiのデュアル頂点シェーダは頂点プログラムの依存性が低いからこそ2倍のパフォーマンスが出たわけだが、DirectX 9対応のGPUでは単純にユニットを増やせば処理能力が上がるとは限らなくなるだろう。そういう意味で、ますますGPUはCPUライクになってきているといえる。
PPSに関しては依存読みとりが最大深度4にまで許可されることになった点が強化点として挙げられる。ある演算結果からインデックス値を生成、その値からテクスチャ(といっても画像ではなく数値データが入っているわけだが)を参照し、新たなインデックス値を取り出し……といったような制御が深度4まで許可されるということだ。具体的な使用例までは示されなかったが、これまで以上に柔軟かつ、高度で複雑なシェーディングが可能になると言うことを示唆した。
なお、PPS2.0ではPVS2.0とは異なり、分岐命令はサポートされない。PPSで分岐がサポートされるのはPPS3.0になる見通しだとのこと。
PPS3.0ではさらにインデックスレジスタがサポートされるとのことで、これまた、依存性の高いプログラム実行系になる。PPS3.0をインプリメントするためにはこれまた相当なトランジスタ数が必要になることだろう。
![]() |
![]() |
PVS2.0のレジスタリスト | PPS2.0のレジスタリスト |
●マルチディスプレイ環境における3Dグラフィックスへの本格対応
このほか、細かい点で機能強化がなされるようだ。1つずつ見ていくことにしよう。
![]() |
DirectX 9 APIオブジェクトモデル。図中の一番上のブロックのDMA & Tessに注目。Tessはテッセレーションの略。すなわちDirectX 9対応のGPUはポリゴン分割をハードウェアアクセラレートできる仕組みを持つことを前提としていることが伺える。これはディスプレースメントマッピングの実現にも活用される |
DualHeadに始まりTwinViewにHydraVisionなど、最近はマルチディスプレイ環境が一般化しているが、意外にもセカンダリディスプレイにおいて3Dアクセラレーションが機能するGPUは少ない。現状ではGeForce4TiとRADEON8500くらいだろうか。
この仕組みをDirectX 9では正式にサポートする。具体的には1つのDirect3Dデバイス(GPU)が、複数のディスプレイ出力を駆動する仕組みを提供すると言うことだ。表示はフルスクリーンモードに限定されるとのことだが、ビデオメモリなどが正しくシェアされて運用されるようになる。
そして新たに画面モードにおいて、40bitカラーがサポートされる。これは、RGB各10bitの色表現系だ。これまでRGB各色8bitの1,677万色カラーが最上位色数だったわけだが、40bitカラーでは10億色になる。
高度なシェーディングがプログラマブルシェーダで可能になり、最終的な色情報が算出されるまでに、演算の回数が多くなると、8bitベースの色チャンネルでは誤差が積み重なって最終的に理想的な結果が出ないことがわかってきている。これはそうした問題に対応するために考案されたもののようだ。
ただ、最終的に表示色40bitカラーをサポートするビデオカードがどんどん登場してくるかというとそういうわけでもないようだ。というのも現在のほとんどのディスプレイデバイスが40bitカラーを表示する能力を持たないためだ。 結局は、ライティング演算を10bit色チャンネル系で行ない、最終的な表示色は8bit色チャンネルに丸める…… というのが現実的なソリューションとなるだろう。
なお、DirectX 9ではサーフェースフォーマットとしてRGB各10bit以外に、16bit、16bit浮動小数点、32bit浮動小数点までがサポートされる。なお、RGBの各色が浮動小数点で表現されるピクセルをBoyd氏は“Float Pixels”と表現し、特に16bit FloatPixelsはダイナミックレンジの広さとデータ量の手頃さから、これからの3Dグラフィックス系では使用頻度が高くなると見込んでいるそうだ。
●DirectX 9対応ビデオカード第一弾はMATROXから? G800がついにくるのか?
DirectX 9の機能も気になるが、それと同じくらいに気になるのが、「DirectX 9への初対応GPUが何になるのか」ということだろう。
これについては、NVIDIAもATIも「DirectX 9の仕様がフィックスすれば対応せざるを得ない」というような言い方しかしてくれないため、公式には未定としか言えない状況になっている。
しかし、今回のセッションでは意味深な一幕があった。
通して講演を行なったのはMicrosoftのBoyd氏だったのだが、途中のディスプレースメントマッピングのデモンストレーションでは講演者がMATROXの技術者に交代したのである。
【動画】992KB | |
![]() |
![]() |
MATROXが公開した独自のディスプレースメントマッピングのテクノロジーデモ | ディスプレースメントマッピングを地形表現に適用した例。直感的な表現で言えば、バンプマッピングでは地表のざらざら感が表現できるが、ディスプレースメントマッピングでは地表のゴツゴツ感が表現できるといったところか |
MATROXのGPUといえばMillennium G400後は、3Dグラフィックス機能面においては、G550になっても劇的な進化が見られず、今では「高画質フレームバッファ」としてのみ、存在している感じだ。
そのMATROXが次期GPUで最先端3Dグラフィックステクノロジーをサポートしてくるというのは少々信じがたいが、この成り行きは見る限りでは「そういう未来を示唆している」としかいいようがない。
セッション終了後、このことに関係するいくつかの質問をBoyd氏にぶつけてみた。
西川「あのディスプレースメントマッピングのデモはなにか特別な最新ハードウェアで実現しているものなのか」
Boyd氏「いや、あれはソフトウェアレベルでディスプレースメントマッピングをエミュレーションしている」
西川「MATROXがデモしていたがあれはいったいどういう意味があるのか」
Boyd氏「あれは彼らもディスプレースメントマッピングの実現様式についての研究を進めていると言うことだ」
その研究成果が次期MATROX製GPU G800で活かされるかどうかは不明だが、久々に劇的に3Dエンジンが強化されたMillenniumの登場を期待させる。
なお、DirectX 9のβリリースは2002年夏を予定しており、正式リリースは2002年秋を予定しているとのこと。今年夏開催予定のメルトダウンでは、より具体的な情報が出てくるはずだ。
【お詫びと訂正】
※記事初出時に「DirectX 9の正式リリースは2003年秋」としておりましたが、「2002年秋」の誤りでした。お詫びして訂正いたします。
□GDCのホームページ
http://www.gdconf.com/
□関連記事
【3月15日】Microsoft DirectX Day開催(GAME)
次世代ゲームグラフィックスの姿とは?
http://www.watch.impress.co.jp/game/docs/20020321/gdc02.htm
(2002年3月22日)
[Reported by トライゼット西川善司]