RED DAWN – Final Major Project

The narrative centers around a once-dominant superpower nation, re-emerging on the global stage with an ambitious and aggressive agenda. Fueled by a desire to reclaim its former glory, this nation embarks on a campaign to conquer Europe, sending shockwaves across the continent.

As tensions rise, the stakes grow even higher with the involvement of a controversial militant group, whose allegiance amplifies the nation’s reach and strength. The threat looms large, with the United Kingdom in its crosshairs, facing the possibility of invasion—a chilling reminder of the delicate balance of power in an ever-changing geopolitical landscape.

This short film dives into the midst of an ongoing battle, showcasing intense air, naval, and land combat. The invading forces bring a unique edge with fictional technologies, such as a bullet-stopping barrier, which the defending side lacks.

The contrast in capabilities highlights the struggle of the defenders as they face overwhelming odds. Blending traditional warfare with imaginative tech, the film offers a concise yet impactful look at a high-stakes conflict.

Minghan and I began the process by shooting footage in the LCC green screen room, as well as on various outdoor locations around the city. These scenes were designed to depict a soldier entering a building, where he confronts NATO forces. In a pivotal moment, the soldier activates an invisible barrier—a futuristic technology developed by the Soviets—to shield himself.

Before this, Minghan had also captured forest scenes that add depth and context to the story. The mix of green screen and on-location shooting allowed us to blend realism with the film’s imaginative elements, setting the stage for an engaging visual narrative.

Since this project is a group effort, we made sure communication was seamless and consistent. To keep everything on track, we used Microsoft Teams for discussions and updates. It’s been great for staying in sync, especially when coordinating tasks and sharing ideas.

For file management, I set up a shared network folder where both Minghan and I could upload my progress daily. This setup not only kept us organized but also allowed us to access the files from anywhere, making collaboration much smoother. It’s a simple system, but it’s made a big difference in keeping our workflow efficient and on point.

We also made use of planing board called miro to gather references and setting up schedules.

In the story, the invading army has developed a shield that can block bullets—a piece of tech that changes the game. When designing its look, I wanted to go beyond the usual “high-tech” vibe. Instead, I leaned into a magical, almost otherworldly feel for the shield.

This choice felt right for the story. It highlights the shield as something extraordinary, making it not just advanced but mysterious and captivating to watch. It’s a small detail, but it adds a lot to the overall mood of the film.

To create the shield FX, I primarily worked in Houdini for the effects and used Nuke for compositing. My approach was heavily influenced by a course I had previously taken “Rebelway’s Mastering the Art of Magical FX”.

That course was a game-changer for me. It gave me a solid foundation in understanding solvers, interactions, and techniques, which have been incredibly valuable for this project. From designing intricate effects to refining the way they interact within the scene, the skills I picked up have helped bring this magical shield to life.

I started with a backplate of the camera footage, animating a rough 3D rotomation model inside Maya and finally exported as fbx into houdini. This helped estimate the shield’s position and served as a 3D holdout for seamless rendering later.

Below Image is my shield FX setup which I will be explaining further.

To start, I created a base sphere shape and attached it to the character so it would move with them. Next, I added an animated point-spawning system. Using expressions, I ensured the particles spawned along a single axis, representing the bullet impact points. By duplicating these points and connecting them with lines, I was able to create the illusion of bullet streaks in motion.

To make the bullets feel more natural, I added a noise pattern to the streaks. This gave the effect a slightly uneven, chaotic motion, mimicking how bullet paths appear in real-world footage captured on camera.

From there, I created an interaction effect to enhance the realism and sell the shot. Using the same points, I generated a source for a pyro solver and ran a smoke simulation not for rendering, but to use the velocity data underneath. This velocity was then used to drive and advect the particle system I set up, this approach will give us and fluidy effect which will suit the concept.

Using the POP solver, I devised a method to ensure particles flying away from the sphere adhered to its surface, maintaining a solid sphere shape. This technique allowed me to control the particle flow and stick them dynamically to the shield structure.

To add more depth, I created three separate layers of particles. Each layer had varying behaviors—some moved inward toward the sphere, while others moved outward. By tweaking these values, I introduced complexity and texture to the shield’s overall appearance.

For even more efficiency, I replicated this approach in the post-simulation stage, generating two additional layers from the same simulation. This allowed me to expand the visual detail of the shield without requiring extra simulations, making the process both time-effective and resource-efficient. The result was a shield that felt intricate and alive, with a rich, layered look that enhanced the effect. Made use of various attributes like age and life to color the particles.

