3

現在、レンダリングパスからの2、3のテクスチャに相当するピクセルごとのデータ(法線、深度、色)が必要です。

本質的に同じシェーダー(WorldViewPos乗算など)で3つのパスを実行する代わりに、それぞれが異なるタイプのデータをレンダーターゲットのテクスチャに出力します(たとえば、色の場合は1パス、深度の場合は1パス、法線の場合は1パス)。 ); ピクセルシェーダーのレンダリングターゲットとして、Texture3Dオブジェクトまたは理想的にはTexture2D配列を使用したいと思います。そうすれば、これらの3つのレンダリングパスを1つに減らして、すべてのデータを一度に出力できます。

残念ながら、私が見つけた唯一の例は、ジオメトリシェーダーの例です。ピクセルシェーダー内にデータを送信するテクスチャ配列内のテクスチャを指定する方法はありますか?

4

1 に答える 1

3

あなたが探しているのは「複数のレンダリングターゲット」です。

を使用して複数のレンダリングターゲットを設定できますGraphicsDevice.SetRenderTargetsMSDNも参照)。

HLSLピクセルシェーダーの複数のレンダーターゲットに出力するには、最初のターゲット、 2番目のターゲットなどのCOLOR0セマンティックCOLOR1)に出力します。

最後に、 HiDefプロファイルを使用する必要があります。これにより、一度に最大4つのレンダリングターゲットを設定できます。


編集:私はXNAの回答をしたことに気づきましたが、実際にはAPIで質問にタグを付けていませんでした。HLSLは、DirectX、SlimDXなどで同じである必要があります。DirectXでレンダリングターゲットを設定するには、必要だと思います IDirect3DDevice9::SetRenderTargetMSDN)。

于 2011-07-31T15:59:01.607 に答える