奇妙なSSAO効果(ビュースペース内の位置/通常のテクスチャが間違っていますか?)
主にホセマリアメンデスのgamedev.netチュートリアルに基づいて、ゲームエンジン(DirectX 11、C ++)でSSAO効果を作成しようとしています。残念ながら、テクスチャ作成の問題(法線、位置)はカバーしていません。 最初のパスでは通常のテクスチャを作成し、次に深度バッファもテクスチャとして読み取ります(2番目のパスでシェーダーリソースビューを作成し、深度バッファのバインドを解除するため可能です)。どちらもビュースペースにある必要があります。 ぼかしはまだ実装していません(後で実行します)が、現在いくつかの問題があります。テクスチャの計算が間違っているか、テクスチャからデータを変換する方法が間違っているためではなく、数式やパラメータの値が間違っているためと考えられます。 何がうまくいかなかったかについての私の推測: (ビュー空間での)通常のテクスチャ計算-しかし、それは見えます[OK]を、 位置テクスチャの計算(ビュー空間で)と位置から深度への変換 逆投影行列計算、 何かが正規化も飽和もされていないはずですが、 パラメータ(ただし、出力にそのような影響を与えるべきではありません)? 私のテクスチャ 拡散(textures[0]、ここでは実際には使用されません、比較のためにのみ): 通常(textures[1]、ビュー空間にある必要があります): 私はそれらを最初のパスの頂点シェーダーで取得します(ピクセルシェーダーはちょうどですoutput.normal = input.normal): output.normal = float4(mul(input.normal, (float3x3)world), 1); output.normal = float4(mul(output.normal, (float3x3)view), 1); 深度バッファテクスチャ(textures[2]、値の差が小さいため何も見にくいですが、問題ないと思います): それを表示するために私は使用します: float depth = textures[2].Sample(ObjSamplerState, textureCoordinates).r; depth = (depth + 1.0f) / 2.0f; color.rgb = float3(depth, depth, depth); 外部プログラムでのコントラスト補正後(私はシェーダーを使用しませんが、目には良いです): 深度バッファーの説明: //create depth …