• Games
  • Industry
  • Resources
  • Community
  • Learning
  • Support
  • Pricing
Develop
Unity Engine
Build 2D and 3D games for any platform
Collaboration
Collaborate and iterate quickly with your team
Download Unity
Plans and pricing
Deploy
Multiplatform
Discover 25+ platforms Unity supports
LiveOps
Post-launch insights and live game ops
Grow
User acquisition
Get discovered and acquire mobile users
In-App Purchase
Discover and manage IAP across stores
Monetization
Connect players with the right games
Advertise with Unity
Monetize with Unity
Use cases
Mobile Games
Build & grow mobile hits with Unity
Indie Games
Ship big games with small teams
XR Games
Launch XR games across platforms
Multiplayer Games
Simplify multiplayer game development
Use cases
3D collaboration
Build and review 3D projects in real time
Immersive training
Train in immersive environments
Customer experiences
Create interactive 3D experiences
Industries
Manufacturing
Achieve operational excellence
Retail
Transform in-store experiences into online ones
Automotive
Boost innovation and in-car experiences
See all industries
Technical library
Documentation
Official user manuals and API references
Developer tools
Release versions and issue tracker
Roadmap
Review upcoming features
Glossary
Library of technical terms
Insights
Case studies
Real-world success stories
Best practice guides
Expert tips and tricks
Demos
Demos, samples, and building blocks
All resources
What's new
Blog
Updates, information, and technical tips
News
News, stories, and press center
Community Hub
Discussions
Discuss, problem-solve, and connect
Events
Global and local events
Community stories
Made with Unity
Showcasing Unity creators
Livestreams
Join devs, creators, and insiders
Unity Awards
Celebrating Unity creators worldwide
For every level
Unity Learn
Master Unity skills for free
Professional training
Level up your team with Unity trainers
New to Unity
Getting started
Kickstart your learning
Unity Essential Pathways
New to Unity? Start your journey
How-to Guides
Actionable tips and best practices
Education
For students
Kickstart your career
For educators
Supercharge your teaching
Education Grant License
Bring Unity’s power to your institution
Certifications
Prove your Unity mastery
Support options
Get help
Helping you succeed with Unity
Success plans
Reach your goals faster with expert support
FAQ
Answers to common questions
Contact us
Connect with our team
Download Unity
Get started
Language
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
Social
Currency
Purchase
  • Products
  • Unity Ads
  • Unity Asset Store
  • Resellers
Education
  • Students
  • Educators
  • Institutions
  • Certification
  • Learn
  • Skills Development Program
Download
  • Unity Hub
  • Download Archive
  • Beta Program
Unity Labs
  • Labs
  • Publications
Resources
  • Learn platform
  • Community
  • Documentation
  • Unity QA
  • FAQ
  • Services Status
  • Case Studies
  • Made with Unity
Unity
  • Our Company
  • Newsletter
  • Blog
  • Events
  • Careers
  • Help
  • Press
  • Partners
  • Investors
  • Affiliates
  • Security
  • Social Impact
  • Inclusion & Diversity
  • Contact us
Copyright © 2025 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell or Share My Personal Information

"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.

How to create atmospheric environments on a budget

Alfonso Caparrini
ALFONSO CAPARRINI / LAPSUS GAMESDeveloper
Aug 22, 2025|5:20 Min
Key art from NODE: The Last Favor of the Antarii by Lapsus Games | Made with Unity. A small robot in some kind of ducting system peers down into an open shaft. Above it is a fan with light and particles drifting down.

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 content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.

The usual starting point: Just a key light

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.

Screenshot from NODE: The Last Favor of the Antarii by Lapsus Games | Made with Unity. A 3D environment of a wide-open industrial space. A red star on the ceiling casts a shadow on the ground, which is tiled in red hexagons.
The scene with only one light

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.

Screenshot from NODE: The Last Favor of the Antarii by Lapsus Games | Made with Unity. A 3D environment mostly in shadow. On a red tiled floor, the shadow of a star is superimposed by a structure on the ceiling.
Reflection probes added and light baked

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!

Screenshot from NODE: The Last Favor of the Antarii by Lapsus Games | Made with Unity. A 3D environment mostly in shadow. On a red tiled floor, the shadow of a star is superimposed by a structure on the ceiling. Shafts of light reveal a light fog in the atmosphere of the scene.
Adding volumetric fog

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.

Faking light scattering in air using geometric volumes

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.

A screenshot of NODE: The Last Favor of the Antarii's shaders in the Unity Editor.
Shader Graph view of the Custom Ramps shader

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.

In-Editor screenshot from NODE: The Last Favor of the Antarii by Lapsus Games. A large blue pill-shaped object is superimposed over a 3D environment with a red tiled floor. The pill is a geo emulating the bright core of the light.
Geo that emulates the bright core of the light

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-Editor screenshot from NODE: The Last Favor of the Antarii by Lapsus Games. A large blue  object is superimposed over a 3D environment. This shape represents the geo for a softer, fainter, and farther-reaching light fill
Geo for a softer, fainter, and farther-reaching fill

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.

Screenshot of NODE: The Last Favor of the Antarii in the Unity Editor. View of a baked lightmap in an industrial scene.
The corresponding baked lightmap
Screenshot of NODE: The Last Favor of the Antarii in the Unity Editor. View of a baked lightmap in an industrial scene, with geometric emitters added.
The result with the geometric emitters

Fog, gradient sky, and tone mapping

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.

Screenshot of NODE: The Last Favor of the Antarii by Lapsus Games in the Unity Editor. A final render of an industrial environment
The final result

Smooth transitions between atmospheres

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!

Several baked lightmaps from NODE: Last Favor of the Antarii by Lapsus Games. Made with Unity.
A view of the baked lightmaps of different scenes together

Solving complex lighting with a single mesh

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.

Side-by-side comparison of two different atmospheric areas in NODE: The Last Favor of the Antarii by Lapsus Games, Made with Unity.
Left: Baked lightmap of a large transition between two different atmospheric areas Right: How that transition was achieved with no lights, and only one box

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.

Screenshot of NODE: The Last Favor of the Antarii by Lapsus Games in the Unity Editor. A render of a control room with many monitors.
Result of the blending of two lighting sections on a small space
Screenshot of NODE: The Last Favor of the Antarii by Lapsus Games in the Unity Editor. A view of the geometry behind several effects in the scene.
Showing the geometry and color ramp used to create that effect

Final thoughts

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.