10.1」の展望が報告された。10の最終仕様について,まとめてみたいと思う。10.1については,改めてお届けする予定だ。10”として扱っていたため,本稿でもこれに従うことを,あらかじめお断りしておく。Z.Glassenberg(サム・グラッセンバーグ)氏が,次のようにDirectXの現状を報告した。9時代まで,グラフィックスチップの仕様はメーカーによって異なっており,場合によっては上位モデルと下位モデルでは提供される機能が異なる場合すらあった。シェーダモデルはもちろん,細かく見れば演算精度にまでばらつきがある。Technologies(以下ATI)とNVIDIAとでグラフィックスチップの仕様が異なるということだ。7シリーズは対応していない。X1000シリーズは対応していない,といった具合だ。この違いは,3Dゲーム開発者やユーザーに「ATI派か,NVIDIA派か?」という“派閥”の選択を迫ることになり,マーケティングチャンスを少なからず小さくしてしまっていた。採択”も可能だが,この場合,グラフィックスチップが持つ,せっかくの最新機能を活用するチャンスを失い,結果としてユーザーに不利益が生じてしまう。10の仕様の一貫性(Consistency)を保証する。10世代グラフィックスチップを使っても,すべてのフィーチャーを利用できる。10グラフィックスは,家庭用ゲーム機のようなコンセプトになったと考えてもいい」とはGlassenberg氏の弁。10世代では3Dグラフィックスの機能面で「ATIにするかNVIDIAにするか」を悩まなくてよくなるわけだ。「このため,開発者はCapsテストから解放されることになる」(Glassenberg氏)。9世代までは,3Dゲーム用のグラフィックスエンジンの始動前に,ハードウェアの仕様の多様性に対応するため,「そのPCシステムが搭載するグラフィックスチップにどんな機能が備わっているのか」をチェックしなければならなかった。check)テストというが,これはゲームエンジンの互換性の根幹にかかわる部分のテストであり,当該システムでサポートされない機能については代替処理を用意せねばならないなど,非常に苦労する部分なのだ。10の機能が積極的に活用されやすくなる。結果として,ユーザーメリットが生まれやすくなるのだ。10世代だと,すべての機能が搭載された,高価なハイエンドグラフィックスチップしかリリースされないのか?」という疑問を感じた人がいるかもしれない。いや,ちゃんと今までどおり,ハイエンド以下,ミドルレンジ,ローエンドといったバリエーションはなされる。10世代GPUとして提供される機能は画一化されるが,パフォーマンスやクオリティで格差が与えられるのだ。とあるゲームタイトルを動作させたとき,ローエンドクラスのグラフィックスチップだと解像度を800×600ドットまで落とさないと60fps出ないが,ハイエンドなら1600×1200ドットでも60fpsを維持できる,といった具合である。家庭用ゲーム機のように,3Dゲームにおけるグラフィックス設定オプションがなくなったりはしないかと心配する人がいるかもしれないが,それもないと思われる。RTSを例に考えてみると,コアゲーマーはシェーダ関係の機能を全部無効にしてでも,できる限り高解像度でプレイしようとするだろうし,一般ゲーマーなら,ある程度解像度は妥協しても,美しいビジュアルエフェクトを求めるはずだ。グラフィックスチップの機能が画一化しても,性能にスケーラビリティは残されるため,PCゲームをプレイするに当たっての,こうした設定面の自由度は引き続き残るだろう。10のグラフィックスパイプラインは右のようになると発表された。この図の右側にある水色のブロックはグラフィックスメモリを表しており,左側のフローがレンダリングパイプラインの概念になる。9以前とまったく変わらない。10新要素は薄緑で表された部分になる。Assembler)は,頂点バッファやインデックスバッファに収められた(描画に必要な)入力データを,頂点シェーダへ受け渡すときに自由度をもたらすものだ。イメージとしては「新しいビジュアル効果をもたらすもの」というより,むしろ「3Dグラフィックスのプログラム効率を向上させる機能強化」といったところ。Shader)ユニットだ。Shader)ともいわれるシェーダで,簡単に説明すれば「プログラマブルに頂点を増減させることが可能なシェーダ」ということになる。これまで頂点シェーダは,ある入力頂点に対し,プログラムを実行してやり,その値を変移させて出力するものであった。「1データ入力→1データ出力」の処理系であったわけだ。これに対しジオメトリシェーダでは「多データ入力→多データ出力」を可能にする。「1データ→多データ」が可能だし,出力データ数が入力データより少なくなってもいい。機能ブロックとしては,ジオメトリシェーダは頂点シェーダと別ブロック扱いになるが,「頂点シェーダを,より一般化して拡張したもの」と捉えてもいいだろう。3」の採用で有名となったステンシルシャドウボリューム技法の影生成における,光源方向からの頂点の引き伸ばし処理だ。9世代以前でこの技法を実装しようとすると,あらかじめ引き伸ばし用の頂点を3Dモデル側に仕込ませておく必要があった。これは影を生成しない頂点においては冗長データにほかならず,CPUやグラフィックスチップにおいても,オーバーヘッド,あるいはよけいな負荷としてのしかかっていた。10世代では,ジオメトリシェーダを用いて「影領域として引き伸ばされる頂点」に対し,頂点を動的に増設して引き伸ばしてやればよくなり,ムダがなくなるのである。それがジオメトリシェーダだ右:緑色の部分が,光源方向から引き延ばされたシャドウボリューム。ジオメトリシェーダがあれば,このシャドウボリューム生成を効率的に行える先ほどのパイプライン概念図に戻ると,ジオメトリシェーダユニットの右横に「Texture」とあるのに気がつくだろう。ジオメトリシェーダユニットはテクスチャの読み出しも可能なのだ。1ポリゴン以下で表現されるような微細凹凸表現において,その微細凹凸面の法線ベクトルをテクスチャ(=法線マップ)化。9世代では一般化した。ところが,この手法では,凹凸があるように“見えるだけ”で,実際には平面のまま。このため,視点がその微細凹凸に近づいたときなど,特定のケースでは不自然に見えることがあった。この場合,ジオメトリシェーダを用いれば,こうした法線マップ(テクスチャ)を読み出して,これを“タネ”に頂点を生成して「本物の凹凸」を作り出す,ディスプレースメントマッピング処理が可能だ。Detail)処理を行えば,リアルな表現を効率的に行えることになる。左:法線マップテクスチャに基づいて,ピクセル単位の陰影処理を行うことで,微細な凹凸の陰影を再現するバンプマッピング(俗称:法線マッピング)。右:ジオメトリシェーダなら,バンプマッピングから一歩進んで,実際に凹凸を伴ったディスプレースメントマッピングが可能になるジオメトリシェーダを活用すれば,シーンをキューブマップとしてレンダリングする動的なキューブマップ生成をシングルパスで実行可能ジオメトリシェーダは複数頂点を生成できる。これはいってみればポリゴン(プリミティブ)そのものを生成できることに等しい。これを利用して,6方向の視線からレンダリングするように各バッファ(=レンダーターゲット)をアサインすることにより,シングルパスで動的なキューブマップを生成したり,あるいは3Dモデルの周辺に生成したポリゴンにファー(毛皮)層を生成してファーシェーダをブローシージャル(デザイナの手ではなく,プログラムによって生成すること)に実現したり,ボリュームレンダリングを実現したりもできる。これまで,相当な下準備やマルチパス(同じモデルを数回描画すること)を駆使しなければならなかったレンダリング技術が,ジオメトリシェーダを1回通すだけで,シングルパスで行えるようになるのだ。左:キューブマップとは,周囲の情景を6面体構造のテクスチャ化したもので,映り込み表現などに用いれる。10が,コードネーム「WGF」と呼ばれていた時代のレンダリングパイプライン図がこれ。output」と呼ばれる四角が接続されているのに気づくだろう。これはジオメトリシェーダユニットからグラフィックスメモリに書き出す,新たなデータパスを表している。言い換えれば,ジオメトリシェーダの出力をグラフィックスメモリに書き戻して,もう一度頂点シェーダに戻すことが可能になっているのだ。GPU)に有効だとされる。OPeration,ラスタライズオペレーション)ユニットのみであった。ATI流にいえば「レンダーバックエンド」ということになるが,いずれにせよこれでは,シェーダユニットで算出した結果が得られるまでのレイテンシとオーバーヘッドが大きい。この点,パイプラインの上段にあるジオメトリシェーダユニットでデータ出力が可能となれば,この弱点が低減されるというわけだ。最後になるが,長らくその搭載が標準となるかオプションとなるかの境目をさまよっていた「テッセレータ」について報告しておきたい。10世代のグラフィックスチップにおいて,その実装が見送られている。4.0」(以下SM4.0)へとバージョンアップする。いうまでもなく,最もホットなトピックはジオメトリシェーダという概念の導入になるわけだが,それ以外にも拡張部分はある。Architecture)が,SM4.0でついに現実のものとなる点だ。コモンシェーダアーキテクチャでは,頂点とピクセル,ジオメトリという,三つのプログラマブルシェーダの命令セットが共通化される。これによって「シェーダ種別ごとの専用命令」という概念がほぼなくなり,シェーダプログラムの一般化を行いやすくなるというメリットが生まれる。Architecture)と混同されることが多い。現実に,同義とされることもある。最近では,コモンシェーダは「プログラミングモデルとしての命令セット共通化」を指し,一方,統合型シェーダは「各シェーダの,ハードウェア上の実装形式」を指すようになっている。簡単にいえば,ソフト的な概念でシェーダ種別の垣根をなくすのがコモンシェーダ,ハード的な側面でシェーダ種別の垣根をなくすのが統合型シェーダということだ。極端な例を挙げると,非統合型シェーダアーキテクチャでも,コモンシェーダアーキテクチャの実現はありえる。10世代グラフィックスチップの第1弾は,消費電力やトランジスタ規模的な制約から,そうなる可能性が高いというウワサもある。●充実した命令セットが提供されるSM4.0二つめは,SM4.0で,CPUにひけを取らない豊富な命令セットが提供される点だ。整数演算命令や,ビット操作を含む二進論理計算などがサポートされ,グラフィックス以外のこと——エンコード,デコード,データ解析,データ圧縮,展開——を行わせるGPGPU用途にも有益な拡張がなされる点は指摘しておきたい。9世代では最大512命令)のもトピック。9の4枚から8枚へと拡張された。前述した「ジオメトリシェーダを活用したシングルパスのキューブマップ生成」は,6枚のMRTを利用しており,SM4.0世代で初めて可能になるものなのだ。このほか,テクスチャやフレームバッファ関係の機能も拡張がなされている。3Dゲーム開発者から切望されていた整数ベースのHDRレンダリングに最適な「RGBEフォーマット」のバッファのサポートが行われる。RGBEバッファとは,RGBの各値に対して共通指数部として提供される「E」(Exponent:指数)を持てるバッファのこと。RはR=R×2Eで与えられるようになり,0〜255以上の値が表現できるようになる(つまりHDRだ)。値の精度は大部落ちるが,RGBが16ビット浮動小数点(FP16)からなる64bitバッファの半分の帯域消費で済むため,特定局面では有用となるはずだ。これまでATI独自仕様として知られていた,法線マップの圧縮に適する3Dc相当の「2要素ベクトルテクスチャの圧縮メソッド」と,HDRテクスチャの圧縮に応用可能な,3Dc+相当の「1要素ベクトルテクスチャの圧縮メソッド」は,(予定どおり)SM4.0標準仕様として盛り込まれるようである。して見てくると,SM4.0の仕様拡張は,何かまったく新しいビジュアル表現に直接結びつくというより,プログラマビリティの向上に力を入れたものになっていることに気がつく。XP以前では提供されない。この点は注意が必要だ。10のβも実装されている。Vistaが発売される2007年1月に同時発表&リリースといわれている。10世代グラフィックスチップ不在の時間が続き,登場するのは結局2007年中旬となる」とささやかれていた。Vistaと同時リリース」と言っており,何かしらの目処は立ったと見るべきだろう。XP環境下で利用すること自体は可能となる。10,SM4.0のフィーチャーは利用できない。Vistaで利用しても,その仕様どおりの動作をするにすぎない。Vistaへ乗り換えるのが正解かもしれない。Vista用,両方のプログラムコードを1枚のROMディスクに入れておくよう推奨している。Microsoftいわく「XPとVistaの両対応は大した手間ではない」「PCゲームユーザーのXP→Vistaの移行にはそう時間がかからないと思う」とのことで,なかなか楽観的な予測だが,このあたりは実際にそのときを迎えてみないと分からない。Vistaとほぼ同時に登場する予定なので,Microsoftが楽観的な気持ちも,分からなくはない。本サイト「4Gamer.net」の内容は,すべて無断転載を禁止します。商用利用を除き,リンクについてはその限りではありません。転載,商用利用,二次利用の希望,ご意見などは「こちら」まで。当サイトは,IE6.0以上および解像度1024×768ドット以上でご覧になることをお勧めいたします。