2.5.3.4 Specular Reflection
When light does not diffuse and it does reflect at the same angle as it hits an object, it is called specular
reflection. Such mirror-like reflection is controlled by the reflection {...} block in a finish
statement.
Syntax:
finish {
reflection {
[COLOR_REFLECTION_MIN,] COLOR_REFLECTION_MAX
[fresnel BOOL_ON_OFF]
[falloff FLOAT_FALLOFF]
[exponent FLOAT_EXPONENT]
[metallic FLOAT_METALLIC]
}
}
[interior { ior IOR }]
The simplest use would be a perfect mirror:
finish { reflection {1.0} ambient 0 diffuse 0 }
This gives the object a mirrored finish. It will reflect all other elements in the scene. Usually a single float
value is specified after the keyword even though the syntax calls for a color. For example a float value of 0.3 gets
promoted to the full color vector <0.3,0.3,0.3,0.3,0.3> which is acceptable because only the red, green and blue
parts are used.
The value can range from 0.0 to 1.0. By default there is no reflection.
Note:
-
Adding reflection to a texture makes it take longer to render because an additional ray must be traced.
-
The reflected light may be tinted by specifying a color rather than a float.
For example: finish
{ reflection rgb <1,0,0> } gives a red mirror that only reflects red light.
-
Although such reflection is called specular it is not controlled by the
specular keyword. That
keyword controls a specular highlight.
-
The old syntax for simple reflection: "
reflection COLOR " and "reflection_exponent
Float" without braces is still supported for backward compatibility.
falloff sets a falloff exponent in the variable reflection. This is the exponent telling how fast the
reflectivity will fall off, i.e. linear, squared, cubed, etc.
The metallic keyword is similar in function to the "metallic" keyword used for highlights in
finishes: it simulates the reflective properties of metallic surfaces, where reflected light takes on the colour of
the surface. When metallic is used, the "reflection" color is multiplied by the pigment color
at each point. You can specify an optional float value, which is the amount of influence the metallic
keyword has on the reflected color. metallic uses the Fresnel equation so that the color of the light is
reflected at glancing angles, and the color of the metal is reflected for angles close to the surface's normal.
exponent POV-Ray uses a limited light model that cannot distinguish between objects which are
simply brightly colored and objects which are extremely bright. A white piece of paper, a light bulb, the sun, and a
supernova, all would be modeled as rgb<1,1,1> and slightly off-white objects would be only slightly
darker. It is especially difficult to model partially reflective surfaces in a realistic way. Middle and lower
brightness objects typically look too bright when reflected. If you reduce the reflection value, it tends
to darken the bright objects too much. Therefore the optional exponent keyword has been added. It
produces non-linear reflection intensities. The default value of 1.0 produces a linear curve. Lower values darken
middle and low intensities and keeps high intensity reflections bright. This is a somewhat experimental feature
designed for artistic use. It does not directly correspond to any real world reflective properties.
Variable reflection Many
materials, such as water, ceramic glaze, and linoleum are more reflective when viewed at shallow angles. This can be
simulated by also specifying a minimum reflection in the reflection {...} statement. For example:
finish { reflection { 0.03, 1 }}
uses the same function as the standard reflection, but the first parameter sets the minimum reflectivity. It could
be a color vector or a float (which is automatically promoted to a gray vector). This minimum value is how reflective
the surface will be when viewed from a direction parallel to its normal. The second parameter sets the maximum
reflectivity, which could also be a color vector or a float (which is automatically promoted to a gray vector). This
maximum parameter is how reflective the surface will be when viewed at a 90-degree angle to its normal.
Note: You can make maximum reflection less than minimum reflection if you want,
although the result is something that does not occur in nature.
When adding the fresnel keyword, the Fresnel reflectivity function is used instead of standard
reflection. It calculates reflectivity using the finish's IOR. So with a fresnel reflection_type an interior {
ior IOR } statement is required, even with opaque pigments. Remember that in real life many opaque objects have
a thin layer of transparent glaze on their surface, and it is the glaze (which -does- have an IOR) that is reflective.
|