Rookie Awards 2024 - Open for Entries!
Graduation Project - Explosion
Share  

Graduation Project - Explosion

by tobiasipsen on 15 May 2023 for Rookie Awards 2023

This is the result of my 7-week graduation project.

4 780 1
Round of applause for our sponsors

Final Explosion

Breakdown

Overview of Production

The inspiration for my project came from my lifelong fascination with explosions. I've always been drawn to explosion scenes in movies.

Since I also have a passion for and work with visual effects on a daily basis, I wanted to learn more about how they are made in Houdini and challenged myself to recreate an explosion from The Last Of Us series.

The idea to make an explosion as my 7-week graduation project was motivated by two main reasons.

First, I wanted to show off my skills in creating movie-quality visual effects using Houdini. I knew that creating a realistic explosion would be a challenging task, and by doing so I could demonstrate my skills to my future employer.

Second, I was driven by my passion for explosions and my desire to learn more about them. Before starting this project, I had limited knowledge of how explosions were made, and I saw this as an opportunity to delve deeper into the subject. By researching and recreating an explosion, I was able to gain a better understanding of the physics and mechanics involved in making them.

Overall, my motivation for this project was driven by a combination of my passion for explosions, my desire to showcase my skills in visual effects, and my eagerness to learn more about this fascinating subject.

The challenge of creating a realistic and "art-directable" explosion lies in the technical complexity of the effect, as well as the need for the FX Artist to have control over the various aspects of the explosion based on feedback from the supervisor.

The explosion must move in a physically accurate way, taking into account factors such as forces, pressure, and debris. At the same time, it must be flexible and easy to change, allowing for creative freedom and iteration during the production process. In addition, the explosion must look visually appealing and convincing to the audience, which requires a keen eye for detail and artistic creativity.

During the initial stages, I spent time researching different types of explosions, and their physical properties, and studying Houdini's tools and functions to create them. Much of my learning was through online courses, my teacher, and my own knowledge of Houdini.

I also developed an HDA to enable easy and quick iteration of the explosion. With this tool, I could enter two values and choose how many additional values in between I wanted to see. My HDA would then create a new Houdini file so I could review the settings I had at the time if needed. It is very important to be able to go back in time and see which settings you have used. Afterward, my HDA would cache the explosion with the different values and generate a video contact sheet, as seen below, with all the values for easy comparison, helping me determine which values produced the desired result.

The next phase was refinement and optimization. I tweaked the explosion to be more visually appealing and artistically controllable and optimized it for faster render and cache times.

After completing the simulation and creating the secondary elements, the next step was to render the various elements in different layers and passes. By separating the different components of the explosion, I had better control over each element and could adjust them as needed to create a better final product. During the rendering process, I encountered some challenges such as slow render times such as 45 min per frame renders, and technical issues such as the geometry light not working. However, I overcame these challenges by optimizing my workflow and making workarounds.

Once rendering was complete, I moved on to compositing in NukeX, where I added the final necessary adjustments, such as color adjustment to match the overall tone of the scene and balance the various elements, and adding glow to highlight the energy and power of the explosion. Through compositing, I was able to create a final product that exceeded my initial expectations and truly showcased my skills in Houdini.

Houdini Workflow

Main Explosion

To create the explosion, I started by making a sphere with noise on it, which generated spikes that helped me visualize how fast and violent the explosion should be in the different areas. Then I scattered points on the geometry which I animated by multiplying a float value by velocity so I could determine the speed of the explosion.

Next, I trailed the points to create lines that I could convert to a volume. After making the lines I added some temperature, density, and velocity noise which gave the explosion more visual detail and made it less uniform. Once I was satisfied with the volume, I cached it. I did this because it will make my simulation faster since DOPS only has to read the file and not do calculations.

Inside DOPS I retrieved the volume and used my HDA to try a range of values for temperature, velocity, and divergence. My HDA allowed me to quickly iterate through different values so I could fine-tune the explosion without wasting too much time.

To create the explosion burst at the beginning, I animated the expansion (divergence) on the Pyro Solver and in the source, giving the explosion's first burst of energy.

Before adjusting the microsolvers with my HDA, I created a speed field by calculating the length of the velocity field. This allowed me to determine if the microsolvers only affected the fast or slow-moving regions of the explosion. I used the speed field as the Control Field on many of the microsolvers, including disturbance and turbulence.

When using the disturbance microsolver, I used my HDA to try a range of values on the Control Range. The Speed field I created earlier provided a value for all voxels so I could see what the fastest and slowest areas were. For example, if the velocity field's voxels have a velocity between 0-10, and we set the Control Range to min 5 and max 7 with a strength of 1, the microsolver will use a strength of 0 on voxels moving at speed 5 or lower, and a strength of 1 on voxels moving at speed 7 or higher.

