2013-02-16 14 views
13

私は最近、OpenGL 4.3でボクセル・コーン・トレースを使用してソフト・シャドウを実装しました。ライトの方向にコーンをトレースし、不透明度値を累積します。閉塞された表面は、閉塞器に近づくと同様に、表面のボクセル化への影に明確なスポットを隠すように私が解決しようとしたり非表示にしています enter image description hereボクセル・コーントレースされたソフト・シャドウ

重要なことは、非常にシャドーイングボクセル化効果です。私は64x64x64の低解像度ボクセルを使用しています。しかしながら、より高解像度のボクセルを使用しても、より高いミップマップレベルの低解像度ボクセルのいくつかは依然としてトレースに取り込まれます。

私の最初のアイデアは次のとおりです。最も遠いシャドウの最も柔らかい部分を維持し、オクルーダーに近いシャドウの部分をシャドーマップで置き換えたいと考えています。シャドウマップは各オクルーダーから遠ざかるにつれて消えていくので、私は何とかそれを円錐のトレースされたシャドウに混ぜるでしょう。

enter image description here

は、誰もが離れてシャドウマップの各オブジェクトからの距離に基づいて影をフェードする方法を考えることができますし、それは円錐トレースされた影にスムーズにブレンドしていますか?

私が持っている別のアイデアは、オクルーダーに近い表面に何らかの形で影を描くことですが、これはおそらく高価になります。

また、ソフトシャドウアルゴリズムの改善に役立つ他のアイデアを歓迎します。

私はまた、運動中にそれを表示するためにビデオを設置しました:

https://www.youtube.com/watch?v=SUiUlRojBpM

はまだシャドウイングの問題を解決する方法を発見していません。

+1

+1最後に質問ですが、これは初心者レベルではなく、私の脳をくすぐるものです。私が考えることができるものを見てみましょう... – datenwolf

+1

コーントレースアルゴリズムでは、ボクセルのアルファ値ボクセルが占有されているかどうかを示します。もしそうなら、openglのデフォルトのミップマッピングアルゴリズムはあなたに正しい結果を与えないかもしれません。また、まばらなボクセルオクツリー表現を使用していますか? – Slicedpan

+0

間接拡散および鏡面反射については、ミップレベルごとに1つのボクセルで6方向すべてをオフセットすることによって3Dテクスチャをサンプリングします。理論を正しく理解していれば、これは私に2x2x2の "レンガ"を与えてくれると思います。私は、不透明度の値が1になり、それが私の定義された最大距離に達するまで、コーンをトレースします。私は、デフォルトのミップマップが非常にスムーズではないことに気付きました。したがって、私は3x3x3のレンガを使用した場合、結果が向上するはずです。私はオクトリー構造を使用していませんが、実装するもののリストにあります。 – gboxentertainment

答えて

0

この場合は、ライトを追加することで可能です。より多くの光をオリジナルのものに近づけることができ、より近い光の影の影で光の影を構成することができます。それが「エリアライト」エフェクトです。

2

大きなボクセルサイズが部分的にジオメトリで満たされているため、「不透明度値を累積しています。」という「クリアスポット」アーチファクトが発生していると推測しています。ラスタライズされたピクセルからボクセルに変換するときにいくつのサンプルを取っていますか?サンプルのボリューム/ボクセルの音量が小さい場合は、透明度を正しくレンダリングする際に問題が発生する可能性があります。明るい領域ではノイズが表示されます。

また、ボクセルの透過方向は依存していますか? Based on the author's original paper。半不透明なボクセルが正しくレンダリングされるようにするには、方向依存性が重要です。 「それから、シャドウマップのため、それは円錐トレースし、影の中にスムーズに溶け込む必要がありますか?」

A quick picture to explain

これはあなたが足で自分を撃っているようです。パフォーマンスがさらに向上し、シャドウ・マッピングとボクセル・コーン・トレースの両方の欠点があります。ボクセルコーントレーシングは高価ですが、すばらしい柔らかい影を与え、グローバルイルミネーションを行うことができます。シャドーマッピングはハードシャドウでは優れており、小さなシーンではより高速ですが、ジオメトリを追加すると、同じものを複数回、各ライトごとに少なくとも1回再描画します。

素晴らしい仕事btw。自分のDirectXでボクセル・コーン・トレースを実装するための予備調査をしながら、問題を見つけました。

[編集]

IはIピクチャでミスをしたことに気づきました。右の写真は4/16ではなく4/64でなければなりません。私はZ次元を忘れていました。

+0

他のpplもこのテクニックに取り組んでいるのを見て嬉しいです。私は方向性に依存する透明性を使用していません。もともと、私の表面ボクセル化を、穴を取り除き、「中空」鏡面反射(すなわち、ボクセルの半透明ブレンディングのために鏡面反射が透明である)をなくす固体ボクセル化と置き換えることを計画していた。方向依存のボクセルを使用することに対する私の恐れは、それが固体ボクセル化を使用するよりも大幅にコストがかかることである。 – gboxentertainment