【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

Game Developers Conference 2008 現地レポート

西川善司の3Dゲームファンのための「DirectX 10.1最終仕様」講座
AMD独断専行、NVIDIAはやらないかもしれない10.1

「Advanced Visual Effects with Direct3D」のセッションの様子
2月18日~22日 開催(現地時間)

会場:サンフランシスコ Moscone Convention Center

 今年もサンフランシスコで世界最大級のゲーム開発者会議「Game Developers Conference (GDC)」が開幕した。正式な開幕は北米時間の20日からだが、現地時間18日と19日は、プリイベントとして「チュートリアル」というプログラム名の1日セッションが多数行なわれており、実質的にはすでに開幕したといってもいい。そして「チュートリアル」というと「入門講座」というイメージがあるが、セッションによっては、そのセッションごとのテーマの最新動向をおさらいして総括するという、志の高いものも多い。

 今回、この連載で紹介する「Advanced Visual Effects with Direct3D」もそんなセッションの1つ。毎年、最新のDirect3D (DirectX) 動向と次世代DirectXの話題が取り扱われ注目度が高いのだ。

 「Advanced Visual Effects with Direct3D」では1日かけて、「DirectX 10のパフォーマンス」、「テッセレーション (ポリゴン自動分割)」、「マルチGPUソリューション」、「DirectX 10.1」、「米VALVEのポスト・レンダリングテクニック」、「最新影生成動向」、「次世代DirectX」といった複数のテーマのセッションが開催された。どれも内容の濃い興味深いものであったが、まずは「Direct3D 10.1」の話題を取り上げたいと思う。その他のテーマについては、この連載で後日取り上げていく予定だ。


■ 決定したDirectX 10.1最終仕様~リリースは3月中旬

AMD (ATI) のRichard Huddy氏(Developer Relations Manager, AMD)
DirectX 10.1はWindows Vista SP1にて提供される。つまりは3月中旬からDirectXはDirectX 10.1時代へ
DirectX 10.1はDirectX 10.0の上位互換
 DirectX 10.1についてのセッションは、セッション名もずばり「DirectX 10.1」とし、AMD (ATI) のRichard Huddy氏 (Developer Relations Manager, AMD) が壇上に立った。

 DirectX 10までの流れは昨年のGDC2007の「Microsoft Developer Day」のレポートに詳しいが、ここでも簡単にここまでの動向をおさらいしておこう。

 DirectXはマイクロソフトのWindows環境下のマルチメディアプログラミングインターフェイス (API) で、その中でも特に3Dグラフィックスを取り扱うDirect3Dは進化の度合いが著しく、世間では慣例的に「DirectX=Direct3D」という認識となっている。

 そしてバージョン番号を最後に付けて呼称するのも慣わしとなっており、Windows Vistaではバージョン9と10のDirect3D 9とDirect3D 10が実装されている。Windows Vistaでは、OS側のGUI描画などの処理にDirect3D 9 (正確にはDirect3D 9 Ex) が、そして最上位3DグラフィックスAPIとしてDirect3D 10が実装されている。

 DirectX 10.1はAMDがRADEON HD 3000シリーズ発表と同時にアナウンスしたもので、バージョンが「+0.1」されていることからもわかるようにマイナーバージョンアップ版になる。なお、現在のWindows VistaではDirectX 10.1は未対応であり、DirectX 10.1の正式リリースはWindows VistaのService Pack 1(SP1) の時となる見込みだ。ちなみにマイクロソフトの発表によればリリースは3月中旬となっている。

 SP1適用後はDirectX 10デバイスの初期化を行なうとDirectX 10.1デバイスがあればDirectX 10.1を活用するようになり、DirectX 10.1のDLLはDirect3D 10.0と10.1の双方のハードウェアをサポートするので、DirectX 10.1対応GPU (具体的にはRADEON HD 3000シリーズ) はそのポテンシャルがフルに生かされ、DirectX 10.0対応GPUはこれまで通りに動作する。ただし、Direct3D 10.1の対応機能はDirect3D 10.0ハードウェアでは基本的に利用できない (エミュレーションできない) ので、Direct3D 10.0ハードウェア上からDirect3D 10.1の機能を呼び出そうとするとエラーが発生するという。


