光伝搬ボリューム:ボリュームデータの異方性フィルタリング


9

ここここで詳しく説明するリアルタイムの拡散グローバルイルミネーションに、カスケードライトプロパゲーションボリュームアルゴリズム(間接シャドウイングはまだありません)を実装しまし。正常に動作しますが、特に1つのアーティファクトを修正しようとしています。

短い要約

アルゴリズムの動作がわかっている場合は、これをスキップできます。

このアルゴリズムは、3Dグリッドに球面調和関数の形式で照明情報を格納することで機能します。最初にグリッドの各セルのデータは、拡張シャドウマップ(反射シャドウマップ)のレンダリングから取得されます。)深度の他に、色と通常の情報も含まれます。本質的には、光源から見たすべてのピクセルが間接照明の最初のバウンスの原因であるため、シャドウマッピングに使用する通常の深度バッファーと一緒に必要な情報を保存し、すべてのデータをサンプリングして3Dグリッドを初期化します。 。3Dグリッドの情報は、1つのセルの情報を6つの直接隣接セルすべて(上、下、左、右、上、下)に(反復ごとに)伝達することにより、反復的に伝達されます。グリッドの情報を使用してシーンを照らすには、シーンに全画面パスを適用し、ラスタライズされたピクセルごとに、ラスタライズされたサーフェスのワールドスペースの位置を使用できるようにします(たとえば、遅延シェーディングのGバッファーから)。画面上の特定のピクセルがグリッドのどのセルに属しているかを知る。

これはほとんどの部分で正常に機能しています。ここでは、GIがシミュレートされていない、ハードコードされた環境項のみの2つの画像と、その隣にLPVアルゴリズムを使用した画像があります。サーフェス上の色付きの反射、深度の詳細などに注意してください。

ここに画像の説明を入力してください

問題

ライティングステージでセルを検索する場合、ハードウェアテクスチャフィルターを使用したトリリニア補間を使用して、セルの中心、隣接するセル、および実際に検索されたテクスチャ座標の間のデータをスムーズに補間します。基本的に、この補間は、情報が検索される中心の周りのコンクリートピクセルへのセルの中心の照明情報の伝播を模倣します。さもなければ、照明が非常に粗くて醜く見えるため、これは必須です。ただし、トリリニア補間では、セルにエンコードされた照明情報の光の伝播方向が考慮されないため(球面調和関数であることを忘れないでください)、光がルックアップされたピクセルに誤って伝播される可能性があります。たとえば、セルにエンコードされた輝度が(1,0,0)( "

これにより、グリッド内のセルサイズがシーン内のサーフェスと比較して大きい場合、壁から光が不鮮明に漏れます(これは、伝播をできるだけ少なくしてシーンに遠くまで光を伝播するために大きなセルが必要なために必要です)。これは次のようになります。

ここに画像の説明を入力してください

(右上の影の輪郭から)見てわかるように、シーンは、シーンの左上のどこかにある指向性光源によって照らされています。また、アトリウムの外側と内側を隔てるセルは1つしかないため、光が漏れて左側の壁が誤って照らされます。

実際の質問

著者は、これを修正するために手動の異方性フィルタリングの形式を提案しています。彼は、次のように、表面法線nの方向に向かって放射輝度勾配(現在のセルからサンプリングされたSH係数を想定しています)を与えます。

ここに画像の説明を入力してください

そして状態

したがって、放射輝度の方向導関数を実際の放射輝度の方向と比較することにより、放射輝度分布がこのポイントのそのトリリニア補間よりもさらに開始するかどうかを計算できます。

私の質問:

方程式では、関数c(x)はポイント(x)でのSH係数のようです。したがって、放射輝度勾配は、点x-(n / 2)およびx +(n / 2)でのSH係数の重み付き差として、通常の数値微分のように計算されるようです。しかし、私のコンテキストではc(x)とは何ですか?現在、私はc(x)がサーフェス位置(x)でトリリニア補間された係数を参照していると仮定していますが、方向についての詳細情報を提供する方法がわからないため、まったくわかりませんSH係数の分布。

そして、その勾配をどのように使用して、セルからサンプリングされたライティングがサーフェスに適用されるかを正確に変更しますか?著者は、「放射輝度の方向導関数を実際の放射輝度の方向と比較する」とだけ書いていますが、これはかなりあいまいです。

彼は「中央差分スキーム」の使用に言及し、SH係数の中央差分についてこれらのスライドを参照し、勾配の導出を示すこの論文も参照しいますが、現時点ではそれらから有用な結論を出すことはできません。

回答:


4

中心的な違いは、AMDの論文で、メモリ内からトンネル内を飛行する水晶を使ってデモを行ったときに紹介されました。

c機能はこれだけあなたの現在のノーマルを使用してSHを評価し、精密な何か、だけのアイデア、例えば、輝きする必要がdoes notの。

次に、それを使用して、経験的要素を使用して、この微分を使用して輝度をダウントーンします。しかし、差分が光の流れが現在の法線から離れることを意味する場合にのみ、あなたはダウントーンを行います。

基本的には、壁の法線とは反対の方向に進むと、光の流れが(反対側で)空気中を伝搬するため、ゆっくりと減少するという事実を経験的に検出するという考え方です。しかし、通常より少し前にプローブすると、フラックスの急激な低下に気づくでしょう。これは、現在サンプリングしているセルが実際にリークしていることを意味します。

私はそれがケースの70%で機能することを発見しましたが、不注意に適用すると、非常に奇妙なブラックホール効果、または光漏れを含む非常に暗い領域での色相シフト(ピンク、グリーン...)が発生する可能性があります。これは、各色に3つのLPVがあるため、中央の違いが異なる結果をもたらす傾向があるためです。可能であれば、グレースケールの明度を使用して中央差分ダンパーを評価し、後ですべてのカラーチャネルに共通の低減係数を使用してみてください。

このハックがなければ、SHを評価するために使用する法線は磁束の方向とは逆になるため、通常はとにかくあまり輝きを得る必要はありません。気づくと思いますが、LPVで使用されている2バンドSHは実際には十分ではなく、この強力なリークを発生させる強力なDCコンポーネントを持っています。これが、LPVを意識したアーティストによって厳密に制御されていないジオメトリに対してLPVが実用的でない理由です。これにより、すべての壁に最小限の厚さを与えて、漏れを減らします。

また、一部の企業(スクウェアエニックスなど)は、手動で設計されたブロッカーの壁を使用して、ジオメトリボリュームのようにリークをなくします。(ジオメトリボリュームはリークを減らすのに役立ちますが、シーンをボクセル化するためのRSM逆投影はほとんどの場合部分的であり、LPVセルレベルでエイリアシングを作成します。これにより、リークの強度が奇妙に変化するため、さらに悪い外観になります)。

あなたはそれを吸い込んで、LPVに最終的な間接光でより強い最終単語を与えることによって問題を軽減することを試みることができます、重み(0.5?)を持つ定数項を使用し、LPVは間接の残りの0.5に寄与する可能性があります光。また、ジオメトリボリュームを実装してみてください。問題が減少します。そして最後に中心的な違い。


一定のアンビエントの50%を超える改善として、「アンビエントBRDF」(tri-Aceによる)と呼ばれる手法を使用できます。
v.oddou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.