Category: 3.1 Final Major Project
Blog 10 : Post Production
As I approached the end of production, I realised that the stepwell environment looked a bit too clean and pristine, which didn’t fit the tone of the film. This pushed me to revisit the environment before moving on to final lighting, sound, colour grading, and eventually the title and graphics.
Damage

Because everything inside Unreal was already properly organised, replacing meshes was simple, I could update models without disturbing the existing layout or camera work.
I went back into Blender and created a geometry nodes setup that allowed me to generate controllable damage effects on the architecture. For general meshes, I added parameters to control both the amount of damage and the scale of the noise driving the broken surfaces.
For the steps of the well, I expanded the setup with an array node that let me adjust the number of steps and the curve length. This helped me recreate the full structure procedurally while adding believable wear and tear. I also converted the mesh into a two-slot material, giving me control over material blending inside Unreal Engine for further refinement.
Music and Sound Effects
Sound design was another tool for storytelling in this film. I began by gathering a library of sound effects, rain, factory ambience, water dripping, motorbike hum, footsteps, and drinking sounds, and layered them according to the visuals.
Even with these sounds in place, the film still felt flat in certain moments, so I decided to add music as well. This was new territory for me, as I’d never worked on music production before. I tried searching for a single background track, but nothing matched the shifting tone of the film.
I experimented with several AI tools for music generation and sound design, but the results were either too distorted or sounded unnatural within the scene.


Eventually, after a full day of trial and error, I ended up layering three different copyright-free tracks with the sound effects. The combination worked reasonably well for the short film’s atmosphere, though it made me realise how valuable a dedicated sound designer would be. In the future, I would love to collaborate with someone who can compose a more cohesive and intentional score.

Editing and Title
Overall there was not much editing required as the Unreal Engine sequencer covered everything, so I save time at this stage. Only the title was needed to be done, for which I came with an idea towards the end of this project.

I chose the word ‘भ्रम’ pronounced, bhrum or bhram, is a Hindi word with Sanskrit roots. It has multiple meanings among which, Illusion, confusion or wandering about are a few. For this story, the word can be loosely translated to a mirage. As the protagonist is wandering and searching for water in a desert, he sees an unnatural spring of water leading to even bizzare cave.
The title also refelcts on the fact how humanity is exploiting the earth’s resources, living in an illusion of Utopia, while the nature is depleting. It is a look back to the vernacular ancient architecture like the stepwell, that were meant to preserve these resources.
Continuing from the previous stage, I worked on animations throughout October and early November. I followed the shot sequence closely—starting with the prologue and leaving the third act for the end, as it required the most intricate body movement and emotional beats.
Alongside animation, I developed a fish swarm particle effect for the final sequence and added subtle foliage elements around the stepwell to give the environment a bit more life and texture. I also added camera shakes at this stage.
Polishing Animations and Blinks
Towards the end of the project, I did have to rush through a few animations, but I was still satisfied with how they supported the story. Instead of perfecting every micro-movement, I prioritised the overall performance and whether the character’s emotions were being communicated clearly.
For example, in one of the final scenes, the character is overwhelmed by the sight of so much water and collapses onto his knees before drinking in a rush. This emotional beat mattered far more than polishing every secondary movement, so I focused my cleanup efforts on the key poses and transitions that made the moment read effectively.
Towards the end, I also got a feedback from George to add blinks where the characters face was visible. This added a lot of life to the character which was still looking a bit un-alive. I made a simple blink animation separatley in Blender and layered it on top of the other animations.
Fish Swarm
The fish swarm wass a crucial element of the final act. It ties directly back to the initial research, from the concept of the lost river to the marine fossils found in Rajasthan, and it needed to feel magical and surprising.

