Game Developers Conference 2009現地レポート
西川善司の3DゲームファンのためのDirectX 11講座(前編)
DirectX 11がDirectX 10対応GPUを延命
2倍メモリ1GB搭載の新Xbox 360の開発キットが発表
GDC2009会期初日の「Advanced Visual Effects with Direct3D for PC」の様子 |
3月23日~27日開催(現地時間)
会場:サンフランシスコ Moscone Center
GDC2009の会期初日と2日目は、いくつかの専門テーマごとのトレンドを整理する1日コースのセッションが開催される。
昨年のGDC2008での3Dグラフィックス関連のメインテーマはDirectX 10.1だったが、今年はDirectX 11に話題がシフトした。
昨年のDirectX 10.1のときには、すでにATIのRADEON HD3000シリーズというハードウェアが存在し、DirectX 10.1そのもののリリース待ち(≒Windows Vista Srvice Pack 1リリース待ち)だったが、今年はDirectX 11対応のハードウェアがATI、NVIDIAのいずれからもリリースされておらず、DirectX 11の話はどことなく雲を掴むような雰囲気があるのだが、それでも、1年前と比べると次世代DirectXとしての姿としてずいぶん具体的な話も出てきた。
本稿では既知の情報も含め、DirectX 11にまつわる確定情報と、新たに公開された最新情報をまとめてみた。
■ DirectX 11はWindows 7前にリリースされる可能性大だがDirectX 11対応GPUは短期に登場する予定なし
まず、DirectX 11は早ければ2009年内、遅くとも2010年初頭に登場すると言われているWindows 7に内蔵されることが確定した。DirectX 11そのものは、関係者の話を総合するとWindows 7の提供前からWindows Vista向けに2009年内の早い時期に提供されるとみられる。DirectX 10がWindows XPにリリースされず、Windows Vista専用で提供されたときと事態は少々異なることになる。
気になるDirectX 11対応GPUのリリース時期だが、2009年になって一層不透明になった。ATI、NVIDIA共に開発していることを明らかにしているが、公開されるDirectX 11関連デモはすべてDirectX 10ベースのハードウェアでエミュレーション的に動作しているものばかりだ。
DirectX 10.1への対応を見送ったNVIDIAがDirectX 11対応GPUハードウェア提供の1番乗りを果たすというのが下馬評だったが、これは少々怪しくなっている。というのも、今年のGDCでのNVIDIA関連セッションのほとんどがGPGPU(General Purpose GPU:GPUで汎用コンピューティングを行なうソリューション)関連のものであり、3Dグラフィックス関連セッションが例年と比べて激減してしまったのだ。
NVIDIAは、2008年夏の広範囲なGPUリコール問題のあと、大規模なオンリーNVIDIAイベント「NVISION08」を初開催。その後、世界不況に突入して全社員の6.5%のリストラを実施するも、その直後にクロスライセンス問題でIntelに訴えられるなど、不運が続いている。2009年のNVIDIAは、昨年までの同社と違い、地に足を付けた事業方針に移ったと見られ、これを受けたATI(AMD)もDirectX 11対応GPUの提供を急がなくなってしまった。短期的にDirectX 11対応GPU提供はなさそうで、今年後半以降となりそうだ。
それを裏付けるように今回のGDCでは、「DirectX 10.xの延命」ともいえるDirectX 11によるDirectX 10対応GPUの本格サポートが発表された。
当初、DirectX 11と同時に提供される予定だったDirectX規格のGPGPUプラットフォームである「DirectX Compute Shader」(和名:DirectX演算シェーダー)が、DirectX 11環境下のDirectX 10対応GPUで利用できるようになると発表されたのだ(演算シェーダーについては後で詳細にレポートする)。
期待されている、「GPUキラー」の異名を取るIntelのCPU/GPUハイブリッドプロセッサ「Larrabee」もDirectX 11に対応すると見られるが、こちらもリリース時期は不透明だ。なお、Larrabeeについては、GDC2009会期中に関連セッションについてレポートする予定なので、続報に期待していただきたい。
■ DirectX 11でプログラマブルシェーダーは5.0に
演算シェーダーはDirectX 10対応GPUをサポート!
DirectX 11基本情報。DirectX 11はDirectX 9、10、11のハードウェアをサポートする |
DirectX 11では、新しいシェーダーステージが3つ追加される |
入力リソースのインデックス参照が可能に |
DirectX 11は、DirectX 9対応GPU、DirectX 10.x対応GPU、DirectX 10対応GPUのすべてに対応する。ただ、使用できるAPIやハードウェアクセラレーションされる機能は、各ベース仕様に依存する。つまり、DirectX 11のフル仕様を実践できるのはDirectX 11対応GPUだが、すべての仕様/機能ではないもののDirectX 9/10.x対応GPUでもDirectX 11は利用できる……つまり下位互換性が保証されるいうことだ。DirectX 10がDirectX 9対応GPUを足切りしたのとはちょっと様相が違うのが面白い。
DirectX 11では、プログラマブルシェーダーはShader Model5.0(SM5.0)へとバージョンアップがなされ、新たに4つのシェーダーステージが追加される。4つのうち、3つがプログラマブルシェーダーで、1つが固定機能シェーダーとなる。新しいプログラマブルシェーダーは「ハル・シェーダー」(Hull Shader)と「ドメイン・シェーダー」(Domain Shader)、「演算シェーダー」(Compute Shader)で、固定機能シェーダーは「テッセレータ」(Tessellator)だ。それぞれの機能についての詳細は後編でレポートする。
これでDirectX 11のグラフィックスパイプラインにおけるシェーダーステージは、頂点シェーダー → ハルシェーダー → テッセレータ → ドメインシェーダー → ジオメトリシェーダー → ピクセルシェーダー (→ 演算シェーダー)という流れとなった。現行ゲーム機のXbox 360とPS3が頂点シェーダーとピクセルシェーダーしかないことを考えると、相当複雑だ。
SM5.0は新シェーダーが新設されただけではなく、プログラマビリティが向上していることもホットトピックとなる。
まず第1に、シェーダープログラムにサブルーチンが利用できるようになり、動的リンク(Dynamic Shader Linkage)に対応する。
これまでは、同じような機能のシェーダーでも、用いる変数セット(たとえば光源の種類や数)が異なる場合などは、別のシェーダーとして用意しなければならなかった。このため、ほとんど機能が同じでもシェーダーの数が闇雲に増えることとなり、シェーダーのマネージメントが難しくなる弊害を生んでいた。DirectX 11では、シェーダーの機能ブロックをモジュール化することができ、それぞれをC言語で言うところの関数ポインタ的に呼び出すことができるようになるため、効率よく多機能シェーダーを構築できるようになる。
また、各種バッファ、テクスチャー、定数バッファ、テクスチャーのサンプラなどのシェーダーへの入力リソースに対しインデックス参照が可能となる。ただし、指定インデックス値は定数に限定される。
64ビット倍精度浮動小数点については、現行のDirectX 10.x対応GPUでもDirectXとは切り離された各社独自のGPGPUモードに限ってはすでにサポート済みだが、DirectX 11では、Direct3Dグラフィックスの仕様として正式サポートが決定した。ただし対応は必須ではなく、「オプション対応」という位置づけだ。よってノートPC向けGPU、メインストリーム以下の統合チップセットGPU、あるいは一部のメーカーのGPUではこれをサポートしてこない可能性がある。
倍精度浮動小数点にオプション対応 | 浮動小数点型変換やビット操作論理演算命令も拡充 |
RADEON X1900系に搭載されていたFetch4機能が一般化してDirectX 11に搭載 |
DirectX 11のピクセルシェーダーと演算シェーダーは、メモリに対してランダムアクセスが可能に! |
浮動小数点関連ではこのほか、32ビット浮動小数点(FP32)と16ビット浮動小数点(FP16)の相互型変換が、ハードウェアレベルでサポートされる。
DirectX 10時に充実化が図られた論理演算命令もさらに拡充される。具体的にはビット並びの逆転変換、第一ビットのオン/オフ判定などだ。
新設されたGather()命令も面白い。これは、1つのテクスチャ命令で同時に4カ所のテクセルを読み出してしまう命令だ。これはずばり言うと、ATI RADEON X1900系でサポートされていた「Fetch4」機能を一般化してDirectX 11の標準仕様として取り込んだものだ。RADEON X1900のFetch4では1要素テクスチャーに対して4テクセル読み出す機能で、NVIDIAのデプスバッファへの特殊参照機能「NVIDIA SHADOW」機能の対抗機能という位置づけだったが、SM5.0のGather()命令では任意の要素数のテクスチャーの4カ所から任意の要素(α/R/G/B)を読み出せるものとなっている。これは具体的には、前述のようにデプスシャドウ系の影生成の高効率実行はもちろんのこと、最近流行となったスクリーン・スペース・アンビエント・オクルージョン(環境遮蔽)のような深度値を用いた、複雑なポストプロセッシングの高効率化実行に役に立つ。
DirectX 11は、後述するDirectX演算シェーダーへの対応にシンクロする形で、GPGPU的なポテンシャルがピクセルシェーダーにも与えられる。これがDirectX 11のピクセルシェーダーに新機能として与えられる「Unordered Access View」(UAV)という新概念だ。Unordered Accessとは、つまりはランダムアクセスのこと。なんと、ピクセルシェーダーからビデオメモリへのランダムアクセスが可能となるのだ。これまでピクセルシェーダーは、あらかじめそのピクセル座標に対応してビデオメモリに書き込み(出力)しかできなかったが、この制約が取り払われるのだ。
UAVは、もともとDirectX演算シェーダーのために拡張された概念なので、当然DirectX演算シェーダーでも利用できる。このUAVにより、値を拡散させるようなスキャッター型のフィルター処理、A-Bufferのような階層型の特殊フレームバッファで描画順序に依存しない半透明描画(OIT:Orde Independent Transparency)などを実装できるようになる。
Atomic命令までがサポートされ、ピクセルシェーダーはデータ並列コンピューターっぽくなってきた! |
このUAV導入によりDirectX 11/SM5.0では、マルチレンダーターゲット(MRT:Multi-Render Target)の数はDirectX 10のときの8個のままだが、ピクセルシェーダーでは8MRTとは別にUAV1個が利用できるようになる。なお、DirectX 11演算シェーダーは8UAVまでが利用できる。
ピクセルシェーダーとDirectX演算シェーダーで、ランダムメモリアクセスができるようになってしまった関係で面倒になるのが、複数スレッドからの同一メモリアドレスアクセスの管理だ。実行タイミングによってメモリの内容が変わってきてしまう可能性もでてくるわけで、これはマルチスレッドプログラムで起こりうるデバック困難な現象を生みかねない。そこでDirectX 11におけるピクセルシェーダーとDirectX演算シェーダーではAtomic Operation(不可分操作)に対応した命令がサポートされている。
こうしてみてくるとDirectX 11は、新しいプログラマブルシェーダーが増加して、さらにGPGPU対応に便乗した機能強化がピクセルシェーダーに対して行なわれたという印象で、複雑度がもの凄いことになっている。この複雑な処理体系(パイプライン構造)はCPUと比較にならない。
IntelのLarrabeeは冒頭でも述べたようにDirectX 11に対応してくると言われてはいるが、テクスチャー参照以外の処理はすべてソフトウェア実装しなければならない。このDirectX 11の複雑なシェーダー構造や命令系統をソフトウェア実装して、どの程度のパフォーマンスが出せるのかは気になるところだ。
■ メモリ搭載量2倍の1GBメモリの新Xbox 360の開発キットが発表!
新版Xbox 360開発キット |
GDC2009開幕2日目のチュートリアル「Microsoft Game Developer Day」では、「New Xbox 360 and DirectX Features」のセッションにて、メモリを1GB搭載したXbox 360の開発キットの新バージョンが発表となった。
あくまで開発者向けの新Xbox 360ということで、一般ユーザー向けに販売される物ではない。
リリースされるのは開発マシンとテストマシンの2種類で、それぞれ本体上部のHDD+インターフェイスユニットが水色、グレーになっているのが外見上の特徴になる。
これまでの開発用Xbox 360は一般ユーザー向けと同じ512MBしかなく、デバッグ用ソフトウェアを盛り込むためには、その分のメモリを空けなければならず、そうすると、それは最終的なリリース版とはメモリ使用構造が異なってしまい、本当の意味での最終仕様のテストが行ないづらいという問題があった。
今回の1GB版Xbox 360開発機の登場により、デバッグソフトウェア関連を追加された512MBの方に格納してデバック、テストができるため開発効率が上がるとされている。
1GB化されたXbox 360開発機では、開発段階ではデバッグ用ソフトウェアだけでなく、増設された512MB以上のメモリ空間にゲームコンテンツを格納してゲームを走らせることにも対応している。
新版Xbox 360開発キットでは、メインメモリが1GBに増量! |
デバッグ用ソフトウェアを増設分に格納してのテスト、チューニングが可能に | メインメモリ512MB超としてXbox 360コンテンツを走らせることも可能。ただしあくまでテスト目的で |
これは、最終仕様でない高解像度のテクスチャーや多ポリゴンモデルなどを、未調整のままゲームコンテンツを走らせるためのものだ。
セッション中、「この512MB超メモリに頼ってタイトルを作り込んでしまうと、最終調整が辛くなってしまうかも(笑)」というジョークも聞かれたほどで、この1GB仕様のXbox 360開発機の登場は、待ち望まれた存在のようだ。
なお基本設計の関係上、Xbox 360 GPUはアドレッシングデザインの関係で最初の512MBメモリ空間にしかアクセスできない。
それでも、コンテンツ側を増設分の後ろに追いやれば実質的にビデオメモリを増やしたことになるので、現行Xbox 360よりもテクスチャー解像度の高いゲームコンテンツを走らせることはできる。PC版で開発し、それをXbox 360に持って行くような開発スタイルのゲームスタジオにとっては嬉しいことだろう。
GPUは、最初の512MB空間しかアクセスできない制約はある | 64Kページを全部コンテンツ用に割り当てて760MB前後。4Kページもすべて割り当てれば、1GBに限りなく近いメモリを確保可能 | セッション中に行なわれた、実際の新版Xbox 360開発機を使ったデモより。4K、64Kページ混合で全確保した場合に912MBのメモリ空間が確保できた |
http://www.gdconf.com/
□Game Developers Conference(日本語)のホームページ
http://japan.gdconf.com/
(2009年3月25日)