遅延シェーディングについていくつか質問があります。複数のレンダー ターゲットから色、位置、法線、およびテクスチャを取得するところまで来ました。私の質問は、私が次に何をするかに関係しています。テクスチャから正しいデータを取得したことを確認するために、画面にプレーンを配置し、そのプレーンにテクスチャをレンダリングしました。私が理解していないのは、これらのテクスチャを操作して、最終的な出力が照明でシェーディングされるようにする方法です。画面を占める平面または四角形をレンダリングし、すべての計算をその平面に適用する必要がありますか? 私がそうすると、「平面」はレンダリング可能なオブジェクトになるため、複数のライトをこのように機能させるにはどうすればよいか混乱します。そのため、ライトごとに平面を再レンダリングする必要があります。私はこれを間違って考えていますか?
1 に答える
1
ライトでカバーされる領域を表すには、いくつかのジオメトリをレンダリングする必要があります。光の各ピクセルの照明項は、宛先レンダー ターゲットに蓄積されます。これにより、点灯した結果が得られます。
これにはさまざまな方法があります。起動して実行するには、単純で簡単な (そして非常に遅い) 方法は、各ライトのフルスクリーン クワッドをレンダリングすることです。
基本的:
- セットアップ: すべてのオブジェクトを g バッファーにレンダリングし、さまざまなオブジェクト プロパティ (アルベド、スペキュラー、法線、深度など、必要なもの) を保存します。
- 照明: 各照明について:
- ジオメトリをレンダリングして、光が画面上でカバーする領域を表します
- 照明の寄与を計算するために必要なデータの g バッファーをサンプリングします (vpos レジスターを使用して UV を見つけることができます)。
- 照明用語を目的のレンダー ターゲットに蓄積します (単純なケースではバックバッファーが適切に機能します)。
これが機能するようになったら、高速化するさまざまな方法があります (シザー四角形、ライトをしっかりとバインドするメッシュ、「フローティング」領域のシェーディングを回避するためのステンシル テスト、一度に描画される複数のライト、タイリングなどのより高度な技術)。 )。
最近、 Deferred Shading にはさまざまな傾向がありますが、元のテクニックはここで完全にカバーされています。
于 2014-10-20T01:53:22.883 に答える