I followed a tutorial by MTR Animations to create a geometry nodes setup in Blender, making slight adjustments to suit my needs. One of the main changes was adding a control section to adjust the Z-height of the entire swarm, allowing me to position it precisely within the cave environment.
I chose to use Blender’s Geometry Nodes instead of Niagara in Unreal Engine because I wanted finer control over the behaviour, and I was more comfortable handling this part inside Blender.
[fish swarm in unreal engine]
Foliage and other elements
To add more life to the desert environment, I placed sparse dry foliage and small shrubs around the stepwell. I also added more architectural elements to the opening road scene. Additionally, I created warning signboards in Hindi to place along the fenced area near the stepwell, which helped reinforce the world-building.
These small environmental additions made the world feel richer and gave the stepwell surroundings an extra layer of believability.
[Image of foliage in Unreal]
[image of city]
[image of signboards]
Camera Shakes
Adding camera shake was an essential improvement for the bike ride shots. Without it, the scenes felt too flat and lacked a sense of speed or urgency.
With help from my colleague Hanze in the cohort, we tried a few variations and settled on a simple but effective camera shake setup. This small adjustment made the shots feel much more dynamic.
With the rig issues finally resolved, I was able to move on to the penultimate stage of the project – animation. I recorded references for each shot and animated them one by one. Alongside the animation work, I made minor camera adjustments and began creating polished versions of the particle effects that had been tested earlier.
Referencing and Animating
I recorded several movement references at once and used them throughout the week while animating. The workflow became much smoother at this stage: I would animate a shot in Blender, export it, and bring it directly into the existing sequence inside Unreal Engine. This let me immediately see which areas needed more cleanup based on the final camera angle.
The cel shading effect also helped during this phase. Many tiny animation imperfections were naturally hidden by the stylised look, so I focused my time on correcting only the poses and movements that were most visible to the camera.
A timelapse of the animation process would probably explain this better than any written description, but essentially it was a cycle of referencing, blocking, refining, exporting, reviewing, and repeating.
Once most of the key poses were established, I cleaned up the arcs and graph curves for each animation to make the movements smoother and more consistent. After receiving tutor feedback, I also fixed a few posing errors and relaxed joints that looked stiff or unnatural in the rendered shots.
Rigging a crow
For the opening shot, I initially wanted to include a crow perched on a structure to add a darker, dystopian atmosphere. I took a short break from the main character animation to rig a crow model using Rigify in Blender.
It was a fun experiment and worked quite well, but due to time constraints I wasn’t able to animate the bird, so I eventually removed it from the scene.
Animating Rope
The rope animation turned out to be surprisingly challenging, as I hadn’t attempted something like this before. I created a custom rope rig using a combination of modifiers and constraints.
The setup worked by using a single rope module that was arrayed along a curve. The curve itself was connected to seven circular control empties, which allowed me to control both the movement of the rope and its overall length.
To integrate the rope with the character:
- I parented three middle controllers to the character’s hands and torso.
- The top two controllers allowed me to keep the rope visibly taut.
- The bottom two controllers added a natural sway to the rope as the character descended.
Although it took several tests to get right, the final setup allowed the rope to follow the character’s movements in a believable way. Then I used .usd format to export it to Unreal engine which worked perfectly in sequencer as a geometry cache.
Blog 7 : Rigging
I wanted to dedicate a separate blog to the rigging issues I encountered, because this part of the project became far more time-consuming and educational than I had anticipated. I had purchased a premade character asset assuming it would speed up my workflow and allow me to focus more on animation. Instead, it turned into one of the most challenging stages of the production.
However, the process ended up being extremely insightful. I tested different rigging setups in Blender, experimented with weight painting the mesh and clothing, and learnt a lot about the limitations of sending rigs from Blender into Unreal Engine.

Initial Problems
There were multiple issues stacked together on this rig:
- The jaw and face bones were twisted before parenting, which caused diagonal or incorrect rotations.
- The character’s ponytail had no bones at all, making it impossible to animate properly.
- The weight painting around the head was inaccurate, causing visible distortions during animation.
- All of this was compounded by an incompatible rig transfer between Blender and Unreal Engine.



Debugging and Communication
Since the problems seemed too extensive to fix immediately, I reached out to the creator of the asset to debug the issues. At the same time, I began experimenting with re-rigging the model myself in Blender.
I was able to correct some parts—specifically the jaw bone orientation—by creating a fresh rig. However, the weight painting remained incorrect and still caused deformation issues.
The creator shared two additional versions of the rig, both improved in some areas, but none of the versions solved the Blender-to-Unreal transfer problem. The animations continued to distort after export, which made the asset unusable in its current form.
Solution
After nearly two weeks of troubleshooting, testing, and back-and-forth communication, I was concerned about delaying the animation stage for too long. That’s when I found a Blender plugin called Game Rig Tools.
Game Rig Tools generates a simplified sub-rig specifically designed to be readable by game engines. This bypasses many of the translation issues that occur with complex control rigs.
Using Game Rig Tools:
- I rebuilt the character’s deformation rig.
- The exported animations finally held their shape correctly inside Unreal Engine.
It was a huge relief to find a system that worked reliably, and this solution allowed me to finally move forward into full animation production.
Particle Effects
At this stage of production, I began introducing early particle effects into the scenes. These were mainly placeholders – simple dust, light fog, and water particle tests – to help the shots make more sense when discussing them during feedback sessions. Most of these early effects didn’t make it into the final project, but their purpose here was to quickly communicate atmosphere and intention.
I also experimented with mesh-based particles, creating simple mesh shapes in Blender and using them inside Niagara’s Mesh Renderer in Unreal. This helped me test more stylised effects early on, such as floating bubbles or stylised smoke effects.
Animation Blocking
I also started blocking out the character’s position and rough poses to check compositions and shot timings. Many shots used a basic T-pose stand-in, and I created a second version of the pre-vis with these rough placements. This helped me understand how the character would move through the environment and how each shot flowed into the next.
All animation blocking was done in Blender. I exported the rough movements as FBX files and imported them into Unreal Engine to place inside Sequencer. This made it easier to see how the animations interacted with the environment, lighting, and camera angles.
During this stage, I also discovered that the character rig had some significant issues. animations that looked acceptable in Blender became distorted once exported to Unreal.

