The Last of Us: Part 2 (Limited)

Working on The Last of Us: Part 2 was an incredible experience, especially during initial lighting passes in areas like The Coast, Downtown Seattle, The Gate, and The Island. It's a shame this would end up being our last. But as the project moved forward, focus shifted from pure lighting to technical support and software updates. By this point we had gotten used to the pipeline and felt it was time to automate most of what we did to push the envelope into full-on weather, tone mapping, and FX. Culminating lessons from the past and knowing what the job required, we took advantage of technical leverage to produce more with less, generating complex with simple, creating believable results with little as possible. Even though our initial passes were manual, we quickly replaced art with code to recreate similar outcomes in a fraction of the time.

Below are some highlights and insights from our tenure in early development and pre-production.

PRODUCTION

From 2017 to 2019, transitioning toward full-time Technical Artist at Naughty Dog, we had the opportunity to make some impactful changes, particularly with tools. Leading the charge, we built a suite that boosted workflow by more than four times the amount it took to get a final result. One key highlight was creating a myriad of post-processing with just a dropdown menu, generating dynamic time of day, snow, rain, and fog within seconds. Hundreds of post controls adjusted to just a few clicks, automatically making it quick and easy to create a baseline for shippable levels.

Most of The Last of Us: Part 2 took place in Seattle—a city infamous for rain and overcast. This meant fewer chances to vary lighting and VFX conditions compared to past projects. But it also gave us an opportunity to explore many ways cloudy weather could be expressed—half-sunny, fully fogged, semi-rainy, and so on. It reminded us of that scene from Forrest Gump, during his time in Vietnam, where Forrest described all the different ways it rained:

"...big ol' fat rain, little bitty stingin' rain, sideways rain, and sometimes even rain that seems to come up from underneath," he mused.

Our career came full circle when we faced the same challenge back during Tomb Raider: Underworld's Mexico level. Various art directors would recommend opening a hole in the sky to create an atmospheric "shoebox," in order to deal with the flatness and lack of direction with overcast, which became a default response to any lighting that didn't work, often excused, and felt like a cheat that missed potential for something greater. Lighting-wise, this was a puzzle we wanted to solve for nearly a decade.

Surprisingly, our solution turned out simple: treat overcast the same way you would night levels. Learning from Nightfire on World at War, we compensated for the lack of sunlight with strong reflections, wet materials, mud-puddles, thick fog, heavy steam, and accents from fires as well as electric sources. As we mentioned with Nightfire, hollywood directors would often request drenching wet entire sets in order to get greater bounce, brightness, and depth, water hoses spraying whenever they filmed at night. They also added background fog and heavy smoke, which combined, worked wonders, and became a staple of iconic cinematography. It's the same with cloudy levels! In our case, even if none of these were available, we still used cool or warm directional light paired with an overcast skybox, shaded darker on one side, bright on the other, to suggest the presence of sun hidden behind clouds, as a foundation for tonal depth.

It’s ironic—what we thought was boring, as well as flat, ended up being most interesting and offered the widest depth as well as greatest variety. Materials played a major role in this, which is why a lot of credit went to Naughty Dog's shading team for pushing the envelope; proper blackbody and physical based values along with bright accent colors, made everything pop. Overcast gave us an excuse to play with contrast, push saturation, and build atmosphere, producing layers of mood that could shift from ominous to peaceful with just a handful of gestures in ways other lighting conditions couldn’t.

TOOL STORY

Overall

While we can’t showcase all the tools developed for The Last of Us: Part 2, we can give an idea of how they worked. Below are examples of some in action and how they were utilized. Post-processing in games can be incredibly complex, hundreds of variables are needed to get the perfect look. For lighting artists, this process can take days or even weeks.

Which is why we were inspired to shift our focus toward building ones that could streamline the process and reduce time needed to set up each level. Our lighting preset tool nicknamed "LUI" became a real game-changer. As we continued striving, making every step as concise as possible, we counted each and found ways to eliminate until they boiled down to a single button. By integrating post-processing, weather systems, and dynamic time-of-day features, we managed to cut development hours by more than 80%. The system was so efficient that it automated lighting to just a few clicks. It also supported various display modes for debugging and helped with connecting the PlayStation to the game editor. It was a dream come true.

But quickly, we realized one critical issue. It would require growing support as engine tech kept evolving and doing so during production. This ended up becoming our greatest challenge.

Preset System

Tool Development

