diff --git a/src/AcDream.App/Rendering/Shaders/terrain_modern.vert b/src/AcDream.App/Rendering/Shaders/terrain_modern.vert index 473cba5..9427a55 100644 --- a/src/AcDream.App/Rendering/Shaders/terrain_modern.vert +++ b/src/AcDream.App/Rendering/Shaders/terrain_modern.vert @@ -136,5 +136,12 @@ void main() { vRoad0 = unpackOverlayLayer(aPacked2.x, aPacked2.y, rotRd0, baseUV); vRoad1 = unpackOverlayLayer(aPacked2.z, aPacked2.w, rotRd1, baseUV); - gl_Position = uProjection * uView * vec4(aPos, 1.0); + // Retail zFightTerrainAdjust (acclient_2013_pseudo_c.txt:1120769 = 0.00999999978, + // applied per terrain vertex inside ACRender::landPolysDraw at line 702254, + // address 006b6402). Render terrain 1 cm below its physical Z so coplanar + // building floors win the depth test. Physics path is unaffected — it reads + // the un-nudged heightmap via TerrainSurface.SampleZ. + // Closes issue #100; supersedes the hiddenTerrainCells cell-collapse hack. + vec3 terrainPos = vec3(aPos.xy, aPos.z - 0.01); + gl_Position = uProjection * uView * vec4(terrainPos, 1.0); }