My HDA made it easy to do many iterations on the explosion so I could quickly find the values I wanted. I repeated this process for all the other microsolvers, fine-tuning the explosion until it resembled the reference. Throughout the process, getting feedback from others was crucial. This involved getting feedback and suggestions from my colleagues from my apprenticeship, my classmates, and my teachers. The feedback from them helped me refine and improve my work at every stage and iteration.

To create an explosion with more visual quality, I made sure to include a lot of small shapes, fewer medium shapes, and few large shapes. This helped make the explosion look more dynamic and less uniform.

In addition, I created my own wind force because I wanted it to scale based on the density of the explosion. The built-in microsolver couldn't do it, so I had to make a tailor-made solution in a Gas VOP. I made sure that where the density was low the wind was stronger and where the density was high the wind was weaker.

Smoke Trials

To create the smoke trails I followed a similar process to the main explosion. First, I created a sphere and added some noise. I then scattered points and made clusters of these points, which were then run through a particle simulation. Then I trailed the points and converted them to a volume. In DOPS I imported the smoke trails and used the velocity from the main explosion as a pull operation. I did this to get them to be pulled up and into the main explosion. In addition, I added some turbulence and wind to increase the realism of my smoke trails.

RBD

To create RBD I followed a similar process as with the smoke trails. First I made a sphere and added noise to it. Then I used Voronoi Fracture to break the sphere into pieces. Then I added some velocity and then took the pieces into an RBD Bullet Solver.

Then I took half of the pieces and replaced them with wood board assets. To make sure the parts collided correctly, I ran them through another RBD Bullet Solver. To add some variety, I randomized the pscale of the pieces, giving me different sizes. This idea is the same as I used with the main explosion, where I aimed for many small pieces, fewer medium pieces, and only a few large ones.

RBD Fire

To create the fire on the RBD, I first broke the simulation into clusters to keep the simulation light and avoid overloading my PC. Next, I scattered points on the geometry and added temperature and burn attribute noise. Then I made a wedging setup to cache the different clusters.

To cache out different clusters of geometry, I combined clustering and TOPS wedging. I created clusters on the points and later used a blast node to remove all points except the points with the cluster attribute from the wedging TOPS node. The File Cache node created a folder for each wedge created by the wedging TOPS node. When the process is run, it takes the first value on the wedging TOPS node, goes through the caching process, then takes the next value and goes through the caching process again. It does this for all values. TOPS is multithreaded, so it runs on all CPU cores at the same time, resulting in caching of multiple values at the same time.

In order to have different lifetimes of the fire, I created a volume that encapsulates the entire flame, to then be able to import it into the simulation in order to be able to use it to change the Flame Lifespan value in the simulation. I did this by trailing the RBD chunks and looping over each primitive with a name attribute. This separated the parts so I could then use the bound node to ensure all flames were inside my sphere. Then I scattered points inside and on the surface and gave them a flameLifeMask attribute that was randomized for each RBD piece. Finally, I converted it to a volume. In DOPS I imported volume with SOP Scalar Field. To control the Flame Lifespan value on the Solver you have to go into the solver and find the flames_vex Gas Field VOP node, inside it there is a cool_multiplier node which I replaced with a bind flameLifeMask node that was entered into a divide node where I divided by 1. This was necessary because the cool multiplier is divided by 1 on the flames_vex Gas Field VOP node.

Sparks

First, I made two emitters: one that emits particles upwards along the main body, and another that emits particles to the left side. Then I gave the particles velocity and imported them into DOP where I added some velocity variation, turbulence, and drag and reduced the strength of gravity.

Conclusion

In conclusion, I can say that my graduation project is a success as I fulfilled my goals of creating a realistic and "art-directable" explosion in Houdini that can be integrated into a film production pipeline, demonstrating my skills in visual effects and learning more about the physics and mechanics involved in creating explosions.

Although I have made significant progress in my knowledge with this project, I still believe there is room for improvement in the end result. There are several areas where I feel further refinement would be beneficial, such as improving the fire from my RBDs and improving the ending of the simulation as well as the lighting.

It was essential for me to maintain a normal daily life, including adequate sleep, and without having to experience stress. This is necessary to be able to do when making effects for films and series, as deadlines are not moved, even if you are tired and behind. I wanted to deliver a high-quality product on time while still being able to maintain my daily habits of relaxing, refueling, walking, and exercising, which I succeeded in doing.

To begin with, the rendering time was unacceptably long, but by optimizing the process based on my own knowledge and getting help from a teacher, I managed to find a solution. By fine-tuning and optimizing the workflow and making workarounds, I was able to eliminate the problems that arose along the way.

My project is a good example of how passion for a subject can be a strong motivation to learn and develop new skills in a field while creating a satisfying end product.


Comments (1)