I created a stable algorithm in Houdini that uses a flat blade to progressively slice deeper into a moving (dynamic) soft body object over time, and continues to slice and dice these new objects!
Cutting is achieved by:
1) The blade is represented as a line. As the user animates the line in space (translation only while inside the object, no rotation yet), an "active cutting plane" is created from the cutting line's previous position to its current position every frame. Points near the previous position of the cutting line are soft restored to their own previous positions in order to continue the cut from where it left off.
2) The object is then divided into sections above, below, in front of, with, and behind the active plane. New surfaces are created for the regions above/with and below/with on the inside of the cut and are pushed away from the blade slightly. The regions behind are kept the same (usually the area previously cut as the blade moves deeper), and the regions in front are modified slightly to accommodate the new surfaces. These are all fused back to-gether, and any extra edges made by the cutting process (notably the ones between the split apart regions) are cleaned up.
3) The new surfaces are remeshed to produce good triangles for simulation, though constrained such that there are no new points around the edges of the new surfaces (so they are continuous with the rest of the mesh).
4) The soft body nature of the mesh in general is achieved using Houdini's wire solver. As new geometry is created by the slicing algorithm, new rest positions are calculated based on the existing geometry and are copied into the RestGeometry of the wire object. Bend and stretch elasticity as well as mass are updated when new chunks are formed, and are a mix of artistic desire as well as the area of the new chunk.
5) There are many small checks evaluating the mesh at each frame as well. These include
a) Ensuring that tangled points are consolidated (so as not to produce wild internal forces).
b) Ensuring that edges are not interpenetrating between chunks (and fixing them if they are)
c) Setting up the edges around the new crease in the geometry at the blade's edge to ensure that cut works smoothly.
d) Removing tiny chunks that might be creating from glancing blows to the knife. These look weird and tend to produce artifacts in simulation, though are not technically wrong from the algorithms perspective (for example, if using this technique for RBD simulation you would probably keep them...).
a) The goo on the ground is just particles being spawned where the chunks hit it, and then meshed (and flattened).
b) The rest positions can be leveraged for 3d texture-mapping, used here for some bump mapping on the new "inside" cut surfaces.
c) Finally the shading scatters refraction rays more with the original outside surface instead of the new inside surfaces (with specularity to match), and internal density is approximated with a uniform volume shader.
d) Also was able to render with Amazon's EC2 cloud, which is pretty cool!
e) Oh, and fake caustics too for the green splash.
That should about cover it I think...
Loading more stuff…
Hmm…it looks like things are taking a while to load. Try again?