はこちらをご覧ください:実際にはhttp://blog.nextrevision.com/?p=76のOpenGL GLSL SSAO実装
を、私は彼らのSSAO適応しよう - 私自身の小さなエンジンに収まるようにリニアシェーダを。
1)View Spaceサーフェスの法線と線の深さの値を計算します。
頂点: は、私は、次のシェーダを使ってRGBAテクスチャに保存
varNormalVS = normalize(vec3(vmtInvTranspMatrix * vertexNormal));
depth = (modelViewMatrix * vertexPosition).z;
depth = (-depth-nearPlane)/(farPlane-nearPlane);
gl_Position = pvmtMatrix * vertexPosition;
フラグメント:http://www.gamerendering.com/2008/09/28/linear-depth-texture/
:私は言及私の線形深さ計算のために
gl_FragColor = vec4(varNormalVS.x,varNormalVS.y,varNormalVS.z,depth)
それが正しいか? テクスチャは正しいようですが、そうでないかもしれませんか?
2)実際のSSAO実装:オリジナル上述したように がここで見つけることができる:http://blog.nextrevision.com/?p=76
又は速い:ペーストビンにhttp://pastebin.com/KaGEYexK
とは対照的に私は2つの入力テクスチャを使用しています。私のテクスチャの1つは、RGBとLinear Depht als Alphaの両方の法線を格納するからです。
私の第二テクスチャ、ランダム通常のテクスチャは、次のようになります。 http://www.gamerendering.com/wp-content/uploads/noise.png
私はほぼ正確に同じ実装を使用しますが、私の結果は間違っています。
1)SSAOシェーダはprojectionMatrixを使用し、それが逆行列です:
詳細に入る前に、私が最初にいくつかの質問をクリアしたいです。
これは、正立法投影法による画面整列クワッドにレンダリングされた後処理効果であるため、projectionMatrixは正字行列です。正解か間違っている?
2)2つの別々のものの代わりに、通常と深さの組み合わせのテクスチャがあります。
私の意見では、これはR5実装と実装の最大の違いです。しかし、これは大きな問題ではないはずですが、異なる深さのテクスチャのために、これは問題を引き起こす可能性が最も高くなります。私は、コードスニペットを理解していない認めざるを得ない
float GetDistance (in vec2 texCoord)
{
//return texture2D(R5_texture0, texCoord).r * R5_clipRange.w;
const vec4 bitSh = vec4(1.0/16777216.0, 1.0/65535.0, 1.0/256.0, 1.0);
return dot(texture2D(R5_texture0, texCoord), bitSh) * R5_clipRange.w;
}
:
R5_clipRangeこの
vec4 R5_clipRange = vec4(nearPlane, farPlane, nearPlane * farPlane, farPlane - nearPlane);
オリジナルのように見えることに注意してください。私の深さは、彼の私のテクスチャのアルファに保存されていると私はちょうどこの
return texture2D(texSampler0, texCoord).a * R5_clipRange.w;
正誤を行うためにenoughtされなければならないと思いましたか?
ありがとうございました:) – mp87
私は自分の記事にまだ回答できません: ここに結果があります:http://i42.tinypic.com/35ceko5.jpg – mp87