Skip to content

Commit 81c0b9f

Browse files
Fixed coordinate grid issues with ortho projection
1 parent d82d679 commit 81c0b9f

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

Shaders/Common/public/CoordinateGrid.fxh

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct Ray
2323
};
2424

2525
Ray 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

Comments
 (0)