Adaptive Depth Bias for Shadow Mapsについて

例によって概要だけですが。ShadowMapのBiasに関する論文です。
[参照]
Adaptive Depth Bias for Shadow Maps

Slope Scale Depth Biasと比較して違うところ

本手法も、FragmentにおけるTangentに基くbiasを適用しますが、そのbiasの量の計算方法は異なります。
まず、対象FragmentのPixelが参照するShadowMap(以下SM)のTexelの中心位置と、Lightの位置を結ぶVectorを計算します。
一方で、FragmentのDepthとNormalより、Fragmentの三次元上での平面を求め、この平面と先のVectorの交点を計算します。
Lit/Shadowの判定は、Lightから交点までの距離と、SMのDepth値との比較によって判定します。
つまり、従来の手法では、Lit/Shadowの判定をFragmentのPixelの中心で行っていましたが、本手法では、SMのTexelの中心で行う様に計算するのが大きな違いです。従って、このBiasはDepthにおける奥側にも手前側にも作用します。
描画されたSMのTexelと、描画するFragmentのPixelが、同一平面であった場合は、この計算より求まる交点のLightからの距離は、SMのTexelに格納されたDepthの値と正確に一致するはずです。
このままではBiasはゼロなので、必要最低限のBias(以下Epsilon)を適用して判定します。
Epsilonは、いわゆるShadow acne/detachment等の現象を避けるためのものでなく、主にDepth Bufferの精度とFloatの精度によって生じる誤差を回避するためのものとなります。
Epsilonの計算は、DepthBufferの精度に基いて、カメラからの距離に応じて最適な値を計算します。(参照論文中の eq.3)

利点

おそらくですが、現状で最も最適化されたShadowMapのBiasと思われます。従って、shadow acne, shadow detachmentの問題が最も少ない結果が期待できます。
また、他のWarp系の手法(Dual Paraboloid、Perspective SM)にも正しく応用することができ、 良好なBias値の導出が可能です。
実行時間に関しても、slope scale depth biasを使用している状況下と比較するならば、軽微な増加と考えることができると思います。詳しくは論文内にデータがあるので参照してください。

残る問題点

FragmentのPixelとSamplingされるSMのTexelが、同一平面上でなかった場合は誤った結果になる可能性があります。
特に、FragmentのTangentがLightのVectorに対して平行に近づくケースでは、誤差が増大すると思われます。この誤差によって、判定を誤るケースが存在しますが、slope scale depth biasの場合も、同様の問題を抱えていると思われます。
もうひとつは、Percentage Closer Filterを代表とする、SMの隣接する他のTexelを参照する、Filter系の手法では、この手法を適用しても良い結果を得るのは難しいと思われます。
中心となるSMのTexelに対して、タイトにBiasを計算しても、SMの周辺の値を参照する手法では、あまり意味を成さないと思われます。
唯一PCFに関しては、Samplingした個々のSMのTexelの中心へのVectorを、平面に投影することで、この手法を正確に適用することは可能ですが、本来の計算対象である、FragmentのPixel位置より大きく離れた場所で、タイトにBiasを計算することに、大きな意味は無いと思われます。
従って、本手法を用いる際は、SMの判定が終わった後のパスで、Screen Spaceで、Cross-BilateralFilterを適用するなどの方法を考える必要があると思われます。

※VSVに関する部分は割愛させて頂きました。基本的には同じ考え方を適用していると思います。