After finishing the particle layers, I worked on creating a solid outline for the shield. This outline highlights the shield as a physical barrier when it’s hit, showing how it breaks projectiles into particles.

To do this, I used a solid sphere and transferred colors from one of the particle simulations (based on particle age) onto the geometry. This gave the shield a dynamic impact effect, making the hits more visually striking.

I also created two extra layers from the same geometry. By applying a noise-based texture, I made them look like an electric field when rendered. These layers were rendered as separate AOVs, allowing for easy adjustments in compositing and adding extra detail to the final effect.

The compositing process is one of my favorite parts because it’s where all the FX layers come together, and I can refine the look to match my vision. In fact, I achieved about 50% of the final visual impact during this stage.

I began with the green screen workflow, using Gonzalo’s method for keying. This approach worked really well for me. The process started with denoising the plate, then separating it into three types of mattes:

  1. Core Matte: A high-contrast alpha for the central, solid areas.
  2. Base Matte: Similar to the core matte but with softer edges for smoother transitions.
  3. Hair Matte: Specifically for capturing fine details like small edge elements (e.g., hair, fabric threads).

After creating these mattes, I adjusted the alpha edges using blur, erode, and grade nodes to ensure a clean and seamless integration of the keyed elements with the FX layers. This step was crucial in achieving a polished and professional look for the shot.

After achieving a clean alpha of the subject, the next challenge was addressing the green spill caused by the large green screen environment. This spill often reflects onto the subject’s surface, creating an unnatural green tint that needed to be removed.

To fix this, I used a despill process. This involves isolating the green spill from the subject and then reintroducing it as luminance. This method effectively removes the green tint while maintaining the overall brightness and natural look of the image.

Since the camera angle was simple, this step was relatively straightforward and quick to resolve. By cleaning up the spill, the subject integrated much better with the rest of the scene, ensuring a more polished final composite.

With the green screen and spill correction complete, the next step was integrating the background into the scene. The background was created by Minghan, who provided a Z-depth pass. This pass was incredibly useful for adding depth and atmosphere to the shot.

Using the Z-depth pass, I applied defocus to the background based on distance, creating a natural depth of field effect. Objects farther away appeared softer, while closer elements remained sharper, enhancing the realism.

Additionally, I used the same Z-depth pass to generate a subtle fake fog effect. The fog was thicker in the distance and lighter in the foreground, adding atmosphere and blending the background seamlessly with the scene. These adjustments made the composition feel more cohesive and visually engaging.

To seamlessly blend the keyed subject with the background, I used Nuke’s light wrap feature. It diffuses the brightest areas of the background into the subject’s alpha edges, making the lighting appear more natural and cohesive. This subtle touch added realism to the scene.

I started compositing the FX by working on the first particle layer. Using a luma keyer, I extracted the brightest parts of the image and enhanced them with hue adjustments, glow, and reduced opacity to blend well with additional particle layers. This created the first look for the particles.

I reused the luma key output as a mask for the solid shell render from Houdini, making it appear as a physical barrier whenever the shield is hit. I tweaked it further to integrate it seamlessly into the scene. Similar compositing steps, with slight variations, were applied to build the layered look of the shield.

Once the shield effects were done, I composited the projectiles with same techniques and focused on interactions with the character and environment. Using the depth pass and light wrap, I simulated light from the FX interacting with the floors and pillars. For the character, I used their alpha to drive the light wrap, creating the effect of the FX subtly illuminating the character’s silhouette.

Finally, I added an animated camera shake to amplify the impact of the scene, making the whole composition feel more dynamic and immersive.

Working on the shield effects was a great learning experience. One key takeaway was understanding the importance of 3D holdouts. I initially ran into issues during compositing because the silhouettes of the plate character and the CG character didn’t align perfectly, leading to noticeable cutouts in the render. Resolving this taught me a lot about refining integration techniques.

Looking back, I feel the shield’s shape could have been more unique, it ended up being a bit too common. I initially planned to make the bullets stop dramatically on impact, inspired by the Matrix, but I couldn’t find an effective way to implement it. Despite these challenges, the process helped me grow and identify areas to improve for future projects.

The idea here is to create a Naval battle sequence in which we show a fleet of ships is sea, this ship is equiped with the invisible barrier technology and when the NATO ship attacks it, the icoming projectile are blocked by these shield.

For this set of sequence which happens at sea I’m primarly going to be using UnrealEngine for the creation of the environment, set and cinematics and using Houdini as a supporting element.

