左の画像に似た画像をレンダリングしようとしていますが、影と反射に問題があります。
現在、問題を示すためにシャドウ コードのみが公開されています。
ご覧のとおり、赤いボールは緑のボールの近くで影になっているはずですが、奇妙な理由ですべてのピクセルが乱れています。コードの影の部分を閉じると、赤いボールが影なしで正常にレンダリングされます。
この問題の根源は反射にも影響していると思います。ヒントを教えてください。私はそれを失っています。
左の画像に似た画像をレンダリングしようとしていますが、影と反射に問題があります。
現在、問題を示すためにシャドウ コードのみが公開されています。
ご覧のとおり、赤いボールは緑のボールの近くで影になっているはずですが、奇妙な理由ですべてのピクセルが乱れています。コードの影の部分を閉じると、赤いボールが影なしで正常にレンダリングされます。
この問題の根源は反射にも影響していると思います。ヒントを教えてください。私はそれを失っています。
左の画像が癌を示していることを考えると、これはシャドウ レイが反射したオブジェクトに当たる典型的なケースです。シャドウ レイのヒット テストを行う場合、レイを生成したサーフェスを除外する必要があります。ソース オブジェクトをシャドウ関数に渡すだけで、無視できます。
この方法は、凸形状に対してのみ機能します。セルフ シャドウを行う形状 (トーラスなど) がある場合は、より一般的である必要があります。通常のアプローチは、イプシロン(浮動小数点エラーの許容範囲) を定義し、それよりも近い交点を無視することです。
もう 1 つのアプローチは、面のどちら側にぶつかったかを検出することです。球体にセルフ シャドウを適用しないでください。これは、光線が表面法線と同じ一般的な方向に投射されているためです (つまり、出射する光線と表面法線の内積は正です)。これは影としてカウントされません。
解決済み: 説明しにくいアルゴリズムの問題がありました。
別の方法は次のとおりです。基本的に、余弦角が 0.0001 より大きいかどうかを確認します。それより大きい場合は、シャドウしません。