2

この SAO アルゴリズムを実装しようとしています。

次の結果が得られます。

結果

鼻が壁の上にある理由がわかりません。Z バッファの問題のようです。

ここに私の入力値があります:

const float projScale = 100.0;
const float radius = 0.9;
const float bias = 0.0005;
const float intensityDivR6 = pow(radius, 6);

深度バッファーのミップマップの使用を無効にすることを除いて、元のシェーダーを変更せずに使用しています。

私の深度バッファ(別のシーンで、申し訳ありません):

深さ

4

3 に答える 3

2

zbuffer の線形化に問題があるか、-1 と 1 の間にありません。

于 2016-05-19T20:00:41.283 に答える
1

ありがとう、ブルーノ。やっと何が問題だったのかが分かりました。1 つ目は、Z を正しく変換しなかったことです。特定のプリパスを使用して Z を線形にし、-1 と 1 の間に配置しました。互換性のない方法を使用していました。

また、一部のユニフォームを正しく計算するために、射影行列で近平面と遠平面の値を直接否定する必要がありました。

結果 : 結果

于 2016-05-19T22:15:26.357 に答える
0

同様の問題があり、視覚的に間違ったオクルージョンがあり、近/遠にリンクしていたので、それを修正するために行ったことを提供することにしました。

私が抱えていた問題は、以前のコメントに記載されています。カメラがオブジェクトの近くにあるとき、または半径が非常に大きすぎるときに、セルフ オクルージョンが発生していました。

深度バッファー値からカメラ空間値 ( g3d エンジンreconstructCSZの関数) への変換を詳しく見てみると、正のニア/ファーで作業する場合、深度を 0 に置き換えるとニア プレーンが得られることがわかります。 . つまり、モデルの外側でタップを取得するたびに、z 成分が near に等しくなり、z が 0 に近いフラグメントに対して誤ったオクルージョンが発生することを意味します。完全な寄与を計算するときにそれらが考慮されるのを避けるために、近い面に配置されています。

于 2016-12-22T15:05:43.987 に答える