Editing Notes
With the new sequences assembled in Unreal, I brought the entire shot back into Blender video editor to compare against the initial pre-vis. While reviewing the shots, I began adding notes for myself – small changes to framing, adjustments to timing, or improvements to shot-to-shot flow. These notes became a sort of roadmap for the next stages of production, ensuring I stayed aware of problems that needed addressing now.
This stage was less about polishing and more about testing, previewing, and identifying what the film was missing. It gave me a clear sense of how the project was evolving and what would need attention in the upcoming stages.
This stage was crucial for the project, as it would determine the overall look and feel of the film. While exploring different visual styles, I came across a few tutorials on cel shading in Unreal Engine. After experimenting with several combinations, I ended up building a custom cel shader that runs entirely through the Post Process Volume. Alongside this, I also created a custom fog material to support the stylised lighting.
Cel Shading : Post process Volume
The cel shader works by separating the RGB channels of the scene and then multiplying them back together using custom parameters to form distinct light bands. I added separate controls for each band:
- Band A, B, C, D controls: Adjust the spacing between each shade band.
- Light A, B, C, D controls: Adjust the brightness and intensity of each band individually.
There’s also a global tint section that lets me shift the overall colour of the highlights and shadows, interpolating between the darkest and lightest shade bands. This became especially useful later when switching between the warm desert environment and the cooler underground cave.
Because cel shading can override coloured lighting, I added a section that brings the light colour back on top of the shading. Without this, coloured lights would be lost in the effect. I also included an exclusion section, allowing me to remove specific meshes or particle systems from the cel shading if needed, which gave me more flexibility during production.
Having everything parameter-based made it easy to test different colour palettes and lighting combinations for both the exterior desert scene and the underground environment.


Volumetric Fog : Post process Volume
For the fog, I created a simple but effective material using a depth fade node and a short sequence of mathematical operations. This resulted in a three-colour fog with height and opacity controls.
In the underground scenes, I inverted the height logic so that the fog started low at the water’s surface and became denser towards the cave ceiling. This made the underground chamber feel deeper, darker, and more mysterious.
In the exterior scenes, I used this to create multi-coloured atmospheric fog, which enhanced the stylisation and helped push the steampunk-sci-fi tone further.



Final result
With both the cel shader and fog material complete, I now have a reusable stylised shading setup that I can plug into future projects whenever I want to achieve a similar look. This stage ended up becoming a defining part of the film’s visual identity.
Blog 4 : World Building
This was the first stage of production, where I focused on collecting assets and building the foundational elements needed to shape the film’s environment and overall compositions.
Terrain
I wanted to experiment with Gaea 2.0 for generating the terrain. I spent a couple of days trying out different node setups, exploring various shapes, erosion profiles, and height variations. My earlier concept sketches acted as a visual guide throughout this process. I carved out a valley for the stepwell and created a raised ledge for the prologue shots, where the character first looks out over the polluted river.



After generating several terrain passes in Gaea, I placed mountains manually in custom positions to match the compositions I had in mind. The Transform node in Gaea proved particularly useful for placing procedural hills exactly where they needed to be in the background.
Asset Collection
Alongside the terrain, I began gathering assets such as rocks, chimneys, fences, and architectural pieces from Fab and CGTrader. These served as the building blocks for early kitbash environments inside Unreal Engine. For the stepwell, I reused the model I had already created in Blender during the pre-vis stage.
I also found a hover bike asset that suited the look of the world. After making some adjustments to its materials and handlebars, it fit seamlessly into the setting.



