Version : 3.1 – Living blog – First version was 4 January 2012
With physically based rendering current trend of photo-realistic game, I feel the need to do my lighting equation more physically correct. A good start for this is to try to understand how our currently game lighting equation behave. For a long time, the presence or not in my game lighting equation of term
or
have been more based on trial and error than physics. The origin of these terms in game lighting equations have already been discussed by others [1][3][7][12]. But as I found this subject confusing I dedicated this post only to that topic. This post is not about code, it is about understanding what we do under the hood and why this is correct. I care about this because more correct game lighting equations mean consistency under different lighting condition, so less artists time spend to tweak values. I would like to thank Stephen Hill for all the help he provide me around this topic.
This post is written as a memo for myself and as a help to anyone which was confusing as I was. Any feedback are welcomed.
I will begin this post by talking about Lambertian surface and the specificity of game light’s intensity then talk about diffuse shading and conclude by specular shading. I will not define common term found in lighting field like BRDF, Lambertian surface… See [1] for all these definitions and notation of this post.
Origin of
term confusion
The true origin of the confusing
term come from the Lambertian BRDF which is the most used BRDF in computer graphics. The Lambertian BRDF is a constant define as :

The notation
mean BRDF parametized by light vector
and view vector
. The view vector is not used in the case of Lambertian BRDF.
is what we commonly call diffuse color.
The first confusing
term appear in this formula. It come from a constraint a BRDF should respect which is name conservation of energy. It mean that the outgoing energy cannot be greater than the incoming energy. Or in other word that you can’t create light. The derivation of the
can be found in [3].
As you may note, game Lambertian BRDF have not this
term. Let’s see a light affecting a Lambertian surface in game:
FinalColor = c_diff * c_light * dot(n, l)
To understand where the
disappeard, see how game light’s intensity is define. Games don’t use radiometric measure as the light’s intensity but use a more artist friendly measure [1] :
For artist convenience,
does not correspond to a direct radiometric measure of the light’s intensity; it is specified as the color a white Lambertian surface would have
when illuminated by the light from a direction parallel to the surface normal (
)
Which mean, if you setup a light in a game with color
and point it directly on a diffuse only quad mapped with a white diffuse texture you get the color of
.
Another way to see this definition is by taking the definition of a diffuse texture [2] :
How bright a surface is when lit by a 100% bright white light
Which mean, if you setup a white light in a game with brightness 1 and point it directly on a diffuse only quad mapped with a diffuse texture, you get the color of the diffuse texture.
This is very convenient for artists which don’t need to care about physical meaning of light’s intensity unit.
Theses definitions allows to define the punctual light equation use in game. A punctual light is an infinite small light like directional, point or spot light common in games.
.
The derivation and the notation of this equation is given in [1].
is the resulting exit radiance in the direction of the view vector
which is what you will use as color for your screen pixel.
is not used for Lambertian BRDF.
Using the punctual light equation with a Lambertian BRDF give us :
.
Which I will rewrite more simply by switching to a monochrome light (
is for RGB) :

This shading equation looks familiar except the
term. In fact after simplification we get :

Which is our common game diffuse lighting equation.
This mean that for artists convenience, the value they enter as brightness in light’s settings is in fact the result of the light brightness multiply by
(the energy conserving constant of Lambertian BRDF) . When artists put 1 in brightness, in reality they set a brightness of
. This is represented in the punctual lighting equation by
. In this post, I will define as game light’s unit the fact of multiplying the light brightness by
and as game Lambert BRDF the
term which is linked.
In the following I will describe the consequence of the game light’s unit on common diffuse lighting technic use in game then on common specular lighting technic.
Diffuse lighting in game
Lambert lighting
Read more of this post