7

私が理解しているように、シャドウ マッピングは、ライトの視点からシーンをレンダリングして深度マップを作成することによって行われます。次に、カメラの POV からシーンを再レンダリングし、シーン内の各ポイント (GLSL のフラグメント) について、そこから光源までの距離を計算します。シャドウ マップにあるものと一致する場合は光の中にあり、そうでない場合は影の中にあります。

このチュートリアルを読んで、ポイント/全方向ライトを使用してシャドウ マッピングを行う方法を理解しました。

セクション 12.2.2 では、次のように述べています。

すべての光源に対して単一のシャドウ マップを使用します。

そして、12.3.6の下では次のように書かれています:

1) 現在のピクセルから光源までの二乗距離を計算します。
...
4) 計算された距離の値とフェッチされたシャドウ マップの値を比較して、影の中にいるかどうかを判断します。

これは大まかに上で述べたことです。

私が得られないのは、すべてのライトを 1 つのシャドウ マップに焼き付けた場合、どのライトとの距離を比較する必要があるかということです。マップに焼き付けられた距離は、すべてのライトのブレンドであるため、何にも対応していてはなりませんね。

私は何かが欠けていると確信していますが、誰かが私にこれを説明してくれることを願っています.


また、単一のシャドウ マップを使用している場合、それをすべての光源に対してどのようにブレンドするのでしょうか?

単一の光源の場合、シャドウ マップはライトに最も近いオブジェクトの距離 (つまり、深度マップ) を格納するだけですが、複数の光源の場合、シャドウ マップには何が含まれますか?

4

1 に答える 1

5

あなたは時期尚早に文を短くしました:

すべての光源に対して単一のシャドウ マップを使用し、マルチパス レンダリングでイメージを作成し、光源ごとに 1 つのパスを実行します。

そのため、シャドウ マップには一度に 1 つの光源のデータが含まれますが、一度に 1 つのライトしかレンダリングしないため、使用するマップは 1 つだけです。

これはあなたの 2 番目の質問につながると思います。ライトは加算的であるため、複数のライトからの結果を単に加算するだけで結合します。GPU Gems の場合、それらはフレーム バッファに直接追加されます。これは、その時点で GPU で使用できるストレージ テクスチャ サンプラーの数が比較的限られているためです。最近では、おそらくフレーム バッファーでの結合とフラグメント シェーダーでの直接結合を組み合わせて実行したいと思うでしょう。

また、浮動小数点の丸め誤差の蓄積により、正確に等しいのではなく、通常、「ピクセルがシャドウ バッファー内の距離に少し足した値以下の場合にピクセルが点灯する」というテストを適用します。

于 2012-03-12T02:55:32.647 に答える