Search code examples
lightphongpbr

Why light color in PBR material can be larger than 1?


Recently, I implemented the PBR lighting following the LearnOpenGL tutorial. But I found that the light color the tutorial use is very large (e.g. 20~300, https://learnopengl.com/PBR/Lighting), which makes me feel confused as, in normal Phong lighting model, light color is usually less than 1 (correct me if I am wrong).

In my implementation, I also noticed a similar phenomenon, the sponza model looks pretty dark with two light sources (ambient: 0.1, directional light: 1):

enter image description here

But when I change the directional light color to 10, the scene looks much brighter.

enter image description here

It seems that the light color used in Phong is a little different from the light color used in PBR material. The latter should be much greater than the former to light a scene up. Am I right?


Solution

  • PBR (Physically Based Lightning) is a model based on physical energy values. So there aren't maximum values to the energy your light source can emit.

    This is also why you need a framebuffer with more than 8bits per component.

    The sun is 100.000 Lux (a unit to measure how bright something is), but an Office lighting is 320-500.

    The range of possible light is huge! So you can't set a maximum and say everything is between 0 and 1. There is no upper limit.

    That is why the step where you go from your HDR frame buffer to you 8 bit frame buffer is very important. You usually need to get an "average" value of light in you scene to do eye adaptation to the brightness (or called auto exposure) and tone mapping.

    One of the strengths of PBR is that you no longer need to tweak each of your light to get a good looking result. YOu can simply give them their real life values, and it will "just work".