SubD11 サンプル

Ee416576.d3d11_sample_SubD11(ja-jp,VS.85).jpg

パス

ソース SDK ルート\Samples\C++\Direct3D11\SubD11
実行可能ファイル SDK ルート\Samples\C++\Direct3D11\Bin\x86 または x64\SubD11.exe

サンプルの概要

SubD11 サンプルでは、ペーパー『Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches』 (Charles Loop および Scott Schaefer 共著)(この Microsoft Research の Web サイトへのリンクから入手できます) に記載されているアルゴリズムを実装します。このサンプルは、DirectX SDK の「SubD10 サンプル」の拡張版ですが、ここでは、Direct3D 11 で新たに追加された 3 つのパイプライン ステージである、ハル シェーダー、テッセレータ、およびドメイン シェーダーを利用しています。

サンプルのパフォーマンスおよびアーキテクチャに関する注意

Catmull-Clark コンテンツのグラフィックス パイプラインでの流れは、次のとおりです。

  1. パイプラインへの入力は、Catmull-Clark コントロール メッシュです。これには、クワッドおよび隣接性情報が含まれています。コントロール メッシュは、特別に作成された SDKMESH コンテンツ ファイル内に格納されています。隣接性情報は、サンプル コンテンツ エクスポーターを使用してオフラインで計算されます。

  2. 頂点シェーダーは、骨組みアニメーションを使用してコントロール メッシュを変形するために使用されます。

  3. ハル シェーダーは、コントロール メッシュと 4×4 ベジエ パッチ間で基底変換を実行するために使用されます。

  4. テッセレータは、パーティション スタイルとテッセレーション係数に基づくドメイン ポイントと三角形を生成します。

  5. ドメイン シェーダーは、パッチの接線パッチ データを計算し、その後すべてのパッチを各ドメイン ポイントの位置と法線値を使用して評価します。ディスプレースメント マッピングも、ドメイン シェーダーで適用されます。接線パッチ データは、ドメイン ポイントのパッチのサーフェス法線を計算するためにのみ使用されます。コンテンツのテクスチャー接線データは、ドメイン シェーダーでは単に補間され、ピクセル シェーダーに渡されて法線マッピングで使用されます。

  6. 最後に、ピクセル シェーダーが法線マップを評価し、明るいピクセルを生成します。

このサンプルでは、新しい Direct3D 11 パイプライン ステージを使用しているため、現時点ではリファレンス ラスタライザーを使用してのみ操作することができます。そのため、各フレームをレンダリングするのに数秒かかります。Direct3D 11 ハードウェアが利用可能になれば、このサンプルを何千倍もの速度で実行できるはずです。

ハル シェーダーのアーキテクチャは現在のところ可読性を優先して設計されており、ハードウェア上での高い効率が期待されるコンパイル済みシェーダーは生成されません。特に、ハル シェーダーの各出力に対して異なるコード パスを選択するのに使用されるスイッチ ステートメントは、効率的ではありません。このサンプルの将来のリリースでは、これらの非効率な構造を解消するために、ハル シェーダーを書き換える予定です (可読性は下がります)。

現在、このサンプルでは、テッセレーションの実行に整数分割を使用しています。将来のリリースでは、分数分割や pow2 分割の機能を導入する予定です。

機能

次の設定は、実行時に変更することができます。

  • バンプの高さを調整して、ディスプレースメント マッピングを実行できます。

  • テッセレーション係数を調整して、テッセレーション レベルを増減できます。

  • ワイヤフレームのオーバーレイを有効にして、テッセレータによって生成された三角形を表示できます。

  • メッシュ アニメーションを有効にして、変形可能な小分割サーフェスを表示できます。