Title: Snow Train
Modeled: Semi-Procedural Houdini
A project with the intention of designing a system in order to replicate a real-life reference as closely as possible.
As of September 13, 2020 (9/13/20) this project is a work in progress. All the work shown so far is not an accurate depiction of the final results until stated otherwise.
The snow the train first comes into contact with instantly breaks apart into a fine powder. Which is then thrown into the air and swirls along the air currents.
As the force from the initial impact is transferred along, the snow chunks begin to break apart prior to contact.
Which in turn gets thrown into the air and becomes powder.
Larger clumps of wet compacted snow are thrown into the air but do not immediately fall apart. Instead, they break into smaller pieces and slowly disintegrate along the outer and trailing edges of the clumps.
Problem: The designed system needs to be able to take animated collision geometry and accurately handle the interpolation/transfer of force to sim objects.
Option 1: Rigid Body Dynamic (RBD) Simulation. Handles collisions rapidly and fairly accurately, depending on setup. However, RBD is limited to only previously fractured geo and only solves for the convex hull of objects, not individual points.
Option 2: POP Grain Solution. Solves collisions on a per-particle basis based on Pscale. Drawbacks include an older and less efficient system.
Option 3: Vellum Grain. Similar to POP grain in concept, but runs on a much faster algorithm and can handle a much larger quantity of particles. It also includes features of constraint control for clumping. However, for such a large region needed, sim times would grow exponentially with desired detail.
Chosen Solution: Use RBD simulation to solve the larger chunk/clumping region. Feed-in animation from RBD and use as sourcing for Vellum grain solver to handle smaller particles clumps only in the desired area. Therefore, increasing the overall solver efficiency.
RBD constraint creation. The packed geo is unpacked to allow constraint connections. Three main constraints are made.
Glue_Fixed: Used to freeze geometry until needed.
Pin: Allows geometry to bend prior to fully breaking.
Glue_Cluster: Focused upon smaller volume piece to create small random clumps.
The selected source is passed to a configure vellum grain node. Each frame the animated geo calculates it's centroid and is then transferred to the newly created grains. The particles are culled based on the camera and Y position to optimize the scene. Afterwards a new vel is created based on noise and the centroid, which is then added back onto the original vel.
Grain Source Constraints
Create constraints from clusters (class). Next the name attribute is transferred to the create primitives. Any primitives that have two conflicting names/classes are removed and then grouped.
The grain points generate an attraction weight based on AA noise. Finally the points are set as active and combined with constraints.
Problem: The larger pieces and area close to the train need to generate a large amount of material to fill and interact with the air of the scene.
Option 1: Particle Operator (POP) Simulation. Capable of generating millions of individual particles, each can be affected by forces such as wind, gravity, and custom fields. Also extremely efficient to solve. The drawback is the number of particles needed to generate the desired effect is beyond substantial (initial guess exceeds 70 million).
Option 2: Pyro Simulation. Solved as a fluid and voxels instead of individual particles. When rendered as a volume can cover much larger areas requiring far lower resolutions. Also received a massive update to include sparse solution in Houdini 18. Drawbacks include simulation times are slower due to being three-dimensional instead of points, also less control is available over certain aspects of the simulation.
Chosen Solution: Create Sparse Pyro source based on RBD and Vellum Grain results. Results will provide better outcome and more control in the final composite than attempting large particle simulation.
Timeshift RBD to frame 1 and transfer the used group plus the trigger time from animated sim. Scatter points onto this frozen geo and create ID. Move the points based on name from SIM. Blast the points based on velocity and the dot product between the velocity and normal.
Get and add points from grain sim to newly created points.
Trail by length of one. Create primitives based on id (Add node). Resample resolution. Create uv along spline. Use spline to create ramp along length. Convert particles to vdb and back into polygon.
Use new sparce pyro (pyro source) method. Transfer back vel to points. Add noise to vel. Refine density by ramp and area. Finally volume rasterize attributes.
Problem: Due to the choice of using sparse pyro to generate the larger mass of airborne snow when rendered the volume will not have the fine specular reflection gained from particle (point) rendering.
Chosen Solution: Create a POP simulation to generate airborne particles that are driven by pyro simulation. When rendered and layered together final result will be visually more appealing.