Skip to content

Class: LaplacianSmoothing ​

Defined in: utils/LaplacianSmoothing.ts:28

Laplacian smoothing utility for mesh geometry

Provides algorithms to smooth mesh surfaces by moving vertices toward the average position of their neighbors. Useful for:

  • Reducing noise in scanned surfaces
  • Smoothing procedurally generated meshes
  • Creating organic, flowing surfaces

LaplacianSmoothing

Example ​

javascript
// Standard Laplacian smoothing
LaplacianSmoothing.smooth(vertices, faces, 3, 0.5);

// Volume-preserving Taubin smoothing
LaplacianSmoothing.taubinSmooth(vertices, faces, 3, 0.5, -0.53);

// Apply to THREE.js geometry
LaplacianSmoothing.smoothGeometry(geometry, 3, 0.5, 'taubin');

Constructors ​

Constructor ​

ts
new LaplacianSmoothing(): LaplacianSmoothing;

Returns ​

LaplacianSmoothing

Methods ​

smooth() ​

ts
static smooth(
   vertices, 
   faces, 
   iterations?, 
   lambda?, 
   boundarySmoothing?
): Float32Array;

Defined in: utils/LaplacianSmoothing.ts:72

Apply standard Laplacian smoothing to vertices

Algorithm: Each vertex is moved toward the average position of its neighbors. This tends to shrink the surface slightly with each iteration.

Parameters ​

vertices ​

Float32Array

Vertex positions (will be modified in place)

faces ​

Uint32Array

Face indices defining mesh topology

iterations? ​

number = 1

Number of smoothing passes (1-10 typical). More = smoother but may lose detail

lambda? ​

number = 0.5

Smoothing strength per iteration:

  • 0: No smoothing
  • 0.1-0.3: Gentle smoothing, preserves features
  • 0.4-0.6: Moderate smoothing
  • 0.7-1.0: Aggressive smoothing, may over-smooth
boundarySmoothing? ​

boolean = false

If false, boundary edges remain fixed (recommended for open meshes)

Returns ​

Float32Array

The smoothed vertices (same array, modified in place)

Example ​

javascript
// Gentle noise reduction
LaplacianSmoothing.smooth(vertices, faces, 2, 0.25, false);

// Aggressive smoothing
LaplacianSmoothing.smooth(vertices, faces, 5, 0.7, false);

taubinSmooth() ​

ts
static taubinSmooth(
   vertices, 
   faces, 
   iterations?, 
   lambda?, 
   mu?, 
   boundarySmoothing?
): Float32Array;

Defined in: utils/LaplacianSmoothing.ts:193

Apply Taubin smoothing (volume-preserving algorithm)

Algorithm: Alternates between shrinking (positive lambda) and expanding (negative mu) passes. This prevents the volume loss common in standard Laplacian smoothing.

Parameters ​

vertices ​

Float32Array

Vertex positions (will be modified in place)

faces ​

Uint32Array

Face indices defining mesh topology

iterations? ​

number = 1

Number of shrink-expand cycles (1-5 typical)

lambda? ​

number = 0.5

Shrinking factor (0.3-0.7 typical). Higher = more aggressive

mu? ​

number = -0.53

Expansion factor (-0.2 to -0.7 typical). Must be negative.

  • Classic Taubin: mu = -(lambda + 0.02)
  • Common default: mu = -0.53 when lambda = 0.5
boundarySmoothing? ​

boolean = false

If false, boundary edges remain fixed

Returns ​

Float32Array

The smoothed vertices (same array, modified in place)

Example ​

javascript
// Classic Taubin parameters
LaplacianSmoothing.taubinSmooth(vertices, faces, 3, 0.5, -0.53, false);

// Gentle volume-preserving smoothing
LaplacianSmoothing.taubinSmooth(vertices, faces, 2, 0.33, -0.35, false);

smoothGeometry() ​

ts
static smoothGeometry(
   geometry, 
   iterations?, 
   lambda?, 
   method?, 
   boundarySmoothing?, 
   mu?
): void;

Defined in: utils/LaplacianSmoothing.ts:218

Apply smoothing to a BufferGeometry

Parameters ​

geometry ​

BufferGeometry

iterations? ​

number = 1

lambda? ​

number = 0.5

method? ​

"laplacian" | "taubin"

boundarySmoothing? ​

boolean = false

mu? ​

number = -0.53

Returns ​

void

Released under the MIT License.