Skip to content
AnimationStudiosBLUX Physics SuiteGet BLUX
Discord

Surface meshing

The Surface Mesher node (shown as Liquid Surface Mesher) turns liquid particles into a smooth surface mesh. It works for Hydro and Atom liquids.

Meshing runs in separate surfacer processes while the bake simulates the next frame. It writes one PLY file per frame next to the particle cache. A Geometry Nodes Import PLY tree streams that sequence, so the viewport, F12, blender -b -a and Alembic export all read the same files with no Python on the render path. Cycles motion blur uses the surface’s velocity attribute.

  • The surfacer pool is small: one process per four CPU threads, up to four.
  • Re-mesh rebuilds the surface from the cached particles with new settings, without re-simulating. Changed settings keep showing the previous surface, flagged stale, until you re-mesh.
  • Live Mesh Preview (off by default) also meshes a live run, at a coarser preview resolution and newest-frame-only.
  • Surfaces have their own disk budget (Surface Budget, 20 GB by default), so they never evict particle frames. See Cache and budgets.
Mesher Where it runs Notes
Production (default) CPU surfacer pool The Hydro colour field on a sparse marching-cubes grid, weighted Laplacian smoothing, colour-field normals, and velocity, colour and temperature interpolated onto the vertices. Needs pysplashsurf.
Anisotropic (GPU) GPU Stretches each particle’s kernel along its neighbourhood (a disc on a sheet, a rod on a jet), so thin splash sheets stay connected. About four to five times faster.
Blender Native (Geometry Nodes) Live, in Blender A no-install fallback. It meshes a signed distance field instead of a fog density.

Production needs pysplashsurf in the solver’s Python. Without it BLUX falls back to the Geometry Nodes mesher, and the preferences offer a one-click install. See Dependencies.

Measured with the surface benchmark (1 cm particles with Hydro-like jitter, Ryzen 7 3700X):

Test Old Geometry Nodes mesher Production mesher
Sphere: disconnected pieces (interior bubbles) 224 1
Flat pool: pieces / top-face height spread / normal tilt 1,387 / 0.76 r / 34.6° 1 / 0.065 r / 1.6°
125,000-particle block: triangles / time 5.4 M / 1.9 s 0.21 M / 0.34 s

It implements Yu & Turk (2013), Reconstructing Surfaces of Particle-Based Fluids Using Anisotropic Kernels. It builds the same PLY sequence on the GPU, so Re-mesh, the surface cache, Alembic export and motion blur work unchanged.

Measured on a GTX 1060 6 GB (1 cm particles):

Test Production (CPU) Anisotropic (GPU)
40,000-particle pool, per frame 172 ms 47 ms
125,000-particle block, per frame 338 ms 67 ms

Quality is a trade. On very noisy particle sets, the production mesher’s heavier smoothing gives a calmer surface, and the GPU mesher follows the particle layer more closely. The GPU mesher wins on thin liquid: a one-particle-thick sheet with 30% of its particles removed meshes as one or two pieces.

Limits: the GPU mesher’s field is a dense grid addressed by 8³ bricks, about 330 MB at the default 8M-voxel allocation. A scene that needs more voxels is meshed at a coarser resolution automatically. The kernels compile on the first mesh of a session (about 12 s cold).

Setting Default What it does
Mesher Production Which mesher builds the surface.
Resolution 0.75 Marching-cubes cell size as a multiple of the particle radius. 0.75 is production quality, 0.5 is hero detail and 1.0 a quick look.
Smoothing 15 Smooths per-particle bumps while keeping thin sheets and droplets.
Iso Threshold 0.6 Where the surface sits. Higher pulls it in, lower fattens it.
Kernel Radius 2 Smoothing length as a multiple of the particle radius. 2.0 matches the Hydro solver.
Particle Scale 1 Radius the surface is built with. Above 1 closes gaps between sparse particles.
Mesh Cleanup on Removes sliver triangles.
Normal Smoothing 10 Smooths the normals without crossing creases.
Fit to Boundaries on Builds the surface up to the floor, walls and colliders.
Keep as Spray on Draws pieces removed by Min Droplet Size as small spray droplets.
Min Droplet Size 4.8 Removes detached pieces smaller than this many particle radii across. 0 keeps everything.
Anisotropy Cap 3.5 GPU mesher: maximum kernel stretch. Higher keeps thin sheets connected. 1 gives round kernels.
Position Smoothing 2 GPU mesher: passes that even out the particle lattice.
Live Mesh Preview off Meshes live runs at preview resolution.

Fit to Boundaries matters because the solver keeps the lowest layer of particles about 1.4 radii off a solid. Without fitting, a lumpy skin hangs above the floor with air trapped under it, and a glass shader shows it as silvery blobs. With it on, vertices that end up inside a solid are moved onto its surface. Box colliders, spheres, ground planes and box-like or flat meshes are fitted. Other mesh colliders keep a small gap.

The node’s Whitewater section is covered in Whitewater. Every setting is in the Output reference.

Atom Fluid, Lava and Mud can be meshed too. For the GPU mesher, Shape from Deformation shapes each particle’s kernel from its deformation gradient. It needs Export Deformation on the Atom solver.