For the Naval battle sequence for the project I initially tried to create a environment with Houdini, but eventually realised it’s much more time consuming to achieve since I have a short time when I started to do. So I opted to make the Ocean environment in unreal engine instead where I will be doing the environment and battle ship animation, and for the battleship firing I will be using Houdini for simulations

For the naval battle sequence, I used Unreal Engine to design an ocean environment and set the stage with ships, jets, and dynamic camera animations. Here’s a breakdown of the process:

Crafting the Ocean Environment

Using Unreal Engine’s native ocean tools, I crafted a realistic ocean by fine-tuning wave patterns, reflections, and materials to achieve a visually appealing foundation for the sequence. To enhance the atmosphere, I incorporated a skylight and a light source for the sun, adding natural illumination. Depth and mood were achieved with atmospheric fog, volumetric clouds, and a post-processing volume to refine the scene further. The post-processing setup added effects like depth of field, lens dirt, and flares, tying everything together for a polished, cinematic look.

Set Building

Next, I began populating the scene by placing ships and jets strategically to tell the story. Once the assets were in position.

Designing the First Shot

For the first shot, I created a satellite-style top-down view of the ocean, zooming in to reveal the naval ships. The camera then transitions to focus on a distant jet. While this scene was relatively simple, I wanted the clouds to feel more realistic than what Unreal’s tools could offer.

To achieve this, I rendered the cloud layer in Houdini. Using noise patterns and volume manipulation, I crafted a detailed cloudscape. I exported the Unreal camera as an FBX, imported it into Houdini, resized it to the proper unit scale, and rendered the clouds using Solaris. The final step was compositing the layers for a seamless blend.

Creating the Second Shot

The second shot drew inspiration from a sequence in Battlefield, where a jet takes off from a ship, escorted by another jet. I started by setting up the sequence in Unreal Engine and adding the necessary assets, including ships and jets.

I animated the ship with a simple transform to simulate forward motion. For the jets, I created a spline path for smooth, natural movement and animated both jets along the path to sync their motions. To make the scene more cinematic, I adjusted the sun direction for a warm, golden hour feel. The lighting added drama and enhanced the overall mood.

The camera was attached to the cockpit of one of the jets. This allowed it to move naturally with the jet’s animation, without needing extra keyframes. To give the scene a more dynamic, lifelike feel, I added natural camera shake using an additive transform layer.

Creating the rest sequence

I applied similar techniques for the rest of the naval shots to maintain visual consistency and a cohesive atmosphere throughout the sequence. For the FX elements, like the missile effects, I utilized Unreal Engine’s Niagara particle system. I controlled the particle system’s lifespan using attributes, ensuring precise timing for the missile’s trajectory and explosion.

Additionally, I adjusted attributes such as particle scale and flame properties to achieve a realistic and dynamic missile trail. For the ship firing scene, I used a similar particle system to create the cannon fire effect, tweaking the settings to match the energy and intensity of the shot. These elements added a layer of realism and excitement, enhancing the cinematic impact of the naval battle sequence.

To animate the camera for the naval sequence, I used my Xbox controller to create smooth, cinematic motions. This was made possible through Unreal Engine’s Take Recorder feature. By starting the recording, I could navigate through the scene with the controller, and my movements were captured as a take in real time.

While this approach allowed for a natural feel, the recorded motion wasn’t perfect. To refine it, I used the graph editor to clean up the animation. By applying filters and deleting excessive or unnecessary keyframes, I smoothed out the movements, creating a polished and fluid camera animation that enhanced the cinematic quality of the sequence.

Creating the naval battle sequence was a great learning experience. I gained valuable insights into using Unreal Engine’s Sequencer, Niagara particle system, and node-based workflows for FX. Initially, I planned to create elements like the ocean, explosions, and firing effects in Houdini. However, I quickly realized that simulating an ocean in Houdini is computationally intensive and time-consuming, especially with tight deadlines and rendering constraints. This led me to rely on Unreal Engine for these elements, which proved to be a faster and more efficient solution.

One feature I wished to include was the white water trails that ships leave in their wake, as well as a shield effect for the ships. Unfortunately, due to limited time before the project deadline, I couldn’t implement these. Despite these constraints, the process taught me how to balance creativity and practicality in project execution.

For this shot, my goal was to showcase the sheer power of a Russian T-90 tank as it aims and fires. To emphasize the impact, I wanted to create a shockwave effect that kicks up dust from the tank’s body and forces the surrounding grass to move with intensity when the tank fires.

