Skip to content

Commit 4c1d1e8

Browse files
SSAO: Fix sample position reconstruction (#257)
* Fix sample position reconstruction * Fix FastACos approximation
1 parent 4e021a1 commit 4c1d1e8

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

Shaders/PostProcess/ScreenSpaceAmbientOcclusion/private/SSAO_ComputeAmbientOcclusion.fx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ float2 ComputeSliceDirection(float Xi, int Index)
4646

4747
float FastACos(float Value)
4848
{
49-
float Result = -0.156583 * Value + M_HALF_PI;
50-
Result *= sqrt(1.0 - abs(Value));
49+
float AbsValue = abs(Value);
50+
float Result = -0.156583 * AbsValue + M_HALF_PI;
51+
Result *= sqrt(1.0 - AbsValue);
5152
return (Value >= 0.0) ? Result : M_PI - Result;
5253
}
5354

@@ -117,7 +118,7 @@ float ComputeAmbientOcclusionPS(in FullScreenTriangleVSOutput VSOut) : SV_Target
117118

118119
float3 SliceDirection = float3(Omega, 0.0);
119120
float3 OrthoSliceDir = SliceDirection - dot(SliceDirection, ViewVS) * ViewVS;
120-
float3 Axis = cross(SliceDirection, ViewVS);
121+
float3 Axis = normalize(cross(SliceDirection, ViewVS));
121122
float3 ProjNormal = NormalVS - Axis * dot(NormalVS, Axis);
122123

123124
float ProjNormalLen = length(ProjNormal);
@@ -146,7 +147,7 @@ float ComputeAmbientOcclusionPS(in FullScreenTriangleVSOutput VSOut) : SV_Target
146147

147148
float MipLevel = clamp(log2(length(SampleOffset * g_Camera.f4ViewportSize.xy)) - g_SSAOAttribs.DepthMIPSamplingOffset, 0.0, float(SSAO_DEPTH_PREFILTERED_MAX_MIP));
148149
float3 SamplePositionVS0 = ScreenXYDepthToViewSpace(float3(SamplePositionSS0, SamplePrefilteredDepth(SamplePositionSS0, MipLevel)), g_Camera.mProj);
149-
float3 SamplePositionVS1 = ScreenXYDepthToViewSpace(float3(SamplePositionSS0, SamplePrefilteredDepth(SamplePositionSS1, MipLevel)), g_Camera.mProj);
150+
float3 SamplePositionVS1 = ScreenXYDepthToViewSpace(float3(SamplePositionSS1, SamplePrefilteredDepth(SamplePositionSS1, MipLevel)), g_Camera.mProj);
150151

151152
float3 SampleDifference0 = SamplePositionVS0 - PositionVS;
152153
float3 SampleDifference1 = SamplePositionVS1 - PositionVS;

0 commit comments

Comments
 (0)