■ DirectX 10.1は地味だが凄い

 スペック的な観点から10.0と10.1を比較すれば表のようになる。

DirectX 10.0とDirectX 10.1の最低スペック条件 DirectX 10.1の確定新要素一覧

 Direct3D 10.1ではプログラマブルシェーダのシェーダ仕様 (Shader Model:SM) もDirect3D 10.0のSM4.0からSM4.1と拡張される。新APIも追加され、さらにシェーダー命令セットはいくつかの新命令が追加されてプログラマビリティがさらに向上させるマイナーチェンジが施される。また、シェーダの入出力がDirectX 10.0の128ビット×16個からDirectX 10.1では128ビット32個へと拡張される。これは例えば、汎用シェーダを頂点シェーダとして取り扱った際に、より多くの頂点の入出力に対応できることになり、複雑なシェーダを高いパフォーマンスで実行することへとつながる。

 Huddy氏によれば「SM4.0とSM4.1とで同一シェーダを動かしたときに2.5%のパフォーマンスアップが確認された」とのことだが、「しかし、条件分岐命令をSM4.1命令群で最適化を施すことで20%近いパフォーマンスの向上が見られた」とも付け加えている。

 表中の項目「MSAA Samples」はマルチサンプル・アンチエイリアス (Multi Sampled Anti Aliasing) の最低条件を「4x」と定めるものになる。何が言いたいかというと、整数 (int)、浮動小数点 (FP) のすべての32ビット、64ビットのバッファに対して最低「4x」のMSAAがサポートされなくてはならないという意味になる。

 DirectX 10.1ではMSAA時のサブピクセル読みだし位置の標準化もなされており、さらには新APIによるユーザー定義可能な (プログラマブル) サブピクセル読み出し位置設定 (プログラマブルMSAA) の実装もサポートされた。つまり、DirectX 10.1では「4x」までのMSAAは標準仕様化され、さらに4x MSAAまでのプログラマブルMSAAが必ず実行できることが保証されることになる。

 これはなにが嬉しいのか。地味ながら開発者側にとっても一般ユーザーとにっても嬉しいことがある。

 開発者側にとって嬉しいのは、自分の3Dグラフィックスエンジン側として狙った通りの描画品質を、どのGPUのどのドライバを用いても実現されることが期待できるという点だ。そして一般ユーザー側として嬉しいのは正しい性能評価が行なえるであろうという信頼感だ。

 これまでMSAA方式のアンチエイリアス処理は、GPUごと、あるいはドライバ・バージョンごとにGPUメーカー独自の最適化……悪く言えばずるがしこい手抜き……が行なわれてきた (ことがあった)。今後はゲームや特にベンチマークソフトでは標準化されたMSAAが活用されるか、あるいはプログラマブルMSAAで明示的にMSAA手法が定義されるはずなので、そうした工夫/インチキはやりづらくなる。サンプル数を減らして描画品質を落としてハイパフォーマンスを実現してもそれは「最適化」ではなく「バグ」として指摘されることになる。Huddy氏もこの点についてセッション中に「ライバルとのパフォーマンスが比べやすくなるだろう?」とジョークを飛ばしている。

 また、MSAA関連で言えば、MSAAおよびプログラマブルMSAAがピクセルシェーダから使えるようになったことも大きな改良ポイントだとHuddy氏は強調する (正確に言えばピクセルシェーダからの制限なしの各種バッファへのマルチサンプルアクセスのサポート)。

 MSAAはDirectX 10.0までは、ROP (Rendering Output Pipeline) ユニット、すなわちレンダリング工程の最後で行なわれるのが常識だったし、そうGPUも設計されてきた。すなわち、DirectX 10.0まではピクセルシェーダとMSAA処理は切り離された機能ブロックとして存在してきたのだ。

 だから、半透明アンチエイリアス (Transparency Anti-Aliasing:TAA) も特別処理でGPUに実装しなければならなかった。また、負荷が明らかに高くなるヘビーデューティなピクセルシェーダプログラムを実行する際に有効な、Deferred Renderingでは、Zバッファの更新がないため、Z値をキーにして行なうMSAAの実行が不可能であった。いや、やってできなくはないが実装が面倒で、MRT (Multi-Render Target) でカラーバッファに第2疑似Zバッファを構築する必要があり、追加のビデオメモリ消費と帯域負荷がかかってしまっていた。DirectX 10.1ならば、ピクセルシェーダからZバッファに対してMSAAを活用しつつアクセスができるため、そうした余計な処理を実装せずともMSAAが実装できる。