To make it work, we had a basic premise: send one command to the console which updates a single variable, then retrieve it and print results on screen. If this could be done once, it would lead to thousands of commands in fractions of seconds. Using Python, we built a system that would automate “get” and “set” requests for every post-process attribute. This allowed us to generate a user interface displaying available stats and their data types (like bool, float, int, etc.), and then save these combinations into a JSON dictionary. In other words, we scripted a way to auto-generate a UI by reading all the available commands for the game and give each a control to visually change it.

From another perspective, this opened up a new idea. One, you would get simple, text-based tech working on its own first. Just having that accomplished was more than enough. Once completed, then you could create an interface and connect buttons, dials, sliders, and knobs for each command. The front end would be one thing, the back end another, and if anything was broken or users complained, we could always enable or disable whatever was needed without affecting anything else, thus maintaining performance as a whole.

Once a desired look was achieved, we could save it as a preset, cycle through hundreds of values in seconds, and iterate. Thanks to Graphics Engineer Artem Kovlovs, we integrated a system that communicated directly with the PlayStation, letting us retrieve and send post-process data seamlessly.

As a bonus, we wrote a script in the game’s editor to update objects like the sun, so it matched direction set in the console and do the same with blockers, bounce, as well as runtime lights. In other words, whatever a lighting artist did in the game's editor, the Playstation would update, making our process instant! Since the game would sync with its level editor we could forward results in a bake, ensuring everything aligned perfectly with just a click, thus hours of work, accomplished in minutes.

Oddly, we learned the hard way how often we ended up spending time on UI, more than half, because of feedback. While the good news was that it gave us power to add neat things like mouse-hover instructions to explain how things worked, it also opened another can of worms: feature requests. Luckily most updates worked well across the board and we were able to keep up with user demand...for a while.

Film Presets

Tool Development

One fun anecdote of our tool system was the ability to study films like The Road, Black Hawk Down, and Saving Private Ryan, being able to proxy their looks in the game, and have them as presets. It wasn't just a time-saver but really fun to explore different ideas and looks in a short time. The possibilities were endless.

We also created samples of different presents for glows, vignettes, exposure, and apertures. It was neat to get camera settings and things like shutter speed, ISO, and f-stop into account, though there wasn't time to make it accurate. It was more about getting the feel of how cameras reacted in a given situation. Nonetheless, all of these, including rain and fog presets, proved helpful and fun. We were also proud of the time of day and hourly presets that could quickly change a scene to day, night, or evening, sunny or overcast, in one stroke.

Glow Presets

Tool Development Tool Development

Vignette Presets

Tool Development

Exposure & Aperture Presets

Tool Development Tool Development

But Then...

As we made significant progress, new features kept coming online from the engineering team. This meant work took longer than usual to update, adding intricacy to the pipeline. As tools were being refined, technology bloated, resulting in a stalemate, as massive updates continued to pile. What used to be simple grew increasingly complex. As a result, programmers began approaching us for assistance in ways to simplify bloating lists of parameters, to make them more accessible and artist-friendly. It became a difficult but necessary responsibility, and with every success, our workload grew; for each update that made things easier, new features emerged that made it harder—a constant balancing act that felt like a never-ending technological whack-a-mole, and time was running out. In the end, we got as far as we could, getting the job done wherever possible, but it was clear as deadlines approached, our days were numbered, and we needed to make an important decision.

Sadly, before we left, we didn't get to finish LUI. It worked well up to Beta but needed more time to become a final product. Still, it was production-worthy, which is why there's little regret other than wishing for more time. An emergency came up that required us to refactor entire parts of our pipeline that otherwise would've made life for the lighting team impossible and put our department in jeopardy. We had to choose between a massive, boring, but important update or let it go and make the fun tool we loved. With limited time remaining, we chose the former over latter. While no regrets, we do lament it took up all our remaining time at the Kennel and couldn't finish what we started. Nonetheless, it worked well enough to get the job done and we were proud of our achievement.

It was a shame to take a sabbatical in 2019, but we felt it was time. Naughty Dog was our home for six years. We loved it, yet at the same time, Lost Legacy burnt us out and we needed a break. Also, we felt a calling to work on our own projects and see what we could do with the knowledge we gained. While we miss the team and wished we could've been there to help finish the game, taking a furlough was the right decision, yet parting ways was bittersweet sorrow.

It wasn’t until months after, we developed a better approach for prioritizing and managing tasks. To be fair, wearing artist and tech hats were a blessing and curse. But looking back, we wouldn’t have it any other way.

For more, check out the original Last of Us, Uncharted 4, Lost Legacy, and our tools galleries.