One of the most memorable projects of my career has to be lighting Spyro Reignited Trilogy published by Activision developed by Toys for Bob. I got to take a break from my usual behind the scenes support and remind myself that I still love being an artist.
What does lighting in a game even mean? Its probably easier to show than to describe.
Spyro was developed using the Unreal 4 engine. Version 4.19, and we had 93 some odd levels to light across the three games in about 6 months of art production. During my interview, I remember asking, isn’t that a continuously loading game? Doesn’t that break* the engine? Aren’t there interior and exterior elements to the levels? And I saw the answers on the Art Directors’ faces about what kind of challenges were needing to be solved with their side glance at each other over the lunch table.
Normally, I don’t think I’d have flinched at a challenge like this, but this wasn’t just a new game. This was a remake from the ground up of a huge game from many people’s childhood; with a team I didn’t know; and a tight production schedule. And when I said break the engine… I meant it.
So what do I mean by break the engine? Unreal’s known as a render powerhouse, look at all the titles and how gorgeous they are! Pre version 4.19, ever run into the shade of a tree, or a building in any unreal game? Do you still see your shadow on the ground? This is a rhetorical question, no you don’t. You don’t cast a shadow, when you are already in one. This is not a good problem when you are making a platformer, and people need to see where and when they are going to land. Tons of authoring tricks are required to swap in and out levels, lighting scenarios, and I wasn’t a master of them, nor did I think I could pull them off in the frame rate we needed to support for how fast Spyro could move.
Ever notice how any object you can interact with kinda stands out? Like a hidden door, isn’t very hidden? This can be an artifact of different types of optimizations when games render dynamic objects versus static objects. Want that to not happen? You have to use all dynamic lighting and dynamic objects, and then your frame rate plummets if you want to get artistic. And this isn’t just with hidden doors, its with your enemies and lead character too! While often we do want to call attention to some elements and not others, it is important to have control and especially important that the game runs at 30 fps.
Working in isolation of the dynamic object problem our extremely talented environment artists were churning out some mouth watering gorgeous levels leaning onto Lightmass a fantastic light baking tool that ships with UE4. And the Art directors were like, why can’t we have that quality everywhere?, that’s what we want. And I thought, because most of the game world’s not static.. So I got to work.
It was suggested to start on Toasty, because it has all the issues! Interiors, exteriors, dynamic walls, characters that swap states, a hidden area behind a vista object, an in game cinematic sequence, even a sun set! What’s wrong with a sunset? Aren’t they pretty? Gorgeous no arguments here! But… they have low angled lighting casting long shadows, expensive to look good, and often glitchy passing through walls or flickering. The character can cause the camera to look directly into the sun, what do we want to happen there? How’s the subsurface technology on Spyro going to hold up?
After about two weeks, a few questions posted on UDN (Thanks Epic guys! You are really the best at getting back to customers!), a line of code being injected into the engine, a dozen new core materials I was nearly there with a look that reached what my childhood remembered. 5 months later, I figured out my bugs. Toasty and I became very intimate.. Often after learning some better techniques on another area of the game I was compelled to come back into this level and pushed it a little further.
If I had to give out a recipe of the final lighting solution, I’d try and put it like this. Its about 20% Ambient Lighting from Lightmass, 20% Dynamic Lighting and Ambient Occlusion from a Global Light utilizing Depthfield Shadows, 40% Lighting from Directional Lights for Exteriors or Dynamic Points and Spots in Interiors, 10% post processing effects, and 10% faked inside of materials. In most cases, I think the documentation hints you can get a game done with any one of those solutions. But the reality was, each solution worked best in different applications, and my Art Directors could see the difference and challenged my craft greatly with how good their eye was.
After getting the formula down, came all the fun of finding ways to bring the original levels up to today’s standard while still finding ways to get them to trigger our original nostalgia.
Sampling original color pallets wouldn’t work , as the original game didn’t have any lighting. It was flat colors, with a bit of a gradient to them to show depth. Lighting today takes the color of the surface that someone painted, and the color of the light and adds them together. Its really easy to see this effect below as the orange light makes the interior wood warm, and the blue light of the moon outside mixing with the wood pushes a cool tone to the same wood texture.
Many levels I could get 90% of the way on. But every once in awhile I’d get humbled by my Art Director sitting behind me and noodling through some of the colors and intensities involved and suddenly a problematic level would feel just right.
And once the feel was established, I still had to find ways to talk to the player to help them understand the level, and where to go. Calling attention to distance door ways that needed to be not fight with the rest of the scene. Where we’d place the main light, like the sun or moon in the scene, could allow for rim lighting that could lead a player to always want to know what’s over there? And incidentally move closer to the goal of the level.
Helping players see a ledge, could require a touch of light on the ceiling behind it from spyro’s point of view. Coaxing a person to go forward could result from other subtle tricks like adjusting the emissive properties inside of a material in increments towards a hallway that would otherwise look too dark to explore. A splash of warm light just before a bend in the distance to beckon someone onward.
Even knowing where not to put a light was important. Helping create a dark frame around an objective can call attention to something without throwing a direct spot light on it.
Some levels even required the light to be a mechanic that affected enemies in or out of it. These lit areas needed to pool in easy to read regions from afar. Fake volumetric fog could be used to help designate these areas to players in absence of a surface for the light to interact with.
Often in multi tiered levels, the path the player needed to follow could subtlety read brighter when looking down from above by playing with how the light could reflect from metallic surfaces. And dialing down the reflectiving of metal near an edge that needed to read darker would create the contrast needed to frame an object or path of interest.
An example of needing to lead players to want to go up to solve this level’s layout can be seen with light hints behind the arch coming from above.
Beyond just the environment, Character and cinematic lighting was a blast too! Allowing some of the full power of UE4 to be utilized through use of lighting channels, cinematic shadows, and custom materials. Here’s a great shot of some sinister from below lighting on Ripto.
And a tough challenge throughout was ensuring that characters fit inside the environments, interacted with the lighting around them, and didn’t stand out unnaturally.
All and all, I’m very proud of the production work I achieved at Toys for Bob. The foundation provided by all the artists involved and the leads’ quality bar really gave me something special to cast a light on.