1 / 65

DirectX Graphics 9 Overview

DirectX Graphics 9 Overview. Dave Aronson Program Manger DirectX Graphics Microsoft Corporation. 概要. 高次サーフェスの更新 ディスプレースメント マッピング 頂点シェーダ 2.0 ピクセル シェーダ 2.0 インフラストラクチャ 将来的な計画. API の更新. DXG9 は新しい .dll DX8 インターフェイスは以前の dll に渡された API トークン名が *8 から *9 に変更された

aric
Download Presentation

DirectX Graphics 9 Overview

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DirectX Graphics 9 Overview Dave AronsonProgram Manger DirectX Graphics Microsoft Corporation

  2. 概要 高次サーフェスの更新 ディスプレースメント マッピング 頂点シェーダ 2.0 ピクセル シェーダ 2.0 インフラストラクチャ 将来的な計画

  3. API の更新 • DXG9 は新しい .dll • DX8 インターフェイスは以前の dll に渡された • API トークン名が *8 から *9 に変更された • すべてのオブジェクト ハンドルがインターフェイスに変換されて Released() が可能 • TSS が分割され、サンプラとテクスチャの座標/パラメータ反復子を処理する • シェーダ使用時に引き続き適用可能なレンダリング ステートを明示する

  4. シザー面 • ピクセルをクリップするために設定できるデバイスあたり 1 つの矩形 • すべてのハードウェアでサポートされる • 生産性向上アプリケーションで有用 • API 能力および有効フラグ • Devcaps->Scissor • D3DRS_SCISSORENABLE

  5. 四角形 • 高次プリミティブとして返すことが可能 • 共有頂点パッチ スキーム、および/または • Catmull-Clark サブディビジョン サーフェス • 実装では平面のケースに対して 2 つの三重を使用できる • GL スタイルの色呼び出しを使用 : • 四角形の最後の頂点が平面シェード カラーを設定 • DXG9 では高優先事項ではない

  6. フォグ • 引き続きサポートされる外部シェーダ • レンダリング ステートによって制御される FF パイプラインにおいて • 古いアプリケーションは依然としてこの動作に依存 • 多くの比較的新しいアプリケーションでは、代わりにシェーダ コードを使用して実装する • DX10 ではシェーダに移行する可能性がある

  7. 重要性が下がった機能 • W バッファリング • 高精度ピクセル操作では重要性が少ない • 単に z 深度を使用するよりも低速な場合がある • カラー キー • テクスチャからカットされる可能性が高い • ビデオ パスでのキー処理をサポートする可能性がある

  8. HO プリミティブの概要 • フロート型テセレーション レベルのサポート拡張 • LOD のスムーズなバリエーションが可能 • レーショナル サーフェスのサポート • 適応テセレーション • ディスプレースメント マッピング • 2 つの方法

  9. レーショナル サーフェス • サーフェス モデルの品質を改善 • コンテンツに必要なプリミティブの数を削減 • ほとんどの最新ハードウェアで有効 • API サポート • D3DRS_RATIONALSURFACE • Devcaps->RationalSurface • N パッチおよび RT パッチに影響

  10. 適応テセレーション • スクリーン空間エッジ ベースの基準 • 共有エッジのクラックを回避 • RT パッチおよび N パッチの両方でサポートされる • API が指定する内容 : • スクリーン空間における望ましいエッジ長 • 結果のセグメント カウントの最小/最大制限

  11. ディスプレースメント マッピング • テセレートした頂点に対する摂動として実装される • ピクセル単位ではまだ実行できない • ディスプレースメントは頂点シェーダの特殊レジスタ • 頂点シェーダ宣言によって定義される • FF パイプライン内にある場合 • "法線によってスケーリングされ、位置に追加される"

  12. D マッピングの方法 • 2 種類の能力がサポートされている : • 1. 事前計算ディスプレースメント マッピング • オブジェクトに適す • 2. サンプリング ディスプレースメント マッピング • 地形に適す

  13. 1. 事前計算 D マッピング • すべてのプリミティブが同じレベルにテセレートされると想定 • ディスプレースメントはテッセレータによって生成される位置で事前に計算される • 順序指定はハードウェア固有 • ディスプレースメントは追加の "非同期"頂点ストリームとして提供される • ディスプレースメントは頂点シェーダで読み取り専用レジスタとして使用可能

  14. 事前計算 D マップの API • ディスプレースメント値を生成する API ルーチンが用意されている • 構文に関する提案事項 : • 結果ベクトルは頂点シェーダの入力ストリーム コンポーネントとして設定する • または、頂点シェーダの "テクスチャ"として設定することも可能

  15. 事前計算 D マップの問題 • メリット • 事前計算により実行時間が高速に • キャラクタおよびコンパクト オブジェクトに有用 • 制限 • 適応テセレーションでは機能しない • => 地形ほどは適さないかもしれない • ディスプレースメント マップをアニメーションできない • スクロールするにも再生成が必要 • プロシージャルは同様に D マップに変換

  16. 2. サンプリング D マッピング • レンダリング時に D マップをフィルタリング/サンプリングする • 入力サーフェスは頂点アクセスのために特殊テクスチャとして指定される • エバリュエータはトリリニアを使用してサンプリングする • 特殊レジスタ内のスカラー結果を頂点シェーダに対して利用可能にする • 依存読み取りに対するサポートはなし • つまり、サンプリング前に u/v 値のシェーダ変更はない

  17. サンプリング D マップの問題 • メリット • 適応テセレーションで使用できる • したがって地形に対して比較的高速 • オブジェクトの自動 LOD を提供 • 制限 • つなぎ目にまたがるディスプレースメント マップについてはクラックを避けるために注意が必要 • 実装では操作の順序を保証しなければならない

  18. D マップの使用方法 - シナリオ A • ディスプレースメントが存在するという前提で法線マップをエンコードする • ベース メッシュ法線のみからライティング基準を計算する • すべてのライティングをピクセル単位で行う • D マップは遮蔽効果のみを提供する • 遠いフィールドでは簡単に省略できる • D マップと N マップのデータ同期が必要 - 個別にタイル化できない

  19. D マップの使用方法 - シナリオ B • テセレーション後のポリゴン単位でピクセル ライティング基準を計算する • ピクセル単位または頂点単位のライティングと共に使用する • ディスプレースメント マップに法線ディスプレースメントも含まれている必要がある

  20. DMAP データ形式 • 32 ビット浮動小数点ピクセル形式が理想的 • ほかの形式もサポートされる • 16 ビット フロート • 16 ビットおよび 8 ビット符号付き整数 • 2 種類のチャネル カウントがサポートされる • 1 チャネル形式、ディスプレースメント専用 • 4 チャネル形式、法線 + ディスプレースメント用

  21. 頂点シェーダの更新 • DirectX8 からは最小限の変更 • 命令および定数の数が倍になる • 双方とも 256 に設定される • 新しい数学操作はなし • フロー制御のサポートを追加

  22. Vs.2.0 モデル • 4D アドレス レジスタ a0 w-o 1 • 16 頂点入力 v# r-o 1 • 16 テンポラリ レジスタ r# r/w 3 • 256 定数 c# r-o 1* • 256 命令 • * 1 つの命令で同じ定数を 2 回使用するのは OK

  23. 頂点シェーダのフロー制御 • DX9 のシェーダはフロー制御を定数のみに基づいてサポートする • 現在の問題を解決するように設計された • 環境マッピングなどの有効化/無効化 • "変化するライト数"の問題 • その他の点では、シェーダは回帰と固定機能 DX7 スタイルの能力との比較

  24. 命令カウントとスロット数 • フロー制御とはスロット != 命令数を意味する • 命令ストアは 256 だが、保存されているよりも多くの命令を実行可能 • 実際の命令数上限はもっと高い

  25. 頂点シェーダのジャンプ • 構文 : jump condition, label • 説明 : • conditionは定数レジスタで評価される • labelはこの命令の命令ダウンストリーム

  26. 頂点シェーダのループ • 構文 : loop condition, label • 説明 : • conditionは定数レジスタで評価される • labelはこの命令の命令ダウンストリーム • 自動インクリメント カウンタによる定数配列バンクのインデックス付け

  27. 頂点シェーダのサブルーチン • 構文 : jsr condition, label • 説明 : • conditionは定数レジスタで評価される • labelは命令 • Ret ステートメントはルーチンの終わりを表す • 1 つの命令スロットを使用する

  28. 頂点フローの規則 • ループの内側にジャンプが出現してもよい • ループの内側でサブルーチンを呼び出すことができる • サブルーチンにジャンプとループが含まれていてもかまわない • ジャンプはループに入ることも、ループから出ることもできない • サブルーチンはネストできない

  29. 頂点シェーダの宣言 • 構文が更新されて、宣言と実行が切り離される • シェーダ本体を再コンパイルすることなく、宣言で VB 入力の再定義が可能 • 例 :宣言のハンドルを独立させる • さらに多くの正射影機能セットもサポートする予定

  30. 頂点入力形式 • 正射影のタイプ : • 1D、2D、3D、4D float • 2D、4D short/word • 11-11-10 法線用 • BYTE4 0xWWZZYYXX • D3DCOLOR 0xWWXXYYZZ • 未指定の要素に以下を埋め込む • x,y,z,w = {0,0,0,1}

  31. 正射影データ マッピング • 以上すべてをサポート : • 符号付き、および符号なし • 2 の補数、2 の補数でない • 正規化、非正規化 • 正規化された符号付き値は [-1.0 to 1.0]

  32. ピクセル シェーディングの概要 • 2 レベルのシェーダ プログラミング • 高水準言語 • アセンブリ言語 • 両方とも D3DX に実装される • DX8.1 と同様

  33. アセンブリ言語 ps.2.0 • より "直接的な"制御が可能 • ハードウェアの詳細を公開 • レジスタ カウント • 命令カウント • .cpp マクロ能力をサポート予定 • 高水準言語への、つまりファイルへの埋め込みが可能

  34. 構文に関する注意 • 現時点の構文は最終的なものではない • 現時点の構文は論理モデルを表すことを目的としている • 構文に関するフィードバックを歓迎する

  35. ps.2.0 モデル • 4D ベクトル レジスタ : • 2 色反復子 v# r-o 1 • 8 テクスチャ座標反復子 t# r/w 2 • 16 テクスチャ/サンプラ s# r-o 1 • 16 テンポラリ レジスタ r# r/w 3 • 32 定数レジスタ c# r-o 2 • 任意に混在させることが可能な命令 : • 32 アドレス操作 • 64 数学操作

  36. ps.2.0 サンプル シェーダ ps.2.0 dcl v0.rgba; // ディフューズ色 dcl t0.rg; // oT0 より dcl s0.a, 1D; // スカラー テクスチャ dcl s1.rgb, 2D; dcl s2.rgb, 3D, bx2;// 符号付きへの変換 dcl s3.rgb, cube; texld r0, s1, t0; // 1D テクスチャをサンプル mul r1, r0, v0; // ディフューズを変換 out r1; // 出力

  37. レジスタ宣言 • 反復子とサンプラは使用前に宣言しなければならない • レジスタ v#、t#、s# • テンポラリ レジスタ r# が可能 • コメントを記述する機会を提供する • シェーダに割り当てられた使用可能なリソースを識別する • 使用を少なくすればパフォーマンスに貢献

  38. 宣言命令 dcl regname.components • このシェーダが使用する必要のあるコンポーネントを識別する • 使用するコンポーネントを指定しなければならない • 宣言内ではデフォルトは使えない • 1D、2D、3D とキューブ マップを識別する • その他すべての状態は TSS で

  39. イニシャライザ命令 (def) def c#, { val, val, val, val } • 単なるイニシャライザ • 宣言ではない • 後続の SetShaderConstant() 呼び出しによってオーバーライドが可能

  40. アドレス命令 • texld r#, s#, t/r# • ステージ s# の座標 t# または r# でサンプリングした値を r# にロードする • サンプリング アドレスとして r# を使用すると依存読み取りを指示することになり、t# は非依存

  41. アドレス命令2 • texldp r#, s#, t/r# • ステージ s# の座標 t# または r# でサンプリングした値 (サンプリング直前に w で除算したもの) を r# にロードする • サンプリング アドレスとして r# を使用すると依存読み取りを指示することになり、t# は非依存 • 射影テクスチャに使用する

  42. アドレス命令3 • texkill t/r# • t または r レジスタ入力のいずれかでも機能する • いずれかの入力コンポーネントが <=0 のとき、ピクセルを削除 • DX8 と同様 • >= と = のフラグが必要 • ほとんどの FSAA スキームで解決できない不自然な効果のエイリアシングを導入する

  43. 出力命令 out r# • レジスタに最終的な色を格納することを指示する • レジスタ r# は再利用不可 zout r# • レジスタに最終的な z バッファ値を格納することを指示する • レジスタ r#

  44. 数学命令 • パラレル操作 : • add、sub、mul、mad、frc、cmp • ベクトル操作 : • dp3、dp4 • スカラー操作 : • rcp、rsq、exp2、log2、pow • ロジック操作 : • min、max、sge、slt

  45. 可能性のあるマクロ命令 • DX8 のピクセル シェーダより : • lrp、cnd • DX8 の頂点シェーダより : • m4x4、m3x3、dst、lit • 一般的な要求 : • norm、cross、abs、sincos

  46. 入力引数修飾子 • すべての入力を否定する • 入力に対する任意の入れ換え/複製 • r0.xyzw r2.rgba r0.a • 補数または bias/_bx2 修飾子はない

  47. 符号なしテクスチャに関する注意 • [-1..1] の範囲の符号なしのフォーマットを符号付きデータとしてロードする _bx2 の機能は引き続き使用可能 • DX6/7/8 のコンテンツ用に必要 • サンプラ ステージ宣言で、または TextureStageState 内で指定する

  48. 出力修飾子 • 出力に対する任意マスク • r0.y • _sat は frc と同様に引き続き必要 • 範囲 0..1 に固定 • シフトはサポートされない • _d2、_d4、_x2 など

  49. ほかの問題 • なし

  50. 依存読み取り • 継続して処理できるが、最大深度 4 まで : dcl t0.xy; dcl s0.rg, 2D; ld r0, s0, t0; ld r1, s1, r0; ld r2, s1, r1; ld r3, s1, r2; これは有効

More Related