はい、精度上の問題です。浮動小数点問題ではなく、有限の精度です。理論的には、シャドウマップは「光から最も近い物体までの距離」を記憶する。しかし実際には、「光からの距離±eps」を記憶している。
次に、テストすると、あなたは同じ光にあなたの断片の距離があります。しかし、やはり実際には±eps2です。したがって、これらの2つの値を比較すると、シャドウマップのレンダリングまたはシェーディングのために補間するときにepsが異なるように変化することがわかります。したがって、d ± eps < d2 ± eps2
を比較すると、d2==d
の場合、eps!=eps2
のため間違った結果になることがあります。しかし、もしあなたがd ± eps < d2 + max(eps) + max(eps2) ± eps2
を比較するなら、あなたは大丈夫でしょう。
この例ではd2==d
です。それは自己シャドーイングと呼ばれます。また、上記のバイアスを使って簡単に修正することも、レイトレーシングで自分自身をテストしないこともできます。
さまざまなオブジェクトや、epsとeps2が大きく異なる場合は、はるかに扱いにくくなります。それに対処する1つの方法は、eps(http://developer.download.nvidia.com/SDK/10.5/opengl/src/cascaded_shadow_maps/doc/cascaded_shadow_maps.pdf)を制御することです。あるいは、もっと多くのサンプルを取ることもできます。
質問に答えるには:シャドウマッピングが理想的な距離を比較することがコア問題です。しかし、これらの距離は理想的ではなく、量子化されています。量子化された値は通常は問題ありませんが、この場合は2つの異なる空間で比較しています。