2016-04-28 129 views
6

私はシャドウマッピング上に読み取り、次のチュートリアルが判明している:それは著者が「影のニキビ」アーティファクトを議論し始める点まで私には意味を構成するシャドーアクネの原因は何ですか?

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/

を。以下の図で、原因を説明しています。 enter image description here

シャドーアクネの原因を理解していて、バイアスを追加するのがなぜそれを修正するのかについてはまだ多くの問題があります。

シャドウマップの解像度は、にきびには影響しないようです。それは何ですか?浮動小数点精度か、それとも別のものでしょうか?

答えて

7

はい、精度上の問題です。浮動小数点問題ではなく、有限の精度です。理論的には、シャドウマップは「光から最も近い物体までの距離」を記憶する。しかし実際には、「光からの距離±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つの異なる空間で比較しています。

関連する問題