Character Asset

For the protagonist, I purchased a character model that aligned well with the tone of the film. It came pre-rigged in Blender, which was ideal since I planned to handle all animations there later.
At this point, I didn’t anticipate the rigging and weighting issues that would cause problems later in production (covered in Blog 7), but the asset allowed me to begin blocking out scenes and establishing scale.
Level Design in UE
Once the assets and terrain were ready, I began assembling everything inside Unreal Engine. The pre-vis became extremely helpful at this stage, guiding the placement of cameras and helping me recreate the planned compositions accurately.
I also laid out a rough geographical path through the level, determining where each sequence would take place. Organising the scenes into sublevels helped keep the project structured and ensured the story unfolded logically across the environment.
This stage provided the groundwork on which everything else in the project would be built, forming the basic world that would later be refined through lighting, animation, effects, and stylisation.

Blog 3 : Pre-Vis
Pre-Vis
This stage marked the final stretch of pre-production and planning for the project.
I used Blender for all of my pre-vis work. Since I’m comfortable with the tool, it allowed me to quickly test out different compositions and camera angles. This was also the point where I started thinking about mise-en-scène, how the environment, lighting, and character placement contributed to the overall mood of each shot. I blocked out the frames and attached moodboard references alongside each one to help keep the visual tone consistent.
I shared this early pre-vis with colleagues, tutors, and a few friends working in filmmaking to gather responses and feedback. A few suggestions came up repeatedly:
- There was a slight disconnect between the acts.
- The pacing needed work, the character (and audience) didn’t get enough time to absorb the new environment.
- Some camera continuity issues in Act 3, including a few moments that broke the 180-degree rule.
- The prologue needed to move faster, while Acts 1 and 2 could be slowed down to give the story more breathing room.
These suggestions were extremely helpful to address at an early stage. I kept them in mind as I moved into the next parts of production and adjusted things where needed. There were also elements that didn’t fully come through in the pre-vis but were planned to appear later, such as the particle effects for the flying fishes in the underground cave or the reverse-rain effect emerging from the stepwell. These would only make sense once developed properly inside Unreal Engine, so I left placeholders and focused on refining them during production.
Production planning
During this stage, I also created a shot list and a production timeline to follow throughout the project. This ended up helping a lot, it made the workflow feel much more manageable and stopped the project from becoming overwhelming. Breaking everything down into smaller, achievable tasks gave me a clear path to follow during production.


Blog 2 : Concept
Story

Building on the geographical and historical research from the first stage of the project, I began shaping the narrative through a character who would guide the audience into this world. Rather than presenting the environment in isolation, I wanted the story to be experienced through someone actively interacting with it.
To structure this narrative, I used the Story Circle framework that I learnt during Term 2. In its simplest form, the story follows a character, X, living in a dystopian desert city where water has become a scarce and valuable resource. During his search for water, he spots an unnatural phenomenon: a vertical column of water rising upward from a distant structure. Driven by curiosity and necessity, he travels to the site and discovers an abandoned stepwell. Inside, he finds a ledge with a rope left behind, which he uses to rappel down. At the bottom, he encounters an underground water body. When he drinks from it, his perception shifts dramatically; he begins to see fish and aquatic creatures floating freely around him as if the desert itself is revealing a submerged world.
The story draws on the idea of a mirage, a common experience in the desert, but exaggerates it into a surreal fictional story. It blends the earlier research on ancient water systems, lost rivers, and buried sea life with the original idea of a hidden treasure, transforming it into something more abstract and psychological.
Moodboard and Concept Art

To support the visual direction, I created a moodboard that collected references for every part of the story: dystopian industrial landscapes, Indian stepwell geometry, desert palettes, textures of rusted machinery, stylised water effects, and surreal interpretations of aquatic life. To organise the flow of the narrative, I broke the story into a prologue and three acts:
Prologue – establishing the premise of an industrial, desolate world.
Act 1 – the character travelling across the desert towards the stepwell on his bike.
Act 2 – the descent through the stepwell and the journey down.
Act 3 – the underground cave with glowing water body and the appearance of the floating fish.
At this stage, I also began working on a rough Pre-visualisation to test compositions. This helped me understand how the narrative would feel visually. Based on the pre-vis frames, I drew over several shots to explore early concepts and consider the eventual look of the project.
This combination of story development, moodboarding, and rough visualisation became the foundation on which the project’s final aesthetic would develop.