DirectX 10.1では各種バッファに対してマルチサンプルで読み書きができる Zバッファに対してもアンチエイリアスを効かせられる。ということはデプスシャドウ技法の影生成におけるエイリアシングも低減できる!?

 また、ピクセルシェーダから深度値がMSAA参照できるということは、実ポリゴンの存在やその形状とは無関係に任意のアンチエイリアスが実装できるということでもある。

 Huddy氏はATI RADEON HD 3000シリーズのデモを公開し、このデモに登場するピンポン球が実はテクスチャを貼り付けた四角形ポリゴンからなるただのビルボード (スプライト) であることを宣言した上で、その丸い輪郭がポリゴンエッジでもないのにちゃんとアンチエイリアスがかかっていることをアピールした。本来、MSAAはポリゴンのエッジに対してのみ行なわれるのだが (特別機能のTAAは除く)、このデモでは、ピクセルシェーダがスプライトを構成するピクセル色を決定する際に、そこが絵柄のエッジかどうかを判定してMSAAを実行しているという。

 そう、いわば、DirectX 10.1のこの仕組みは、特別実装されてきたTAAを、一般的なピクセルシェーダプログラムで実現することが可能になったと言うことを意味している。

ATIのRADEON HD 3000シリーズ用デモ。DirectX 10.1必須であるためたとえRADEON HD3000シリーズであってもWindows Vista SP1以降でしか実行できない
DirectX 10.1ではTransparency Anti-Aliasingも実質的にはプログラマブルに実装可能になる


■ キューブマップアレイで疑似大局照明が可能になる?

 この他、Direct3D 10.1ではキューブマップを階層構造 (配列構造) で持つことができるキューブマップアレイの機能が実装される。言い換えれば、1つのシェーダから複数のインデックス化された階層キューブマップにアクセスできるということだ。DirectX 10.0ではキューブマップの切換にはステートの切換が必要であり、描画コールが増えてしまう。

 ではキューブマップを配列で持てることは何がどう嬉しいのか。これについてHuddy氏はRADEON HD 3000シリーズ用のデモを再び見せながら「これは、大局照明 (Global Illumination) の疑似実装に役立つ」と述べる。

 空間中の、複数の任意の異なる位置において、そこから全方位を見たキューブマップをレンダリングし、これを配列化して実装しておく。3Dモデルがこの空間にやってきたときに、その3Dモデルに一番近いキューブマップをもとにイメージベースのライティングを行なったり、あるいはキューブマッピングを行なえば、疑似ではあるが、単一のキューブマップをそのシーン全部で共有してレンダリングするのと比べればだいぶ正確な間接照明が実現できることになる。

 その3Dモデルに一番近いキューブマップを1つだけではなく、複数参照したり、距離に応じて重み付けして処理したりすれば、さらに正確性は上がるし、相互反射のような効果もできるだろう。非常に重いがそのシーンのすべての配列化されたキューブマップを更新すれば動的なシーンの疑似大局照明も実装できなくはない。

