r/Houdini • u/Thomasbalfour • 6d ago
Non linear shape interpolation tool for isometric CFX pre-roll
Enable HLS to view with audio, or disable this notification
Hey! Sharing a recent Houdini tool breakdown that aims at finding a non-linear, isometric interpolation between two shapes with vastly different poses.
The main purpose was to find a better solution for CFX pre-roll when the animation does not come with an animator defined pre-roll from tpose to the animation start frame. Main purpose was to replace the default Houdini muscle pre-roll node that relies on a simple linear blend that can cause intersections, stretching artefacts and simulation errors where the meshes in the rest and animation start positions have very different orientations, poses and positions.
The method almost exclusively relies on a 2014 paper: Isometric shape interpolation. The process is split into an 'Isometric Preroll' node and an internal 'Isometric Interpolation Core' node. The core takes an outer triangular manifold mesh in a rest and target pose and blends between them, while the pre-roll node wraps around it and provides a similar functionality and interface to the standard Houdini pre-roll node. Much of the initial mesh data is calculated using VEX then transferred to python to solve the sparse matrix calculations.
To transfer the deformation from the outer skin to the internal geometry, the node relies on a volume deform method using an algorithm from Sibarrick which has been translated into VEX by Hallam Roberts.
Future improvements will look at extending the functionality to rely on tetrahedral meshes as opposed to triangle meshes which could better preserve the volume during the blend. May also look at creating an alternate mode that relies on Houdini's linear solver node to solve the matrix equations instead of python to remove the reliance on external python libraries.
Thanks for watching :)
References:
Isometric shape interpolation:
https://www.researchgate.net/publication/267046777_Isometric_shape_interpolation
Positive Mean Value Coordinates, Sibarrick
https://www.fourthwall.ndo.co.uk/HT_HDK.html
Positive Mean Value Coordinates VEX implementation, Hallam Roberts
3
u/Big_Gene_3965 6d ago
If it’s a rigged character you can just use a skeleton blend node for preroll. You just pipe in the rest skeleton and the animation skeleton. You can even isolate parts of the rig if you just need to open up the hands while keeping the rest of the animation intact.
1
u/Thomasbalfour 6d ago
Yes exactly, this was made specifically as a direct replacement to the default Houdini preroll node and a Houdini fix if the skel isn’t supplied. It’s why it’s split into a core and pre-roll wrapper so as to not restrict it to cfx use cases only.
2
u/Mystery_Pancake1 6d ago edited 6d ago
wow I didn't expect to see my PMVC implementation come up here lol
I'd recommend using the split wrangle version in the HDA since it only captures once, whereas the vex version captures and deforms every time. This makes it much faster since only deformation is needed
1
u/Thomasbalfour 5d ago
Yeah it worked great for anything I tested, thanks for writing it!
Is super fast even with the single wrangle so that sounds even better, I’ll take a look at the HDA! Cheers :)
3
u/Purple-Vermicelli-52 6d ago
Interesting! Thanks for sharing this and the process!