|Blender Documentation Volume I - User Guide: Last modified July 08 2004 S68|
|Prev||Chapter 10. Materials and Textures||Next|
Relevant to Blender v2.31
Unlike Diffusion, Specular reflection is viewpoint dependent. According to Snell's Law, light striking a specular surface will be reflected at an angle which mirrors the incident light angle, which makes the viewing angle very important. Specular reflection forms tight, bright highlights, making the surface appear glossy (Figure 10-3).
In reality, Diffusion and Specular reflection are generated by exactly the same process of light scattering. Diffusion is dominant from a surface which has so much small-scale roughness in the surface, with respect to wavelength, that light is reflected in many different directions from each tiny bit of the surface, with tiny changes in surface angle.
Specular reflection, on the other hand, dominates on a surface which is smooth, with respect to wavelength. This implies that the scattered rays from each point of the surface are directed almost in the same direction, rather than being diffusely scattered. It's just a matter of the scale of the detail. If the surface roughness is much smaller than the wavelength of the incident light it appears flat and acts as a mirror.
It is important to stress that the Specular reflection phenomenon discussed here is not the reflection we would see in a mirror, but rather the light highlights we would see on a glossy surface. To obtain true mirror-like reflections you would need to use a raytracer. Blender is not a raytracer as such, but it can produce convincing mirror-like surfaces via careful application of textures, as will be shown later on.
Like Diffusion, Specular reflection has a number of different implementations, or specular shaders. Again, each of these implementations shares two common parameters: the Specular colour and the energy of the specularity, in the [0-2] range. This effectively allows more energy to be shed as specular reflection as there is incident energy. As a result, a material has at least two different colors, a diffuse, and a specular one. The specular color is normally set to pure white, but it can be set to different values to obtain interesting effects.
The four specular shaders are:
CookTorr - This was Blender's only Specular Shader up to version 2.27. Indeed, up to that version it was not possible to separately set diffuse and specular shaders and there was just one plain material implementation. Besides the two standard parameters this shader uses a third, hardness, which regulates the width of the specular highlights. The lower the hardness, the wider the highlights.
Phong - This is a different mathematical algorithm, used to compute specular highlights. It is not very different from CookTor, and it is governed by the same three parameters.
Blinn - This is a more 'physical' specular shader, thought to match the Oren-Nayar diffuse one. It is more physical because it adds a fourth parameter, an index of refraction (IOR), to the aforementioned three. This parameter is not actually used to compute refraction of rays (a ray-tracer is needed for that), but to correctly compute specular reflection intensity and extension via Snell's Law. Hardness and Specular parameters give additional degrees of freedom.
Toon - This specular shader matches the Toon diffuse one. It is designed to produce the sharp, uniform highlights of toons. It has no hardness but rather a Size and Smooth pair of parameters which dictate the extension and sharpness of the specular highlights.
Thanks to this flexible implementation, which keeps separate the diffuse and specular reflection phenomena, Blender allows us to easily control how much of the incident light striking a point on a surface is diffusely scattered, how much is reflected as specularity, and how much is absorbed. This, in turn, determines in what directions (and in what amounts) the light is reflected from a given light source; that is, from what sources (and in what amounts) the light is reflected toward a given point on the viewing plane.
It is very important to remember that the material color is just one element in the rendering process. The color is actually the product of the light color and the material color.