キューブマップアレイは疑似大局照明の実装に使える?

 冒頭付近のDirectX 10.0と10.1の比較表やDirectX 10.1の新要素リストに戻ると、この他、DirectX 10.1では、1要素16ビット整数の整数64ビットのブレンディング、1要素32ビット浮動小数点の浮動小数点128ビットバッファのフィルタリングがサポートされる。このあたりの仕様の詳細については昨年のレポートを参考にして欲しい。


■ どうなるのかDirectX 10.1~DirectX“+0.1”のジンクス

 「DirectX 10.1」と題され、Microsoft関係者も登壇したDirectX 10.1リリース直前のDirect3D関連セッションなのにもかかわらず、AMD (ATI) の人間が登壇した。さらに、昨年末、NVIDIAに近い情報筋より聞いた情報によれば「NVIDIAとしては短期的にDirectX 10.1をサポートする予定はない。また、エミュレーションで実装するようなことも考えていない」というコメントが聞こえてきており、今回のDirectX 10.1はかなりAMD (ATI) 主導で生まれたと思われる。

 しかし、DirectX 10.1の新機能ラインナップはどれもこれも機能自体は、かゆいところに手が届くすばらしいものばかりで、非の打ち所がない。ただ、二大GPUメーカーの足並みがそろわなければ実際のアプリケーションで実用化される可能性は低い。

 実は、このように、機能性に文句はないが、NVIDIAと足並みがそろわずに、ブレイクせずに立ち消えたDirectXの「+0.1」バージョンは過去にもあった。そう、「DirectX 8.1」だ。

 初代プログラマブルシェーダアーキテクチャとして登場したSM1.1は機能性に不満が少なくなく、これを解消したのがATIがリーダーシップをとって開発したDirectX 8.1/SM1.4だった。しかし、DirectX 8.1リリース後にもNVIDIAはDirectX 8.0/SM1.1に踏みとどまり、結果としてDirectX 8時代はSM1.1が主流のまま幕を閉じた。

 そういえば、この時、DirectX 8.1/SM1.4に加えて独自のテッセレータユニット「TRUFORM」機能が実装されていた。今回もDirectX 10.1/SM4.1に加えて独自のテッセレータユニットが搭載されている。AMD (ATI) にとっては、これは嫌な偶然だ。

 もうすでに海外などのリーク情報サイトでは情報があがりつつある、近々登場予定のNVIDIAのGPU「G94」が登場して、その後、ユーザーがどういう選択をしていくかで、DirectX 10.1の命運は決まるだろう。

 歴史を振り返れば、SM1.x、SM2.x、SM3.xにしろ、足並みがそろわなかったShader Modelは、これまで下位バージョンの方が生き残っている。今回もそうなるのか……。

 しかし、1つ、AMD (ATI) にとって追い風の情報もある。DirectX 10.1とほぼ同時にリリースされると見られる新3DMark「3DMark Vantage」が、DirectX 10.1のテストモードを持つ可能性があるのだ。

 業界標準のベンチマークソフトである3DMarkの新作が「DirectX 10.1で高速」ということになれば、一般ユーザーの見方も変わってくるはずだし、NVIDIAもDirectX 10.1への対応も無視していられなくなることだろう。

 DirectX 10.1はDirectX“+0.1”の初のジンクス破りとなるのか……。注目していく必要がある。

ついに登場する3DMarkの完全新作。DirectX 10に完全対応しているとのことだが、DirectX 10.1がスコアに優位に働くかについては今のところ不明。DirectX 10.1、RADEON HD 3000シリーズの行く末に影響しそうなだけに要注目!


□Game Developers Conference(英語)のホームページ
http://www.gdconf.com/
□Game Developers Conference(日本語)のホームページ
http://japan.gdconf.com/
□関連情報
3Dゲームファンのためのグラフィックス講座 バックナンバー
http://game.watch.impress.co.jp/docs/backno/rensai/3dg.htm
Game Developers Conference 2007 記事リンク集
http://game.watch.impress.co.jp/docs/20070308/gdclink.htm

(2008年2月19日)

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



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

Copyright (c)2008 Impress Watch Corporation, an Impress Group company. All rights reserved.