Level Set Morph


You can morph between polygonal objects. It's not easy because you have to have the same point and poly count, and those points and polygons need to be in the same order; it's a tough job. Now, we have given LightWave the power to do the same using OpenVDB, and as you can see from the rotating teapot/bunny, the results can be very impressive.

You will need to freeze subpatched objects as they are not seen by OpenVDB


In the scene, have two polygonal objects and a null. The point and polygon counts don't have to match, or even be close. In the example above, we are going from the Utah teapot with 1,506 polygons, to the Stanford bunny object with roughly 70,000. Use the Object Replacement > OpenVDB Evaluator entry to convert the two objects to OpenVDB (make sure that their Voxel Size fields match) Level Sets. Pipe the Grid outputs from these nodes into the new Level Set Morph node and from that into the destination Grid node.


Morphing between objects involves the nodes we've already outlined. Morphing from one surface into another requires the two surfaces be changed as well. To do so, in the Surface Editor, pick your morphing null and edit its surface. Double click on the surface name to open the node editor and add:

  • Material Tools > Material Mixer
  • The surface for one object
  • The surface for the other object
  • Info > Time

The above node tree will synchronize your surface morphing at the same time as the geometry


The first four controls are graded in terms of rapidity and quality. Change up from the first only if it is posing you problems with how the Morph is playing out.

  • Normalizing Steps - After morphing the signed distance field, it will often no longer contain valid distances.  A number of renormalization passes can be performed to convert it back into a proper signed distance field
  • Speed - A scalar to determine how fast your morph occurs
  • Invert Alpha Mask - If you have hooked up a grid as an alpha mask, this option allows you to reverse what is alpha'ed out