Smooth the given vertex loops (e.g. from extractBoundaryLoops) in
place with an iterated windowed moving average, moving only the X/Z position
of the existing boundary vertices and leaving their Y untouched. Unlike a
local corner-cutting pass (which only rounds individual steps into small
arcs), the averaging window spans several vertices, so long grid-aligned
staircase runs collapse onto their straight centre line — the rim reads as one
continuous curve rather than a chain of little bumps. The window grows with
strength.
Smooth the given vertex loops (e.g. from extractBoundaryLoops) in place with an iterated windowed moving average, moving only the X/Z position of the existing boundary vertices and leaving their Y untouched. Unlike a local corner-cutting pass (which only rounds individual steps into small arcs), the averaging window spans several vertices, so long grid-aligned staircase runs collapse onto their straight centre line — the rim reads as one continuous curve rather than a chain of little bumps. The window grows with
strength.