複数のライトによる高速照明


10

複数のライトで高速ライティングを実装するにはどうすればよいですか?

プレイヤーを拘束したくありません。彼は無制限の数を配置でき、場合によっては重なっている(ポイント)ライトをレベルに配置できます。

問題は、ライティングの計算に必要な動的ループを含むシェーダーが非常に遅くなる傾向があることです。

コンパイル時にシェーダーをn回コンパイルすることが可能である場合、nはライトの数であるという考えがありました。コンパイル時に数値nがわかっている場合は、ループを自動的に展開できます。これは、異なる数のライトで同じシェーダーのnバージョンを生成することは可能ですか?

実行時に、レベルのどの部分にどのシェーダーを使用するかを決定できます。


ライトがプレーヤーによって動的に追加される場合、「コンパイル時」シェーダーはどのようにして正解になりますか?
セスバティン2013年

私が書いたように、コンパイラーは1,2,3、.. lightsのシェーダーを生成でき、実行時にレベルのどの部分にどのシェーダーを使用するかを決定できます
codymanix

コンパイル時のシェーダーは、ライトが配置される場所を知る必要があります。ライトの動的性はそれらを台無しにします
ラチェットフリーク

ライトの数のみが動的である必要があります。位置はパラメータとして提供されます。
codymanix 2013年

1
答えがあるようですね。ライトの最大数と可能な位置の範囲がわかっています。
ashes999 2013年

回答:


8

あなたが探しているものは遅延レンダリングと呼ばれていると思います。これは、多くのライトで非​​常によくスケーリングするレンダリング手法であり、動的間接照明に使用できます。つまり、画面上に数千のライトがあります。

これは基本的に、最初にすべてのジオメトリデータ(位置、法線、深度)を中間ピクセルバッファー(Gバッファーと呼ばれます)にレンダリングする手法です。次に、2番目のパスで、ライトシェイプとそのパラメーターをレンダリングします。この2番目のパスのシェーダーは、Gバッファーから情報を取得し、光の計算を適用して、最終的な画像にブレンドします。

ここで実装の詳細を見つけることができます

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