Dual Paraboroid Shadow Maps + Exponential Shadow Maps

 先日、法線マップについて前進させたので、改めてシャドウマップについて考えていました。

 シャドウマップにはいろいろあります。Dragoonでは基本的な「Exponential Shadow Maps」でした。今回は「Dual Paraboroid Shadow Maps」をやってみました。

  • Dual Paraboroid Shadow Maps
    • 点光源の全方位に2面のレンダリングで対応する。
    • 同じ全方位のCube Shadow Mapsは6面のレンダリングが必要。
    • 頂点シェーダで非線形にメッシュをゆがませる。荒いメッシュや光源に近いメッシュは精度が悪い。頂点の移動では平面ポリゴンであり続け、曲面ポリゴンとはならないから。
    • 2面で全方位なので、光源から離れると急激にマップが小さくなる。
    • 2面のつなぎ目はアーティファクトが出やすい。

 今回はDual Paraboroid Shadow Maps (DPSM)に、Exponential Shadow Maps (ESM)の処理を組み合わせました。いうなれば、EDPSMでしょうか。

 DPSMのつなぎ目のアーティファクトは、ESMとその補間処理によって目立たなくなりました。
 全方位ですと、向きや画角の調整が不要で、シャドウマップの変換パラメータの制御が少し楽です。ただし、DPSMに関して光源と物体の距離が近くても遠くてもうまくないので、別の注意が必要です。距離によるESMに関する演算のオーバーフローに対しても注意が必要です。

スクリーンショットについて

スクリーンショットは今回の結果です。影がわかりやすいようにライトは強めにしてあります(法線マップなどはありません)。白い四角は光源の位置です。
 左上の2つの黒い矩形は、シャドウマップの2面を表し、物体の深度は赤成分で表されています。SurfaceFormat.Single形式に格納されたマップを補正なしで表示しているので、真っ赤に見えています。シャドウマップの向きはモデルの方を向くようにしているので、ほかに物体のないこのシーンでは、ほとんどマップの片側は何も描画されません。