Authorities had located the cults base in the sewers beneath the city. But as the hero agent is moving in to finally put an end to the foul cultists they had performed one last ritual. In a final act of vengeance the cult members had summoned an immense demon to destroy their hated foe and wreak havoc in the world.
Update - 21 Jan 2021
SmokeAfter the stairs and the dust are cached, they are brought for smoke source generation. The geometries are imported along with their proxy collision.
The smoke source is generated from two streams:
The first is generated from the fast-moving pieces within a defined threshold from the stairs destruction geometry.
Imagining that the Hydralisk would have some residual dust on it when emerging from the ground, I thought about adding smoke that follows the Hydralisk's moves. The base idea was to emit from the monster geometry, but the result ending in too much smoke to handle for my computer.
Knowing that the cached sequence could be huge at the end (400-500 frames multiplied by ~ 5-150Mo/files), I had to find a way to keep the files small enough (without losing too much data).
The Hydralisk's part of the dust simulation is used as a second source. The dust falling from the creature matches its moves and adds more realism to the falling dust. It also reduced the amount of smoke in the sim, impacting the cache size.
Color has its own field created to be pushed by the velocity field. Noise is applied to the source color to get even more variance.
Having the color field advected played a huge role in the look of the smoke. The blend of the different-colored smoke sources (brown for the soil and grey for the cement of the stairs) adds further textural details on the smoke density.
Thanks to Houdini Sparse Pyro Solver, setting up the smoke simulation was unbelievably straightforward.
- Voxel Size: 0.06
- Dissipation: 0.15
- Disturbance: 3 layers of noises with different block sizes and strengths.
- Turbulence: 0.1
Sim time: ~ 2 hours for 200 frames / 5Gb cache size.
The computed volumes are then converted into 16-bits float VDB. Velocity (vel.x/y/z) and color (Cd.x/y/z) are merged into a single VDB field. This compression step helped to reduce by half the size of the cache.
Flipbook and cacheTo avoid choosing between waiting for the cache to be completed or make a quick flipbook then write the cache, a quick setup helped to do both without rely on Houdini's PDG. With this, the flipbook is generated at the same time that the cache is written.
Houdini cooks downstream. Based on that, the sim data are split into two streams: one for the caching and another one for the flipbook.
In the caching stream, after writing the files, the stream is emptied.
The two streams are then merged (one from the simulation, another empty), outputting the sim result in the viewport (as if the display flag was on the sim node).
To cook the merge node, Houdini needs to compute the two flows upstream. Thereby, Houdini writes the cache files and output to the flipbook at the same time.
This helped me save a lot of time, knowing that even if the flipbook was canceled, I could not only access the entire cache on disk, instead of just the last frame saved in the memory but also estimate the cache size before saving the entire simulation. I will pack this setup into an HDA to use for further simulations.
Update - 14 Jan 2021
PillarsThe pillars are passed through the same setup as the stairs for the destruction and dust generation.
However, the stairs and the pillars are simulated separately to be able to adjust the settings depending on which part is destroyed ( e.g.: the pillars have different properties (density, friction, bounce) than the material of the stairs).
Also, it avoids re-sim all elements just for one part of it.
Note: shield design is currently in dev, so I will re-cache with proper collision.
Lo: DOP Substeps: 3 / RBD Solver Substeps: 80 / Constraints Iterations: 300 > 1h25m
Hi: DOP Substeps: 1 / RBD Solver Substeps: 10 / Constraints Iterations: 10 >21m
Update - 10 Jan 2021
DustThe dust is generated from two sources: the stairs and the Hydralisk.
For the stairs, point emission sources of the debris are generated from the separating fractured pieces.
As to the Hydra, the point source is generated by transferring color from the stairs to the monster. With a fade the color slowly disappear, avoiding having dust falling continuously.
Points are scattered on the concerned surface.
Update - 10 Jan 2021
Stairs destructionThe stairs destruction was very challenging. Since this is the entry of the Hydralisk, the destruction has to be huge and detailed enough to put the emphasis on the monster's strength without destroying all elements around him to keep space for the rest of the action.
As touched on earlier, the destruction setup has to be simple enough for me to iterate fast and caches have to be light enough to be able to load and merge all elements later since it's a huge scale.
My approach was to start from a low-res RBD simulation to drive the hi-res sim (as shown in the pre-production). Using the computed destruction area, I was able to fracture only the active pieces, avoiding fracturing pieces that will not be destroyed. To add details, there is also a fractured ground layer under the stairs.
The constraints are a mix of glue and soft constraints. The glue (intracluster) keeps the cluster together while the soft constraints (cluster to cluster) allows the geometry to bend before breaking.
Update - 10 Jan 2021
ChainsIn the story, the Hydralisk escapes from the catacombs under the temple.
To illustrate that, I added chains to the beast's arms. Adding this kind of detail can quickly become fancy work since the challenge focus on the FX.
However, I think it would help understand the context of the conflict between the two characters. Also, the chains are simulated, adding emphasis on the monster's moves.
To avoid spending too much time on this "bonus", I choose Houdini's Vellum cloth to simulate the chains hanging. This is basically a line with points on which the link's geo will be instanced. Note that the ending link of each chain is broken.
Update - 27 Dec 2020
ScalePrior to the temple construction, the first step was to establish the right scale of the characters. The environment and the FX depends on it.
As a reference, the cyborg is at human scale (approx. 1.8m tall). Proportionally, the Hydralisk is ~16 m tall.
With these informations, I could build the temple.
ConstructionMy reference for the temple was "The Ark" by Bart Tchorzewski. At this step, to avoid having objects being awkwardly placed in the space, I started thinking about how the monster moves in the space to build interesting parts which the monster would interact with. The layout also has to emphasize the size of the Hydralisk, this will help a better reading of the scene. The temple was made procedurally in Houdini to be able to quickly adjust the different parts to fit the action.
Damage AreaHaving now the base environment and the characters, the collision areas can be computed. This helps visualize the size and the position of th areas that will be processed for destruction.
Update - 18 Dec 2020
ResearchBefore beginning the project, I wanted to verify if I could make a soil destruction.
The setup has to be sufficiently light to be handled by my computer knowing it will be used in a big scale scene.