Lighting Models are methods/algorithms used to determine the light at the surface of a model. There are many varying methods of computing lighting with shaders. Artists and programmers choose them depending on the level of realism/stylization/performance implications of the model. Below we will cover a range of lighting and shading models.
Lambertian Reflectance, or Diffuse Light, is one of the most common, if not the most common, lighting models used.
This lighting model is view independent, meaning the surface's apparent brightness should not change based on viewpoint. It is a very simple model and can be constucted in pseudocode as follows:
Half-Lambert (Diffuse Wrap)
The Half-Lambert lighting model is a technique first developed in the original Half-Life by Valve. It was developed to prevent the rear of an object losing it's shape and thereby looking flat. This is an extremely forgiving lighting model, and as such is completely non-physical.
The key to the Half-Lambert lighting model is that the Lambert diffuse is halved, then half is added, then it is squared. A common implementation, called diffuse wrap, operates on the idea that instead of using halves, you can use any value between a half and a whole. ie. Instead of:
pow(NdotL * 0.5 + 0.5,2)
One could use:
pow(NdotL * wrapValue + (1-wrapValue),2)
Where wrap value is anything between 0.5 and 1.
Below is an implementation of the Half-Lambert lighting Model:
This is less of a lighting model, and more of a lighting tweak to show what you can do with simple mathematical operations on standard lighting models. This method works by breaking the lighting direction up into bands. This method can then be passed into any standard lighting model by replacing NdotL with the banded NdotL as shown below:
The Minnaert Lighting Model was originally designed to replicate the shading of the moon, so it's often called the moon shader. Minnaert's good for simulating porous or fibrous surfaces, such as the moon or velvet. These surfaces can cause a lot of light to back-scatter. This is especially apparent where the fibers tend to be mainly perpendicular to the surface like velvet, velour, or even carpets.
This simulation provides results that are pretty close to Oren-Nayar, which is also frequently called a velvet or moon shader.
Below is an example approximation of Minnaert Lighting: