3

すべてを同じシェーダー プログラム内に保持するのではなく、マルチパス レンダリングが避けられない必要性になる一般的で基本的な状況を列挙したいと思います。これが私がこれまでに思いついたものです。

  • 結果が現在のフラグメント周辺の非ローカル フラグメント情報 (つまりコンテキスト) を必要とする場合 (ボックス フィルターなど)、前のパスでこれが提供されている必要があります。
  • 結果が前のパスによって行われたハードウェア補間を必要とする場合。
  • 結果が何らかの計算セットのプリキャッシュとして機能する場合、それらを使用するパスで計算セット全体を単純に (再) 処理するよりも大幅にパフォーマンスが向上します。複数のレイター パス シェーダーがそれらの計算を繰り返すのではなく、共有できるコストのかかる方法です。したがって、一度計算して、複数回使用します。

上記の私自身の (素朴な) 推論から、頂点シェーダーとジオメトリ シェーダーは実際には遅延レンダリングの図に入っていないようであり、おそらく通常は最初のパスで行われることに注意してください。私にはこれは理にかなっているように思えますが、これを詳細に肯定または否定することは興味深いでしょう。

PS良い答えを集めるために、この質問は開いたままにしておくつもりです。

4

2 に答える 2

1

いい話題。私は初心者なので、フォワードレンダリングを使用するときに取得するピクセル/フラグメントシェーダーでの不要な計算を避けるように言います。フォワード レンダリングでは、ピクセルの色が影響を受けない場合でも、シーン内のすべてのライトに対してパスを実行する必要があります。しかし、これはフォワード レンダリングと遅延レンダリングの比較にすぎません。

すべてを同じシェーダー プログラムに保持するのとは対照的に、私が考えることができる最も簡単なことは、シーンで N 個のライトを使用するように制限されていないという事実です。それらを均一な配列にします。次に、フォワード レンダリングを使用することもできますが、シーンに多数のライトがある場合、フォワード レンダリングではピクセル/フラグメント シェーダーが高すぎます。私が本当に知っているのはそれだけなので、他の理論も聞きたいです。

于 2015-01-31T13:12:38.113 に答える