私は最近、OpenGL 4.3でボクセル・コーン・トレースを使用してソフト・シャドウを実装しました。ライトの方向にコーンをトレースし、不透明度値を累積します。閉塞された表面は、閉塞器に近づくと同様に、表面のボクセル化への影に明確なスポットを隠すように私が解決しようとしたり非表示にしています ボクセル・コーントレースされたソフト・シャドウ
重要なことは、非常にシャドーイングボクセル化効果です。私は64x64x64の低解像度ボクセルを使用しています。しかしながら、より高解像度のボクセルを使用しても、より高いミップマップレベルの低解像度ボクセルのいくつかは依然としてトレースに取り込まれます。
私の最初のアイデアは次のとおりです。最も遠いシャドウの最も柔らかい部分を維持し、オクルーダーに近いシャドウの部分をシャドーマップで置き換えたいと考えています。シャドウマップは各オクルーダーから遠ざかるにつれて消えていくので、私は何とかそれを円錐のトレースされたシャドウに混ぜるでしょう。
は、誰もが離れてシャドウマップの各オブジェクトからの距離に基づいて影をフェードする方法を考えることができますし、それは円錐トレースされた影にスムーズにブレンドしていますか?
私が持っている別のアイデアは、オクルーダーに近い表面に何らかの形で影を描くことですが、これはおそらく高価になります。
また、ソフトシャドウアルゴリズムの改善に役立つ他のアイデアを歓迎します。
私はまた、運動中にそれを表示するためにビデオを設置しました:
https://www.youtube.com/watch?v=SUiUlRojBpM
はまだシャドウイングの問題を解決する方法を発見していません。
+1最後に質問ですが、これは初心者レベルではなく、私の脳をくすぐるものです。私が考えることができるものを見てみましょう... – datenwolf
コーントレースアルゴリズムでは、ボクセルのアルファ値ボクセルが占有されているかどうかを示します。もしそうなら、openglのデフォルトのミップマッピングアルゴリズムはあなたに正しい結果を与えないかもしれません。また、まばらなボクセルオクツリー表現を使用していますか? – Slicedpan
間接拡散および鏡面反射については、ミップレベルごとに1つのボクセルで6方向すべてをオフセットすることによって3Dテクスチャをサンプリングします。理論を正しく理解していれば、これは私に2x2x2の "レンガ"を与えてくれると思います。私は、不透明度の値が1になり、それが私の定義された最大距離に達するまで、コーンをトレースします。私は、デフォルトのミップマップが非常にスムーズではないことに気付きました。したがって、私は3x3x3のレンガを使用した場合、結果が向上するはずです。私はオクトリー構造を使用していませんが、実装するもののリストにあります。 – gboxentertainment