I planned to create all the FX elements in Houdini, focusing on:

  • Env: Creating a basic landscape.
  • Tank Fire: The primary blast effect that highlights the firing moment.
  • Smoke: A dynamic smoke trail that follows the tank fire, adding realism.
  • Surface Dust: A cloud of dust kicked up by the shockwave emanating from the tank.
  • Grass Movement: A subtle yet forceful interaction, where the grass responds naturally to the shockwave.

To begin, I animated the tank model, which I had downloaded from Sketchfab. Since the model wasn’t rigged, I had to manually prepare it for animation. Using Houdini, I separated the tank’s key components—such as the turret, barrel, and tracks—and grouped them together for easy manipulation.

I achieved this using the Blast SOP to isolate the necessary parts and the Transform SOP to animate their movements individually. This setup allowed me to control the tank’s aiming, firing, and general motion with precision, laying the groundwork for the FX to come.

For the tank shot, I created the environment using Houdini’s specialized tools for landscape generation. By leveraging Heightfields, I was able to build a realistic terrain base. Adding procedural noise patterns allowed me to shape the terrain with natural-looking variations, such as hills and uneven ground.

This approach gave me a simple yet effective landscape, perfectly suited for the tank sequence, providing a grounded setting for the FX and animation to blend seamlessly.

FIre FX

For the tank fire effect, I aimed to replicate a muzzle flash, inspired by a YouTube reference. Here’s how I approached it in Houdini

I created a line with three points, positioning the middle point slightly ahead to form a triangular shape resembling a muzzle flash. Using the Pyro Burst Source, I generated the attributes needed for the fire simulation.

To introduce natural breakups, I applied noise to the density attribute. For directional force, I scaled the velocity by multiplying it with specific factors, creating a dynamic explosion.

Since real tank fire lasts about 2 frames, simulating at this speed was challenging due to Houdini’s minimum timescale of 1. I simulated at normal speed for better control, resulting in slow motion, and later used the Retime node to speed up the effect, matching the real-life timing.

Creating the Smoke FX

For the smoke, I applied the same techniques as the fire FX. However, I adjusted the attributes to make the smoke appear slower and more dispersed compared to the fast, intense fire burst.

Using the Pyro Burst Source, I modified the velocity and density to reduce the speed and create a more gradual, billowing effect. This slower motion added a realistic contrast to the quick burst of the tank fire, enhancing the overall impact of the shot.

Creating the Tank’s Surface Dust Blow

For the tank’s surface dust, I focused on creating dust kicking up from the top part of the tank’s geometry. I began by making a mask attribute that covered only the areas at the desired angle, then clipped it to remove unwanted sections.

Using this mask, I created a scatter that generated points only in the targeted region. I then applied the Pyro Solver Initialization nodes to generate the necessary attributes for the dust and smoke simulation. To make the dust react to the tank’s firing, I added a backward velocity force to the points, ensuring that when the pyro simulation ran, the smoke and dust would be kicked back by the force of the blast, enhancing the realism of the effect.

Creating the Grass FX for the Tank Shot

To simulate the grass reacting to the tank’s shockwave, I divided the effect into three parts: near, mid, and far patches.

Optimizing the Scene:
I started by extracting only the visible portions of the landscape geometry using camera culling. This optimization reduced simulation time and improved scene performance.

Grass Geometry Creation:
For the grass, I scattered points across the extracted geometry and attached lines to each point. Using attributes, I shaped the grass, controlling its thickness with a pscale attribute and a ramp. This ensured the bottom of the grass was thicker while the top remained thin—important for rendering splines as realistic grass strands.

Simulation Setup:

  • Near Grass: Simulated using a Vellum Solver for realistic, dynamic motion.
  • Mid and Far Grass: To save resources, I applied noise in an Attribute VOP to create procedural movement that mimicked the wind effect.

By balancing simulation and procedural techniques, I created a convincing grass effect that responded dynamically to the tank’s shockwave, while keeping the scene optimized for performance.

To render all the scenes and FX layers, I utilized the Deadline Render Farm available at the university. This allowed me to efficiently process the complex simulations and multiple layers, ensuring high-quality outputs for each element of the project. Using the render farm not only saved time but also ensured the rendering was optimized and manageable for the final compositing stage.

Throughout this part of the project, I faced challenges that taught me valuable lessons. Simulating the near grass with the Vellum Solver was difficult, making me realize the importance of optimizing the scene with techniques like camera culling. Animating the tank was also tricky since it wasn’t rigged. Manually separating and animating the geometry caused artifacts like random texture flickering during rendering, showing me the value of using a proper rig for animation and rendering. These obstacles helped me refine my workflow and approach to complex scenes.