I have forever loved watching war and history-related movies. To me, it presents a slice of life of the past, and a lesson for the future. A big part of these movies are CGI dependent, and Effects play a huge role in telling the story and selling the realism. After taking the WaterFx class from Rebelway, which I learnt a lot, I want to apply the knowledge and recreate a shot I saw from the movie Dunkirk and make it to have a vibe of another shot from the movie Unbroken. Here is reference for simulation.

I collaborated with 2 friends, one is an animator and the other a lighting/look dev artist. The project lasted approximately 5 months, with 2.5 months for modeling, layout, animation, texturing, and the rest for FX, lighting, rendering, and compositing. I also made a detailed plan/schedule and Gantt charts to keep track of my progress. 

Of course, to view a elaborate step-by-step progress, visit my Blog.

Set up

From the schedule, the plan was to do fluid - whitewater - smoke. I imported the alembic of the aircraft animation, which was done by my friend Thinh Nguyen, into Houdini, and used it as the collider for my fluid simulation.

To keep things in order, I made separate buckets for different simulations and organized them to flow downward. Wherever possible, I made an obj level “Control” node and link important settings so I can easily change them out when I need. Here are what they look like in the end.

Fluid Simulation & Meshing

I set up the fluid sim as a wave tank with narrowband turned on, and an import bucket to import and preview the fluid sim results. I also added additional global drag, popdrag based on a mask, speed limit to the sim to match ocean water.

Afterward, I completed a bunch of different wedges to find out the best possible setting for the sim. I simulated at half resolution first, then a full resolution. Of course, I made necessary tweaks as I went.

Password: fluid_pass5

After having completed the simulation, I turned the fluid sim from its three fields into vdb from particle fluid and then polygon meshing, at the same time preserving its velocity and vorticity attribute. I also extended the simulation domain edge so it's easier to visualize the infinite ocean of the scene.

Password: fluid_meshing

Whitewater Simulation

I used result of the fluid same, specifically surface and velocity fields, to generate whitewater source. Similar to setting up the fluid simulation, I set up a dopnet and import bucket for the whitewater. 

Additional elements were also included, such as wind force, drag, pbfstiffness, speed limit to control the behavior better.

I finished multiple wedges to understand how different settings work then apply the right settings for the sim.

Smoke Trail Simulation

For the smoke trail, I cut up part of the airplane which I suppose to be where the fuel tank is, and used it as the source for pyro. To deal with the steppings that usually occur with these fast smoke sims, I introduced Velocity Blur in the Volume Rasterize Attributes node. It did help, but not enough, so thanks to my friend Felipe Amaya’s suggestion, I added a Time Blend and a Trail node in order to prolong the source and decrease the distance between each stepping of the source.

With a similar process to the previous sims, I experimented differnent settings with gas disturb, turbulence, dissipation, and gas wind. Funny though, initially I had the settings a bit too small for the scale of the simulation, so it didn’t affect anything at all. Later, I figured out by accident when randomly bumping a setting up a huge amount. With that, I managed to get the smoke trail to look more like a smoke trail, with noise and big and small details, at this point. 

Shader Setup & Texturing

Texturing the airplane was done by my friend, Tristan Nguyen. Shaders of the ocean and whitewater was made by me. The infinite ocean was made with ocean spectrum, then cached out and used to add displacement onto the shader at render time. I also added the displacement of the ocean to the fluid and whitewater sim cache. 

After finishing the simulations, or at least to have them look acceptable to move on, I also did some test renders and included them in a dailies video.

Password: dailies

Lighting & Rendering

With look development, I wanted the shot to have this shot from Unbroken, especially with the greenish, cold, eerie vibe.fsdf

Lighting done, I had to troubleshoot for rendering. SCAD’s renderfarm during usual quarters have a limit of 2 hour/frame, so anything too high-resolution will get the 2-hour-kill. Meanwhile, I had a 300-frames sequence and a total heavy memory of cache files, which I had already optimized caches as I went. So I separated different sims and just rendered layers, then I composited all of them back together in Nuke. 


In Nuke, I splitted the image sequences into separate AOVs (extra image planes), then graded and color corrected them before merging them back together. I also tried to add some edge blur and rotoscoping to create a smooth transtion/edge between the water and whitewater. 

The Results

Here’s the final results thus far. After having rendered and compiled a video file, I really appreciated that my friend Tri Nguyen did the audio and sound effects for my shot. I have also been consulting peers for feedback and I would have a newer version soon enough. But for now, drum rolls, please enjoy!