@@ -23,6 +23,7 @@ struct Ray
2323};
2424
2525Ray CreateCameraRay (float2 NormalizedXY,
26+ float4x4 CameraProj,
2627 float4x4 CameraViewProjInv,
2728 float3 CameraPosition)
2829{
@@ -33,7 +34,7 @@ Ray CreateCameraRay(float2 NormalizedXY,
3334 RayStart.xyz /= RayStart.w;
3435 RayEnd.xyz /= RayEnd.w;
3536 CameraRay.Direction = normalize (RayEnd.xyz - RayStart.xyz);
36- CameraRay.Origin = CameraPosition;
37+ CameraRay.Origin = CameraProj[ 3 ][ 3 ] == 0.0 ? CameraPosition : RayStart.xyz ;
3738 return CameraRay;
3839}
3940
@@ -86,6 +87,7 @@ float4 ComputeAxis(float3 AxisDirection,
8687 float MaxCameraZ,
8788 float CameraZRange,
8889 float4x4 CameraView,
90+ float4x4 CameraProj,
8991 float3 PositiveColor,
9092 float3 NegativeColor)
9193{
@@ -111,7 +113,11 @@ float4 ComputeAxis(float3 AxisDirection,
111113 float DistToAxis = abs (dot (Delta, Cross)) / max (length (Cross), 0.001 );
112114
113115 // Axis width in world space
114- float AxisWidth = PixelSize * DistFromCamera;
116+ float AxisWidth = PixelSize;
117+ if (CameraProj[3 ][3 ] == 0.0 )
118+ {
119+ AxisWidth *= DistFromCamera;
120+ }
115121 float Line = abs (DistToAxis) / AxisWidth;
116122 float Alpha = (1.0 - min (Line * Line, 1.0 )) * saturate (1.0 - DistFromCamera / AxisLen);
117123
@@ -120,7 +126,7 @@ float4 ComputeAxis(float3 AxisDirection,
120126 AxisPosZ += AxisWidth;
121127 // Compute smooth visibility
122128 // Note: using minimum depth when TAA is enabled looks bad from the distance
123- // when there is small geometry (e.g. bicycle while spokes)
129+ // when there is small geometry (e.g. bicycle wheel spokes)
124130 float Visibility = saturate ((MaxCameraZ - AxisPosZ) / CameraZRange);
125131 Alpha *= Visibility;
126132
@@ -165,7 +171,7 @@ float4 ComputeCoordinateGrid(in float2 f2NormalizedXY,
165171 in float MaxDepth,
166172 in CoordinateGridAttribs GridAttribs)
167173{
168- Ray RayWS = CreateCameraRay (f2NormalizedXY, Camera.mViewProjInv, Camera.f4Position.xyz);
174+ Ray RayWS = CreateCameraRay (f2NormalizedXY, Camera.mProj, Camera. mViewProjInv, Camera.f4Position.xyz);
169175
170176 float3 Positions[3 ];
171177 float PlaneAlpha[3 ];
@@ -185,21 +191,21 @@ float4 ComputeCoordinateGrid(in float2 f2NormalizedXY,
185191#if COORDINATE_GRID_AXIS_X
186192 {
187193 AxisResult += ComputeAxis (float3 (1.0 , 0.0 , 0.0 ), RayWS, Camera.fFarPlaneZ, PixelSize * GridAttribs.XAxisWidth, MaxCameraZ,
188- CameraZRange, Camera.mView, GridAttribs.PositiveXAxisColor.rgb, GridAttribs.NegativeXAxisColor.rgb);
194+ CameraZRange, Camera.mView, Camera.mProj, GridAttribs.PositiveXAxisColor.rgb, GridAttribs.NegativeXAxisColor.rgb);
189195 }
190196#endif
191197
192198#if COORDINATE_GRID_AXIS_Y
193199 {
194200 AxisResult += ComputeAxis (float3 (0.0 , 1.0 , 0.0 ), RayWS, Camera.fFarPlaneZ, PixelSize * GridAttribs.YAxisWidth, MaxCameraZ,
195- CameraZRange, Camera.mView, GridAttribs.PositiveYAxisColor.rgb, GridAttribs.NegativeYAxisColor.rgb);
201+ CameraZRange, Camera.mView, Camera.mProj, GridAttribs.PositiveYAxisColor.rgb, GridAttribs.NegativeYAxisColor.rgb);
196202 }
197203#endif
198204
199205#if COORDINATE_GRID_AXIS_Z
200206 {
201207 AxisResult += ComputeAxis (float3 (0.0 , 0.0 , 1.0 ), RayWS, Camera.fFarPlaneZ, PixelSize * GridAttribs.ZAxisWidth, MaxCameraZ,
202- CameraZRange, Camera.mView, GridAttribs.PositiveZAxisColor.rgb, GridAttribs.NegativeZAxisColor.rgb);
208+ CameraZRange, Camera.mView, Camera.mProj, GridAttribs.PositiveZAxisColor.rgb, GridAttribs.NegativeZAxisColor.rgb);
203209 }
204210#endif
205211
0 commit comments