Recently, I was digging through my old projects and came across a few low-poly models from a bygone era (2012) – when mobile phones first became a promising platform for 3D games. Remember, this was a time when even the most state-of-the-art phones struggled at N64-level graphics. PC’s and consoles were pushing the limits on Skyrim or Arkam City while mobile game devs were still debating on whether a 256×256 texture was too high-res for a main character model.
The models in question were from a top-down 3D ‘shooter’ where the player flew a cartoonish dragon around obstacles and projectiles while burning everything they could. I built a handful of dragons and level assets that really looked fantastic (for the time). Lights and shadows were a major performance hit for mobile devices, so I pursued a completely unlit game. Since the game had a fixed perspective, all “lighting” could be hand-painted (or baked) into the assets. Unfortunately, due to significant loading issues with how we were streaming in the playable level segments combined with a handful of other issues, the game never saw the light of day. We shelved it and moved on to shinier things.
Opening the Unity3D project brought back a few memories, but I had a goal in-mind already. What if these old assets could be cleaned up and offered on the Asset Store? I set to work – arranging a few mostly-complete assets on a plane and started cleaning things up – nothing drastic, just making sure there weren’t any defects. After the textures and settings looked okay (remember, we were updating a 7-year-old Unity project – kudos to Unity that everything still worked!), I decided to make a proper ‘lit’ version of the textures and materials. An unlit game seemed like a ‘cheat’ that wasn’t really used anymore, so making sure the assets looked good in PBR rendering seemed like a good idea.
For the uninitiated, ‘PBR’ stands for Physically-Based Rendering. It’s this fancy ‘new’ lighting technique that really does a fantastic job of simulating realistic reflections and proper interaction with lighting and textures. Both Unity3D and Unreal Engine (the most popular game engines) use PBR by default. These days, it’s even gone so far as to become a nonsensical buzzword like ‘blockchain’ or ‘fake news’ – at one time it meant something specific, but now it’s just something you drop to let people know that you know how it all works. PBR has been made out to be the golden child of game lighting. “There’s nothing it can’t do!” The ‘zinger’ of this blog is that it’s not. Or, at least, not the end-all of game rendering.
To be clear, PBR makes realistic-looking games look more realistic. The advent of this rendering technique changed the way we think of textures and specularity or, more properly ‘roughness’. There’s a special-sauce to making things look real, but it’s far more knowable and mathematic than it ever was. It’s 100% reproducible and based on real-world values. How rough should polished leather be or a marble countertop or sterling silver? Seek and you shall find. Link These things are more fact than opinion now, which is great… if realism is your goal. What happens when realism isn’t your goal. What if you wanted to make something that just doesn’t or couldn’t exist in real life?
Back to this old dragon game. What happened when I turned on the lights? A few good things, and a few bad. But, it’s the bad things no one is talking about. When I first painted the textures for the dragons and level assets, there was a clear wysiwyg correlation to what you’d see in-game. Namely, the red on the texture was the same red in-game. Seems like that should be the same in PBR, right? It ain’t as easy as it sounds. PBR brings a few things into consideration – most importantly, the color of the skybox/environment. Red isn’t just red – in PBR it takes the intensity of the light and shadow, as well as the surrounding environment to produce its version of red. Remember that debate in 2015 about the ‘white dress with gold stripes’ vs ‘black dress with blue stripes?’ Link Welcome to the pitfall of PBR. Making something look red and making something be red aren’t the same thing. In the end, I had to fight the rendering solution to produce something unrealistic – bright, saturated colors.
Did this conversion and “fight against PBR” take a ton of time and work? No, not a ton, and the lit version benefits from a lot of other great things like shadows and dynamic highlights. A lot of games will see a massive benefit from PBR, and for those projects, it’s a no-brainer. But, something happened in ~2017 that changed the landscape of game styles. It’s now essentially easier to make a realistic game than a stylized one.
While I was working on this little lighting conversion, my 11-year-old son walked into my office and saw me flipping back and forth from the lit and unlit scenes. He was immediately drawn to the unlit version – its colors simply popped more. He couldn’t explain it but genuinely felt the unlit version was better. I wondered if perhaps the game industry as a whole has already been skewed by the more muted defaults of PBR? I don’t think the unlit version is objectively better, and I think it suffers from plenty of obvious issues like lack of depth and shadows to establish the distance between objects. I’m just asking the question: “Sure, there are still plenty of colorful games out there, but has BPR fudged the needle in a less saturated/cartoony/stylized direction?” Or, maybe the lit version is objectively better and I’m just an old cranky game artist stuck in his ways. ;P