| On this page |
Overview ¶
Implicit surfaces are lightweight mathematical representations of geometric shapes. Instead of storing geometry as a mesh or voxel grid, an implicit surface is defined by a function that can be evaluated at any point in space, returning a negative value inside the shape and a positive value outside. This is conceptually similar to an SDF VDB, but unlike a VDB, no voxel grid is stored.
Because the shape is defined by a formula rather than stored as data, implicit surfaces have several advantages:
-
Very little memory overhead
-
No discretization error, at any resolution
-
Exact primitive shapes (spheres, boxes, tori)
-
Unbounded shapes (such as planes, half-spaces) that are difficult or impossible to represent with voxel grids
These properties make implicit surfaces a good first choice for simulation domains, collision objects, and source volumes, especially when your shape can be built from simple primitives, since implicit surfaces are then faster than a VDB. They can also be evaluated directly on the GPU without first generating and uploading a mesh, avoiding the cost of mesh generation and transfer.
For more information, see Implicit surfaces: technical.
Workflow ¶
Create a shape ¶
Add an Implicit Surface SOP and pick a Shape: Box, Sphere, Torus, Tube, or Plane. Use Translate and Rotate to position it, and Uniform Scale to size it.
Tip
The Plane shape is infinite, making it ideal as a ground plane or domain wall with no extra setup.
To start from existing Houdini geometry, use Implicit Surface Convert with Mode set to Primitive to Implicit (for built-in sphere, box, or tube primitives) or Triangular Mesh to Implicit (for the convex hull of a mesh).
Implicit Surface Convert can also build shapes from other sources. Set Mode to Edges to Implicit to turn mesh edges into tube-shaped implicit surfaces, similar to the Wireframe SOP. Set it to Camera to Implicit Frustum to convert a camera into an implicit representation of its view frustum, with Clip Near/Clip Far controlling the near and far planes. This is useful for clipping a VDB to a camera’s visible region with VDB Implicit Clip SDF.
Note
Primitive to Implicit only works on hexahedra, spheres, and tubes, not arbitrary geometry. If you feed it something else, it will not convert.
Combine shapes ¶
Use the Implicit Surface Operation SOP to modify or combine shapes.
Note
The viewport shows a preview built from the individual shapes going into the operation, not the actual combined result. For example, after a union or intersection, you may still see the original, unmodified shapes overlapping in the viewport. To see what the combined implicit surface actually looks like, use an Implicit Surface Slice (see Preview with the slice).
With one shape connected, you can:
-
Invert A - flip inside and outside.
-
Offset A - expand or shrink the surface.
-
Shell A - hollow the shape into a thin shell.
With two shapes connected, you can:
-
Union - keep everything inside either shape.
-
Intersect - keep only what is inside both shapes.
-
Subtract - remove one shape from the other.
-
Difference - keep what is inside either shape, but not both.
To combine more than two shapes, merge them with a Merge SOP and use Union all A or Intersect all A.
Use the Fillet parameter to soften the edge where shapes meet. Smooth blends them organically, Round adds a curved transition, and Chamfer adds a flat bevel.
Preview with the slice ¶
Drop an Implicit Surface Slice SOP anywhere in your network to see a cross-section of the surface. Blue means inside, orange means outside. Turn on Show Normals or Show Velocity to check surface direction and motion.
Animate and add velocity ¶
You can keyframe any parameter, such as position, rotation, and size. If the surface is animated and you need velocity (for example, to push a fluid simulation), add an Implicit Surface Velocity SOP after your animated network. It computes both linear velocity (
v) and angular velocity (w) from changes in position, rotation, and shape parameters between frames.
Note
Without this node, velocity will silently read as 0 in solvers and VEX. If motion looks wrong in a simulation, check that this node is present.
Fix non-uniform scaling ¶
Implicit surfaces do not fully support non-uniform scaling. If you scale a shape unevenly using the Transform SOP, pass it through the
Implicit Surface Doctor SOP to repair the result. Turn on Fix Transforms to move the scale out of the shape’s transform and into its own parameters, and Rebuild Shapes to update the viewport preview.
For example, if you scale a torus unevenly in the XZ plane, the Doctor adjusts its major radius to match, while leaving the minor radius alone. However, it can only fix scaling that fits the shape’s own parameters. Other kinds of uneven scaling can’t be fixed this way, and the shape will still look wrong even after running it through the Doctor.
Use in VEX ¶
If you want to use an implicit surface inside a Point Wrangle, you can ask it questions about any point in space. For example, whether a point is inside or outside the surface, how far it is from the surface, or which direction the surface is in.
To do this, wire the implicit surface geometry into the second input of the wrangle and call the implicitsurface function. This gives you three pieces of information:
-
The signed distance - a negative number means the point is inside the surface, positive means outside. Zero means exactly on the surface.
-
The gradient - a direction vector pointing toward the nearest point on the surface. Useful for pushing points out to the surface boundary.
-
The shape ID - which shape in the network is closest to this point. This is helpful when you have multiple shapes merged together and want to treat them differently.
If your implicit surface is animated and you added an Implicit Surface Velocity SOP, you can also call implicitsurfacevel to get the velocity of the surface at any point.
Note
These values are stored as point attributes on the implicit surface, visible in the Geometry Spreadsheet. Read them using the implicitsurface function rather than accessing the attributes directly, since the way they're stored can change between Houdini versions.
Convert when needed ¶
Use Implicit Surface Convert to convert to a VDB or polygon mesh only when a downstream node requires it. Set Voxel Size to control the resolution. Avoid converting until you need to. Keeping shapes as implicit surfaces for as long as possible preserves their memory and quality advantages.
Additional utility nodes include:
-
Implicit Surface Evaluate transfers surface data or velocity into an existing VDB
-
VDB Implicit Clip SDF clips a VDB using an implicit surface shape
-
VDB Activate activates voxels in a VDB using an implicit surface as the reference region.
Some solvers can use implicit surfaces directly, without converting them first. So staying implicit as long as possible doesn’t just save memory. It can also skip the conversion step entirely.