@@ -46,8 +46,9 @@ float2 ComputeSliceDirection(float Xi, int Index)
4646
4747float 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