2003年9月4日、明治大学リバティタワーで開催されたCEDEC2003において、マイクロソフトは最新のDirectX関連情報を開示する「meltdown」を開催した。2001年まではmeltdownは同社が単独開催していたが、昨年と今年はCEDEC内の全日セッションという形で行われており、このスタイルが関係者には定着したという感がある。
○DirectX SDK Updateが近々リリースされる
一般ユーザーが最も気にしていると思われるDirectXのバージョンアップだが、結論から言えばメジャーバージョンアップという意味においては、今年は「なし」。
当初、言われていた「DirectX 9.1」と呼ばれていたものも今回のmeltdownにおいては告知されず、実質的にDirectX 9.0のリビジョンアップという形でテクノロジの進化に対応していく。現在、DirectXのβメンバーの間に配布が始まったDirectX 9 SDK updateは、来月以降、一般ユーザーにもその配布が始まるが、OSコンポーネントレベル でのアップデートはない。
このSDKアップデートは
*HLSL(High Level Shading Language)の最適化エンジンの強化
*プログラマブルシェーダ2.0+対応のHLSLバックエンド
*HLSLマニュアルドキュメント更新
*球面調和関数のサポート
*アニメーション圧縮
*HDR(High Dynamic Range)画像の入出力サポート
*開発スイート「VisualStudio」用のDirectX拡張
といった感じになる。HLSLが開発者にやっと認知されてきたということで、HLSL関連の強化が目立つ。
球面調和関数
事前放射輝度伝搬(PRT : Pre-computed Radiance Transfer)はリアルタイム3Dグラフィックス界でホットな話題だが、3Dモデルが変移しない(曲がったりしない)という大前提が必要なので、すぐに3Dゲームに活用される可能性は低い。
あるオブジェクトにおいて光がどのように伝搬されるのかを事前計算してしまい、実際のレンダリング時には非常に簡潔なシェーダーで自己遮蔽や相互反射の結果をシミュレーションできる放射輝度伝搬(Radiance Transfer)というテクノロジがあるのだが、球面調和関数とはその実現に用いられるものだ。
○DirectX 10は先送り。DirectX 9時代は2004年も続く
2003年後半以降しばらくは、DirectX 10という形ではなく、DircetX 9のマイナーバージョンアップという形で提供されていく。
その新版DirectX 9のDirect3Dにおいて、1つトピックといえるのは16ビット浮動小数点実数(FP16)サーフェイスフォーマットに関しての制約が大幅に改善されるという点だ。
まず、FP16がレンダーターゲットとして使えるようになる。つまり直接フレームバッファに対し、FP16でレンダリングができるようになるのだ。
さらに、これまでFP16ではフィルタリングやブレンディングがサポートされていなかったが、「フィルタ→バイリニア、トライリニアがサポート」「ブレンディング→αチャネルを考慮したブレンディングをサポート」といった改善が見られるようになる。なお、フィルタリングにおいて、異方性フィルタリングはサポートされない。また、FP32については、以前同様の制約が残るままになる。
リアルタイム3Dグラフィックスにおいて実効パフォーマンスとそのダイナミックレンジのバランスが取れたフォーマットであるFP16を、新DirectX 9において、技術者がこれまでの8ビット整数(INT8)と同様に使えるような方向性で新DirectX 9は進化していくということだ。
なお、一般ユーザーとして気がかりなのは、そうした新DirectX 9対応GPUはいつ頃出てくるかということについてだ。これについてセッションの講師を務めたChas. Boyd氏は「各GPUベンダに依存することなので明確には言えないが、大体2004年頃ではないか」と述べている。
NVIDIAやATI Technologiesから公式な次期GPUのリリーススケジュールは告知されていないが、NVIDIAは次期GeForce FX(NV40)を、ATIは次期RADEON(R400)の発表を控えており、これらは大方2003年末から2004年にリリースされると見られている。新DirectX 9は、おそらく、これらのGPUをフル活用する意味合いでリリースされることになるだろう。DirectX 8時代の時と同様、DirectX 9は2年越しで続くことになるのだ。
続くレポートではプログラマブルシェーダ3.0関連について触れていきたい。
○プログラマブルシェーダ3.0モデルはすでにDirectX9.0にある
年末に発売される予定の3Dゲーム「FAR CRY」は、DirectX9テクノロジーに積極的に対応したタイトルとして注目されている。ちなみに、この画面はキャラクタ、影も含めて全てリアルタイム描画されている。(C)Ubi Soft
GeForce FXシリーズ、RADEON 9500以上などに代表されるグラフィックスチップ(GPU)は、プログラマブルシェーダ2.0(あるいは2.0+)に対応したプログラマブルシェーダ機能を持っているのは多くの読者が知っていると思う。
DirectX 9にてプログラマブルシェーダ2.0が世に出てから約1年が過ぎたわけだが、OpenGLが1.5になり、来年中には2.0の仕様も確定する見通しであることを考えると、次のプログラマブルシェーダ3.0がどのような形でサポートされるのかが気になってくることだろう。
実はプログラマブルシェーダ3.0モデルはすでに現行のDirectX 9から既にサポートされているため、前回のレポートで報じたようにDirectXのバージョン番号更新も今年及び来年はない。
念のために整理すると、現行のDirectX 9は、プログラマブルシェーダバージョン1.x/2.0/2.x/3.0といったバージョンをサポートしている。2.xはGeForce FXシリーズに代表される"2.0+"への対応を意味する。プログラマブルシェーダ3.0対応のGPUは現存しないが、シェーダモデルの設計自体は2.0と並行して行われていたこともあり、すでにDirectX 9にてサポートはされているのだ。なお、3.0対応GPUハードウェアは、NVIDIAやATIから、早ければ2003年末、遅くとも2004年中に発表される見込みだ。
マイクロソフトとしては、プログラマブルシェーダテクノロジーの一般ユーザ、開発者双方への浸透、そして次期Windows"Longhorn"がDirectX 9をカーネル統合していることを配慮し、DirectXバージョンの不用意な更新は避けたようだ。よくよく考えてみると、DirectX 8時代もDirectX 8.0(2000年)、8.1(2001年)と2年間続いている。同一DirectXバージョンが2年越しで続くことは今回が初めてではない。
現在の3Dゲームグラフィックスが、やっとDirectX 8ベースになってきたタイムラグを考えれば、もう少しDirectX 9時代が続いたとしても誰も困らない。
○プログラマブル頂点シェーダ3.0 - 頂点シェーダでテクスチャが扱えるようになる
頂点シェーダモデルの比較
プログラマブル頂点シェーダ(VS)3.0の仕様は図のようになる。一時レジスタの数が32に増え、プログラム長(命令数)も512命令に拡張されているのが目に付くが、最もトピックになるのが、「頂点シェーダからテクスチャへのアクセスが可能になる」という点だ。仕様表において「テクスチャサンプラ」がVS2.0の0に対し、VS3.0では4となっているのがその証だ。
「頂点シェーダでテクスチャ」というのはイメージしにくいかもしれないが、ボーン制御用の行列の格納領域に使うというのが主な活用目的となりそうだ。現行GPUでは、GPU内の定数メモリに格納する方法をとってきたが、これではボーン数が増えてきたときに対応が難しい。頂点シェーダ3.0では実質的にはこうした制限が取り払われることになる。
頂点シェーダ2.0モデル
頂点シェーダ3.0モデル
また、テクスチャに格納されたデータを読み出し、これで頂点を変位させればディスプレースメントマッピングも可能になる(ポリゴン分割ユニットであるテッセレータがなくても基本的なことは可能)。4段階の従属テクスチャ読み出しが可能なので、かなり複雑なインタラクティビティを持った頂点変位処理もできることになる。
この他、VS3.0では動的条件分岐、動的ループ制御も可能になり、より高度な構造的プログラミングが可能となる。
○プログラマブルピクセルシェーダ3.0
ピクセルシェーダモデルの比較
プログラマブルピクセルシェーダ(PS)3.0の仕様は図のようになる。細かい仕様制限の撤廃が行われているのが分かるが、特に目を惹くのが浮動小数点(FP)定数の数とプログラム長が大幅に拡大されている点だろう。前回のレポートで報じたように新DirectX 9ではFP16サーフェースフォーマットの仕様制限が大幅に撤廃され、通常のαRGB各8ビットの32ビット整数カラーサーフェースとほぼ同等に使えるようになった。
こうした一連のFPへのサポート強化は、これまで以上にテクスチャやレンダーターゲットとしてFPバッファが活用されることを想定しての対応ということだ。最初からなぜこれができなかったかというと、それはGPUの製造プロセスルールに起因している。簡単に言えば、去年主流だった130nmや150nmといったプロセスルールでは、FPサーフェースをまともに扱えるようにするための機能を実装するためにはトランジスタ数が足りなかったということだ。90nm時代に突入するこれからはGPU内に2億トランジスタを実装することも現実味を帯びており、FP関連の機能強化がついに可能になってきたのだ。
ピクセルシェーダモデル2.0
ピクセルシェーダモデル3.0
この他、PS3.0では頂点シェーダと同等の動的分岐、テクスチャ参照命令に重心サンプリング技法がサポートされる。重心サンプリングとは、簡単に言えばテクセル読み出しのさいにオフセット指定ができる仕組みだと考えればよい。
VSとPSとの関係を表したブロック図。面の向きと画面座標の取得する仕組みは、OpenGL Shading Languageにおいてもサポートされている
また、今回のCEDECでは詳しい説明はなかったが、図のようにPS3.0ではトライアングルセットアップエンジンより、その面の向き、画面上のXY座標といったパラメータの取得も可能になる。
○DirectX 10以降のグラフィックス - リアルタイムMPEGエンコードをプログラマブルシェーダで!?
「仕様的に確約できるものではない」(Chas.Boyd氏)としながらも、今回のCEDECではDirectX 9から先、すなわちDirectX 10以降のPC-3Dグラフィクスの進化の方向性についても語られた。
プログラマブルシェーダは今後もバージョンアップが重ねられ、プログラマブルシェーダ4.0では、シェーダー命令セット、すなわちプログラマビリティの自由度の観点では、頂点シェーダ、ピクセルシェーダを同列にすることを計画している。なお、VSとPSは処理するものが異なるので同一シェーダがVSとPSで走るという意味ではない。
また、プログラマブルシェーダ4.0では、PSが、レンダリングしたフレームバッファへのアクセスできる仕組みを導入したいとした。現在のGPU仕様ではレンダリング完了したフレームバッファからの読み出しには対応していない。しかし、これが可能になるとαブレンディング等の処理系にも高度なプログラマビリティが生まれるばかりか、フレームバッファを汎用のメモリ同様に使えることになり、結果、GPUがプログラマブル可能な高性能汎用DSPとして活用できる可能性が切り開かれる。
グラフィックス系ならばラジオシティ(相互反射)処理、グラフィックスに限定しなければ、MPEGのリアルタイムエンコード処理なども可能になってくる。夢のような話だが、実際、筆者も各GPUベンダーの複数の設計担当から「GPUはいずれグラフィックス以外のことをやらせることもできるようになる」という話を聞いているので、マイクロソフト側のDirectXの展望はただの大風呂敷ではない。
そして、現在は、高次曲面についてはNURBS、PATCH(ポリゴン分割)といった2つのアプローチがあるが、どちらがリアルタイム3Dグラフィックスに適しているかという問題については最適解が出てきていない。新世代DirectXではこの議論ついてもいずれは明確な指針を定めていきたいとした。

浙公网安备 33010602011771号