2016-05-18 4 views
2

this SAO algorithmを実装しようとしています。Scalable Ambient Obscuranceレンダリングの問題

私は次のような結果になっています:

result

私は壁の上に鼻を持っている理由私が把握することはできませんが、zバッファの問題のようです。ここで

は私の入力値は次のとおりです。

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

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

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

depth

答えて

2

それはZバッファの線形化の問題であるべきか、それが-1と1

1

の間ではありませんありがとうございましたブルーノ、私は最終的に何が問題だったかを理解する。 最初は、Zを正しく変換しなかったことです。特定のプリパスを使ってZ線形を作り、-1と1の間に置いていました。私は互換性のない方法を使っていました。

私はまた、いくつかのユニフォームを正確に計算するために、投影行列で自分のニア平面と遠平面の値を直接否定しなければなりませんでした。

結果: result

+0

解決策を投稿できますか? 私は同じアルゴリズムを実装しており、遭遇したいくつかの問題に直面する可能性があります。私は近く/遠い飛行機を否定しなかったが、それをしないとうまくいくようだ。 しかし、私のカメラが物体に近づくと、間違った自己閉塞が起こります(http://i.imgur.com/OWriRrK.png)。私はこれについてはわかりませんが、あなたが持っていた問題にリンクすることができます。 –

+0

一部の状況では正しい結果が得られているように見えるエラーの蓄積を避けるために、近くおよび遠い面を無効にする必要があります。私はそれのために私の問題を理解するのに何度かかかりました。私の結果が間違っているかどうかわからないことを除けば、無限ではないので、飛行機の正面にAOがあります。他の写真もありますか? –

+0

確かに、私はSponzaのシーンにいくつかの人がいます。シーンは半径23単位の境界球に収まります。結果は非常に良いです:http://i.imgur.com/lXFuOXP.png(右上のシーン設定を見ることができます)。しかし、半径を少し増やしても、私はカメラを閉じると同じ効果が現れるのを見ることができます。 http://i.imgur.com/TqRaoy0.png 私は忘れたものがあります言い換えると、私のニア/ファーはカメラが実際にカメラから見えるものに合わせて自動的に更新されます。 –

0

私は/遠く近くにリンクされている視覚的な間違った閉塞を有し、同様の問題があったので、私は、私はそれを修正するために何をやったか、あなたを与えることにしました。

私が持っていた問題は、以前のコメントに書かれています。カメラが物体に近づいたときや、半径が実際に大きすぎるとき、私は自己閉塞を得ていました。

あなたはカメラ空間値(g3d engineからreconstructCSZ機能)にデプスバッファ値からの変換を詳しく見てみた場合、あなたはあなたが作業している場合0で奥行きを交換して、あなたに近い平面を与えることがわかります正の近/遠。つまり、モデル外のタップを取得するたびに、az成分がほぼ同じになるため、azが0に近いフラグメントの誤ったオクルージョンが発生します。 基本的には、各タップを破棄する必要があります完全な貢献を行う際に考慮されることを避けるために、近い面に配置されています。

関連する問題