マルチパス効果の良い例は?


9

XNA(および一般的なAFAIKのDirect3D)では、個々の頂点シェーダーとフラグメントシェーダーを作成するのではなく、潜在的に多くの関連するシェーダーを「エフェクト」にバンドルします。エフェクトを使用するときは、「テクニック」を選択(またはそれらすべてを繰り返し)すると、各「テクニック」にいくつかの「パス」があります。各パスをループして、関連する頂点シェーダーとフラグメントシェーダーを選択し、ジオメトリを描画します。

私が興味を持っているのは、複数のパスが必要になることですか?3Dの初期の頃は、テクスチャユニットが1つしかなかったのに2つありましたが、環境マッピングもしたい場合は、それでも十分ではないことがよくありました。しかし、最新のデバイスでは、モバイルクラスでも、8つ以上のテクスチャをサンプリングして、単一のシェーダーで必要なだけライティング計算を実行できます。

ここでより経験豊富な人は、マルチパスレンダリングがまだ必要な実際的な例を提供できますか、それともXNA / Direct3dの部分でオーバーエンジニアリングしているだけですか?

回答:


5

キャプチャした一連のバッファでポストプロセスエフェクトを実行しているときはいつでも、マルチパスエフェクト、つまりトゥーンアウトライン、モーションブラー、SSAO、ブルームを使用するのに妥当な時間です。最初のパスはすべてを適切なバッファーにレンダリングする場所であり、後続の各パスは各ポストプロセスエフェクトを処理するという考えです。

RanieriがXNACCの例について述べたように、それらは複数のパスを使用して膨大な数のライトをレンダリングしています。その例では、ライトごとに1回だけ、同じパスを実行しています。

シェーダーモデル2以前は、シェーダーモデル3または4と同じくらい多くの命令を各シェーダーで処理できないことに注意してください。これは、古いハードウェアをサポートするために、エフェクトを複数のパスに分割するもう1つの理由です。


さまざまなエフェクトを使用するのではなく、EffectPassesをループするXNAエフェクトオブジェクトに複数のパスがある例を挙げられますか?
Jason Goemaat 2010

4

他の回答で指摘されているように、他の回答で提案されているように、マルチパスレンダリング(単一のメッシュを異なるシェーダー/パラメーターで複数回描画)は、主にライティングと特殊効果に使用されます

D3DXエフェクトパスは、この種のものに使用できます。ただし、複数のシェーダー/エフェクトを使用して実装することもできます。

パスの本来の目的は、ローエンド(シェーダー2.0より前)のハードウェアに複雑なシェーダーを実装するのを支援することでしたが、パスごとのテクスチャステージ数とシェーダー命令の制限がかなり制限されていました。

マルチパス照明の例では、切り替え効果の代わりにパスを使用することにより、大幅なパフォーマンスの向上はありますか?


3

誰もが言及した照明に加えて、これのもう1つの主な用途は ぼかしです。水平と垂直は別々のパスで行われます(9x9のぼかしを得るために、81ピクセルではなく、18ピクセルだけを各出力ピクセルにサンプリングする必要があります)。これは、ブルーム/ HDR、被写界深度、グローなどに使用されます


おそらく、しかし、ほとんどのぼかし実装は、水平パスと垂直パスに同じシェーダーを使用し、サンプリングオフセットを(シェーダー定数または頂点ごとのデータとして)渡すだけだと思いますか?
bluescrn

1
@bluescrn-ブルームは通常、4パスエフェクトと見なされます。1つは明るい領域を抽出してダウンスケールし、もう1つは水平方向にぼかし、もう1つは垂直方向にぼかし、もう1つはぼかした画像を元の画像と結合/拡大します。シェーダーパラメーターを使用してこれらを制御できますが、2つのブラーパス以外のすべてを区別するために分岐が必要になります
Robert Fraser


1

Ranieriが言ったように、複数のライトに複数のパスを使用できます。たとえば、単一のマテリアルでは、「アンビエント」パス、ポイントライトごとの追加パス、スポットライトごとの追加パス、そしてデカールパスを拡散で乗算できます。テクスチャー(私は過去にこのような設定を使用しましたが、遅延シェーディングをせずに見たライティングシェーダーを処理する最も柔軟な方法についてです)。

また、ほとんどのファーシェーダーは複数のパスを使用していると思います。


0

シャドウを作成するためのシャドウマップは、マルチパスを使用して実行できます。注:ビデオカードがパスの数と同じ数のテクスチャユニットをサポートしている場合、一部のマルチパスエフェクトは1つのパスで実行できます。したがって、十分なテクスチャユニットがない場合は、複数のパスを使用する必要があります。1つの固定ハードウェアプラットフォーム(ゲームコンソールなど)では、テクスチャユニットの数がわかっているため、マルチテクスチャリングを使用するだけでコーディングできます。しかし、PCの場合、ハードウェア構成の数は無制限です。消費者に最も広い範囲を提供したい場合は、おそらくより複雑な効果のいくつかを複数のパスに分割して、より低いグレードのハードウェア(つまり、GPUに多くのテクスチャユニットを持たない)のユーザーが引き続き使用できるようにする必要があります。効果をご覧ください。簡単に言えば、シャドウマップは、最初に光のパースペクティブからシーンのシャドウマップを作成することによって作成されます。次に、シャドウマップテクスチャがシーンの他のテクスチャとシーンにブレンドされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.