すべてを同じシェーダー プログラム内に保持するのではなく、マルチパス レンダリングが避けられない必要性になる一般的で基本的な状況を列挙したいと思います。これが私がこれまでに思いついたものです。
- 結果が現在のフラグメント周辺の非ローカル フラグメント情報 (つまりコンテキスト) を必要とする場合 (ボックス フィルターなど)、前のパスでこれが提供されている必要があります。
- 結果が前のパスによって行われたハードウェア補間を必要とする場合。
- 結果が何らかの計算セットのプリキャッシュとして機能する場合、それらを使用するパスで計算セット全体を単純に (再) 処理するよりも大幅にパフォーマンスが向上します。複数のレイター パス シェーダーがそれらの計算を繰り返すのではなく、共有できるコストのかかる方法です。したがって、一度計算して、複数回使用します。
上記の私自身の (素朴な) 推論から、頂点シェーダーとジオメトリ シェーダーは実際には遅延レンダリングの図に入っていないようであり、おそらく通常は最初のパスで行われることに注意してください。私にはこれは理にかなっているように思えますが、これを詳細に肯定または否定することは興味深いでしょう。
PS良い答えを集めるために、この質問は開いたままにしておくつもりです。