When I was a kid, I became a fan of the Avatar The Last Airbender series because the power to control the elements is an amazing concept and its storytelling is probably one of the best I have experienced ever. More recently, I was inspired to create some "firebending" effects as a way to learn more Houdini (especially the new H18 sparse solver), apply what I have learnt so far, and also simply because it's cool.
The tool I have created so far has quite a few things going on behind the scenes, and explaining everything might take a while, but here's the gist of how it works:
Import Animated Biped and Static Biped (preferably the same Biped in T-Pose). Add points where you want the fire to emit from. Points will then get animated from Biped Animation (through the magic of Point Deform SOP). A sphere will then be copied on to the point position which will then be used to emit the fire(s).
And without further ado, let's get into the nitty gritty stuff.
1: Curve Generation
I have designed this whole setup/tool to involve 3 steps (basically 3 HDAs), The Curve Generation, Pyro Source Generation, and The Pyro Simulation. Let's start with Curve Generation. There are four inputs in the Curve Generation HDA, the Spawn Point, the Direction Point, Static, and Deform. The Spawn point is the position of where the fire would spawn from. The Direction Point, is the direction the fire should go. Static is the static biped animation and deform is the animated biped. If you are familiar with the Point Deform SOP this is the same thing (as it is used within the HDA). The Spawn and Direction Points as the "Mesh to Deform" input, the Static as the "Rest Point Lattice" input, and the Deform as the "Deformed Point Lattice" input. Knowing this, place the Spawn and Direction Points in reference to the static biped position. Before plugging in the points to the HDA, add an "initId" integer attribute for both spawn and direction points to differentiate if there were multiple spawn and direction points. Also add a "spawning" integer attribute with values of 1 or 0 to determine if the spawn point is active during a frame or not.
The video above illustrates the Point Deform part of the process. The Green Dot is the Direction Point and the Blue Dot is the Spawn Point.
The image above shows the curve generated based on the Direction and Spawn Point positions. When the points are active or "spawning" (based on the "spawning" integer attribute), it'll show its color on the curve (green or blue). These curves can then be edited (by manipulating the points) to the artist's preference.
2: Pyro Source Generation
In the Pyro Source Generation step, a sphere of scattered points is going to be animated along the spawn curve. The scale of the sphere will be determined by the velocity of the animation. The higher the Velocity, the bigger the scale.
The points will then be blurred between frames and points will be deleted based on the "spawning" attribute. Velocity attribute is also transferred to the points.
The points from the previous image will be used as point sources for a good old simple Particle Simulation.
3: Pyro Simulation
The Pyro Volumes (v, burn, temperature) will then be wired into a sparse Pyro Simulation. Nothing fancy in this simulation really. Most of the things like velocity was taken care of in the previous nodes, so mostly in this one is just refining the look of the fire with Shredding, Turbulence, Disturbance, and Dissipation parameters. The output volumes are then wired into the new Pyro Post-Process node.
I am new to making otls or hdas and if I knew a more efficient way of doing this, I would, but unfortunately, I am no Houdini Guru yet and am constantly learning about Houdini and still assembling and tweaking this tool as I go. If you have any questions or want to take a look at the asset itself and possibly give some advice, please feel free to contact me.
Thank you for witnessing me blabbering on about my tool. I hope you've enjoyed this tool breakdown thing and maybe learned something.