Skip to content

Smooth blends

SmoothUnion / SmoothIntersect / SmoothSubtract take a blend distance that rounds the junction — the organic fillet the hard booleans can’t give. They come from the implicit engine (signed distance fields) and have no exact B-Rep form: ToBrep() rejects them with a clear report, while ToMesh() polygonizes the field with Surface Nets. They still compose freely with the rest of the Shape vocabulary.

var stem = Shape.Cylinder(5, 30);
var bulb = Shape.Sphere(11).Translate(0, 0, 18);
var scene = new Scene();
scene.Add(new Part("hard union", stem | bulb, Palette.Steel,
Matrix4d.CreateTranslation((-30, 0, 15))));
scene.Add(new Part("smooth union", stem.SmoothUnion(bulb, blend: 6), Palette.Teal,
Matrix4d.CreateTranslation((30, 0, 15))));

A hard union next to a smooth union with a blended neck

A blend of zero or less degrades to the exact hard operator — field and bounds — so a parametric blend that shrinks to nothing does not have to be special-cased at the call site.

The distance a blended field reports is correct in sign everywhere and a lower bound in magnitude near the seam, which is what meshing and the polygonizer’s cull need; don’t read a wall thickness off the blend region itself.

  • Offset — grow or shrink a solid by a uniform distance
  • Shell — hollow it into a skin
  • Lattices — periodic infill from the same field arithmetic
  • The SDF vocabulary — field primitives and domain operations