uniform float4 screen_res; uniform sampler2D s_occ; half ssao_blur_ps(half2 centerTC) { // low weight center sample - will be used on edges float fSumWeight = 0.025f; float2 centerData = tex2D(s_occ, centerTC); float fOcclusion = centerData.r * fSumWeight; float centerDepth = centerData.g; float2 arrOffsets[4] = { float2( 1,-1), float2(-1,-1), float2( 1, 1), float2(-1, 1) }; for(int i=0; i<4; i++) { float2 sampleTC = centerTC + screen_res.zw * arrOffsets[i]; float2 sampleData = tex2D(s_occ, sampleTC); float fDepth = sampleData.g; float fDiff = 8*abs(fDepth-centerDepth)/min(fDepth,centerDepth); float fWeight = saturate(1-fDiff); fOcclusion += sampleData.r * fWeight; fSumWeight += fWeight; } fOcclusion /= fSumWeight; return fOcclusion; }