From 997bd308e322a7575716690042730dccdb553f33 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 13 May 2026 16:36:00 +0200 Subject: [PATCH] Refactor junction terrain patch calculation to use accurate footprint and falloff distance --- src/geometry/spline-road-terrain.ts | 31 ++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/geometry/spline-road-terrain.ts b/src/geometry/spline-road-terrain.ts index 4ebfeee6..8e511c2e 100644 --- a/src/geometry/spline-road-terrain.ts +++ b/src/geometry/spline-road-terrain.ts @@ -427,11 +427,23 @@ export function createSplineCorridorJunctionTerrainPatch(options: { return null; } + const footprint = buildSplineCorridorJunctionFootprint({ + junction, + paths, + terrains: [terrain], + includeHidden: true + }); + + if (footprint === null) { + return null; + } + + const falloffDistance = getJunctionTerrainFalloffDistance(junction, paths); const bounds = { - minX: junction.center.x - junction.radius, - maxX: junction.center.x + junction.radius, - minZ: junction.center.z - junction.radius, - maxZ: junction.center.z + junction.radius + minX: footprint.bounds.minX - falloffDistance, + maxX: footprint.bounds.maxX + falloffDistance, + minZ: footprint.bounds.minZ - falloffDistance, + maxZ: footprint.bounds.maxZ + falloffDistance }; const sampleBounds = getTerrainSampleBoundsForRoad(terrain, bounds); @@ -465,11 +477,12 @@ export function createSplineCorridorJunctionTerrainPatch(options: { ) { const worldX = terrain.position.x + sampleX * terrain.cellSize; const worldZ = terrain.position.z + sampleZ * terrain.cellSize; - const influence = getJunctionInfluence( - Math.hypot(worldX - junction.center.x, worldZ - junction.center.z), - junction, - paths - ); + const influence = sampleSplineCorridorJunctionFootprintInfluence({ + footprint, + x: worldX, + z: worldZ, + falloffDistance + }); if (influence <= 0) { continue;