
Today’s guest post is from Alfonso Caparrini, cofounder and developer at Lapsus Games. On August 28, Lapsus launched their debut game, NODE: The Last Favor of the Antarii, a unique 2.5D puzzle adventure featuring absolutely stunning in-game lighting. Learn how Alfonso, a professional CG artist by day, approaches lighting in HDRP to create NODE's densely atmospheric environments in Unity.
As a lighting artist in the animation industry, I’m used to having pretty much no limits on what I can add to a scene to get the look I want. And if something doesn’t work? I fix it in compositing. But to get one single frame out of that pipeline, it can take tens or even hundreds of hours of render time.
When I started developing NODE: The Last Favor of the Antarii in Unity, I had to change my approach in order to get the cinematic, atmospheric results I was used to, but it had to run at 60 frames per second instead of 60 hours per frame.
Needless to say, introducing volumetric lighting is never cheap, but here are some of the tools and techniques I developed to light NODE in a way that feels rich and cinematic, while keeping it simple enough to run performantly in real-time.
This is where everyone begins: You throw in a single key light and hope that the Global Illumination (GI) will magically fill in the rest.

You bake the scene and then realize that GI helps, but it's nowhere near enough to get the atmosphere, depth, or mood you envision, nor does it give you the necessary control over the palette to create what you had in mind.

Volumetrics: Adding depth
Since we want an atmospheric environment, let’s start by enabling the volumetric fog. It instantly adds atmosphere, depth, and directionality. The environment starts feeling like it has air in it.
Still not enough, though!

This is the point where you can start going crazy trying to add lights everywhere – gigantic lights, lights with no shadows, etc. – to fill all the spaces that the light or the GI covers. But piling on all those ideas, more likely than not, will end up making the scene feel flatter through loss of volume and dimensionality – or running much more slowly.
My goal for NODE was to create the feeling of a densely atmospheric environment, with light bouncing and scattering in the air itself, without completely tanking performance. To that end, I developed this workaround.
To realize my lighting goals for NODE, I built a very simple unlit shader that creates a smooth gradient with HDR colors. I added controls for midpoint, falloff, and an emission multiplier. I use this shader on basic geometries like spheres, capsules, boxes, or custom meshes, placed in areas where I wanted to simulate light filling the air. These volumes are not physically accurate, but they feel right.

In this particular case, even if unrealistic, I picked a cool complementary color to contrast with the warmth of the key light, creating what I think is a richer palette. You can layer as many as you need and even stack them with different intensities to better control how it decays.

The result is that the scene starts to feel like it’s bouncing on the air itself, filling up those spaces, and I have complete control over the tone and intensity.

In the result and its corresponding lightmap, you can see how this has created a gradient on the scene, originating in the area where the shaft of the key light is adding a lot of depth and volume to the scene.


Next, I complemented the scene with traditional fog – just enough to add depth to the scene based on its dimensions. I adjusted brightness and color using a Gradient Sky, which allows me to unify the color palette and set the overall tone for the environment.
To glue all of this together, I used ACES tone mapping. Without going into too much detail, this gives the final frame a more “cinematic” feel.

This combo of fog and volumetric lighting, colored with a Gradient Sky, and the use of geometric volumes emulating atmospheric light scattering, also allowed for smooth transitions and unique atmospheres. I can control the length and transition points by adjusting the ramps on the gradients of the unlit shader I created, together with Unity’s volume blending for transitioning between different sky and fog settings.
This also helped me avoid using large numbers of lights and kept light baking times very low. I’m proud to be able to say that the total baking time for the 150 different scenes in NODE is less than 1 hour!

In this section, I’ll share some examples of how this simple technique can help you solve complex lighting problems with ease.
In this elevator shaft, I needed to transition from the green tones of the underground to the blues of the rooftop. With just one box, I created the chromatic base to help me make that transition – and at no additional performance cost.

In tighter spaces, like this control room, I was able to create two different ambients between the monitors and the center of the scene, which gave me all the light wrapping I needed.


Lighting NODE: The Last Favor of the Antarii was all about embracing constraints and turning them into creative opportunities. Coming from the world of animation, I had to rethink a lot of what I knew: How to cheat without compositing, how to guide the eye without throwing more lights at the problem, and how to make a scene feel rich without breaking performance.
Hopefully some of these tricks give you ideas for your own project, or at least serve as a reminder that there’s always a way to work around the first intuitive approach. Thanks for reading!
NODE: The Last Favor of the Antarii is available now on PC and consoles – wishlist the game here. Follow more Made with Unity games on our Steam Curator page, and check out more stories from Unity developers on our Resources page.