Okay, so before I talk about PBR, I need to talk about IBL.
If you’re saying “whuuuut” I don’t blame you! Unless you’re friends with a game graphic artist or a 3D animator, it is unlikely that you hear terms like Specularity or Normal Map on a daily basis, never mind these new specialist technologies!
I’m going to put this in simple terms because honestly I am not a physicist and couldn’t explain in detail how anything works on more than a very basic level!
IBL = Image based lighting
Or, in other words: IBL = make everything shiny in my game look twice as awesome.
Okay, so as I said last time, specularity is how reflective a thing is. It’s very important to understand that everything is reflective. Some things are more reflective than others, but if a thing reflected literally no light, it’d look like a weird black shape cut out of reality. So, everything reflects light, okay.
Let me just show you a picture of the stuff from the last post I did, but instead of the Marmoset IBL shaders, using just generic shaders…
Compared to IBL…
Pay particular attention to that little barbell looking metal dealie on the right there (it’s an earring, looks a little weird out of context and blown up big so I can see it!).
Why does image 2 look so much more realistic and also more modern!?
Okay, well, in the first image, the computer is throwing our simulated light at the models and it’s reflecting off appropriate to what we’ve told it is reflective with our spec map. If you were in a hypothetical situation in which your object was floating in a blank black void with no walls or floor, no atmosphere and just a single source of yellow light projected from a circular light source, this is how it would look.
The closest thing I can think of to those conditions would be…
So here we have a cool guy on the moon! There’s no atmosphere to diffuse or colour the light, so the light is coming very strongly from one direction and is very harsh (that’s why his visor is gold-plated to stop it blinding him!) with very dark ,crisp, black shadows. There IS a floor however, and those grey moon rocks and just are reflecting some light back, so we have a reflection in his visor and can see a small amount of light being reflected back on the underside of his gloves etc. HMMM…
Yessss… are you getting it now? The thing that makes a shiny thing in CG art look more realistic? The light around you isn’t just coming straight from the sun or a lamp! It’s bouncing all around your surroundings and you and everything around you are reflecting that reflected light, and that’s why when you look at a shiny thing in real life, you don’t just see a round point shine, you see a distorted image of what’s nearby, coloured appropriately!
BUT. When we’re making a game in real time, we can’t calculate reflections from the environment in real time like that! The processing power would be too much! So…as usual… we cheat!
IBL works by using a pre-made static panorama image, and using that as a guide for the lighting. It’s not 100% accurate, but it’s a lot more realistic looking than lighting coming from a flat coloured source! So this:
Is reflecting based on this:
We can change the image too:
Notice how the shirt behind ALSO changes based on the colour, shape and intensity of the light shining on it because, while the effect is more subtle on a matte fabric surface, it’s still there!
Obviously for the BEST result, it’d be best to take a picture of the actual surroundings in your game and use those as your image.
So if you’re wondering why there’s this jump in graphical quality between the PS3/XB360 and the PS4/XB1 that seems greater than a mere increase in polys would allow for, especially on metal things, but can’t place your finger on why, the short answer is Image Based Lightning plus Physical Based Rendering, which I’ll go into next time!