Halo Infinite Lighting
I worked at 343 Industries (n.k.a Halo Studios) as a technical lighting artist on Halo Infinite from 2019 until its release in 2021. Much of my time at the company was serving innumerable support roles on both the campaign and forge teams, but the work I’d like to showcase here was the result of a months-long project to light a particularly complex section of the campaign.
This section in question is known as The Tower, a mission where the player infiltrates a heavily guarded prison and proceeds to climb floor by floor up the densely packed tower interior, all leading up to a climactic narrative scene and boss fight with Chak Lok.
Credit to JK Gaming for the gameplay video
The construction of this area is deceptively simple, as several production factors led to this being an unexpectedly substantial technical feat. I’d like to showcase a couple of the problems I solved in this process, but first I’d like to show some of the shiny looking renders:






Now for the technical breakdown...
Part One: The Light Culling Issue
One thing is relatively universal working as a lighting artist: the process is somewhat straightforward if you’re lighting exclusively an exterior or interior level, but the nightmares arise when you have to light an interior area within a persistent open world. When you have too many lights compacted into a small space, you tend to be looking down the barrel of significant performance costs. The most common way to mitigate this is to reduce the attenuation of every light to minimize overlapping where possible, but this quickly becomes futile when you have a level like the Tower interior with a tightly packed interior with hundreds of lights.

^ A lighting artist's worst nightmare...^
Even setting aside the contribution of the exterior lights, the interior of the prison itself had the problem of going over perf budget with hundreds of overlapping lights, the majority of which the player can’t even see at any given time. So how did I tackle this? The first step was to try and take advantage of the architecture of the prison. The prison is made up of 4 vertical floors all connected by small interstitial stairwells. It’s a bit hard to describe with that alone, so I’ve drawn up a rough diagram:

Considering the majority of lights exist on floors the player isn’t even on, my first plan of action was to implement aggressive culling. This was done through a simple ToggleAllLights script, which takes a group of assigned lights and toggles them on/off based on entering/exiting a trigger volume. Each floor of the prison had its own ToggleAllLights script, meaning the only active lights were on the floor that the player is currently in. The interstitial stairwells served the convenient function of hiding transitions of light toggles as the player progresses from floor to floor.
Implementing these toggle volumes solved the light count going over budget, and allowed more freedom over setting the mood of the scene with more lights. After this, there were a couple of other problems that remained…
Part Two: Exterior Light Bleed
As mentioned before, the lighting budget for this area was severely hampered by the fact that the game still has to calculate directional lighting and ambient lighting on top of the lights used within the interior. Luckily the architecture of the tower allowed for a convenient solution to this. Because the rendering system for the game was easily accessible through scripts, I was able to implement a trigger volume encompassing the interior of the tower that would disable sun and sky contribution whilst inside the tower.

Since the interior of the tower didn’t have any windows, the player would have no way of seeing the lack of sunlight until they exited the tower through the fourth floor. This allowed us to not only cut out the perf cost of directional lighting and shadows, but it also prevented any sunlight bleeding through the walls (another common issue with interior spaces within persistent exteriors). This left but one problem…
Part Three: Narrative Lighting
Halo Infinite’s narrative scenes are unique in that they all take place within the actual game to give a sense of spatial continuity. This meant that some of the environments had two sets of lighting: one for gameplay, and one for narrative scenes. In the case of the tower, the narrative scene I had to take into account is the scene that plays before the Chak Lok boss fight at the fourth floor of the tower (See 34:56 in the gameplay video for reference). This complicated an already complicated lighting setup within the tower, so we had to find a way to switch between the two lighting scenarios seamlessly. Luckily I already built a tool for this: the ToggleAllLights script. On top of being controlled by triggers, the system was set up to where any function call could activate it, in this case through a function call keyframed on each end of the narrative cut scene. The system also includes a time fade parameter to slowly transition between light scenarios rather than awkwardly popping between them. This tool saw so much success that it was quickly repurposed for almost every narrative sequence within the game.
It's difficult to show this tool in action for this sequence specifically, but here's some examples used in other narrative scenes throughout the game:



Thus concludes the arduous journey of taking one of the campaign’s biggest performance nightmares and transforming it into one of the most dynamic and interesting! There’s a couple of other little touches I didn’t explain, such as scripts for dynamic light flickering, but I believe I’ve covered the most important things…