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.
Baked, not live
Section titled “Baked, not live”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.
The three meshers
Section titled “The three meshers”| 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.
Production mesher
Section titled “Production mesher”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 |
Anisotropic (GPU) mesher
Section titled “Anisotropic (GPU) mesher”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).
Settings
Section titled “Settings”| 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 liquids
Section titled “Atom liquids”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.