最近、OpenGL 4.3でボクセルコーントレースを使用して、光の方向にコーンをトレースし、不透明度の値を累積することで、ソフトシャドウを実装しました。
私が解決または非表示にしようとしている重要なことは、オクルージョンされた表面がオクルーダーに近づくにつれて非常にボクセル化されたシャドウイング効果であり、表面のボクセル化によってシャドウ内のクリアスポットを非表示にします。私は低解像度のボクセル64x64x64を使用しています。ただし、高解像度のボクセルを使用した場合でも、より高いミップマップレベルの低解像度のボクセルの一部がトレースにキャプチャされます。
ですから、私の最初のアイデアは次のとおりです。シャドウの最も柔らかい部分を最も遠くに保ち、オクルーダーに近いシャドウの部分をシャドウマップに置き換えたいと考えています。シャドウマップは、各オクルーダーから離れるにつれてフェードし、コーントレースシャドウとどうにかしてブレンドします。
シャドウマップの各オブジェクトからの距離に基づいてシャドウをフェードアウトし、コーントレースシャドウにスムーズに溶け込ませる方法を誰かが考えられますか?
私が持っているもう1つのアイデアは、オクルーダーに近いサーフェスにシャドウをレイトレースすることですが、これはおそらくコストがかかりすぎます。
または、ソフトシャドウアルゴリズムの改善に役立つ他のアイデアを歓迎します。
私はまた、それが動いていることを示すためにビデオを載せました:
https://www.youtube.com/watch?v=SUiUlRojBpM
シャドウイングの問題を解決する方法はまだ見つかりません。