The final part of a POV-Ray texture is the finish . It controls the properties of
the surface of an object. It can make it shiny and reflective, or dull and flat. It can also specify what happens to
light that passes through transparent pigments, what happens to light that is scattered by less-than-perfectly-smooth
surfaces and what happens to light that is reflected by surfaces with thin-film interference properties. There are
twelve different properties available in POV-Ray to specify the finish of a given object. These are controlled by the
following keywords: ambient , diffuse ,
brilliance , phong ,
specular , metallic ,
reflection , crand
and iridescence . Let's design a couple of textures that make
use of these parameters.
Since objects in POV-Ray are illuminated by light sources, the portions of those objects that are in shadow would
be completely black were it not for the first two finish properties, ambient and diffuse .
Ambient is used to simulate the light that is scattered around the scene that does not come directly from a light
source. Diffuse determines how much of the light that is seen comes directly from a light source. These two keywords
work together to control the simulation of ambient light. Let's use our gray sphere to demonstrate this. Let's also
change our plane back to its original green and white checkered pattern.
plane {
y, -1.5
pigment {checker Green, White}
}
sphere {
<0,0,0>, 1
pigment { Gray75 }
finish {
ambient .2
diffuse .6
}
}
In the above example, the default values for ambient and diffuse are used. We render this to see what the effect is
and then make the following change to the finish.
ambient 0
diffuse 0
The sphere is black because we have specified that none of the light coming from any light source will be reflected
by the sphere. Let's change diffuse back to the default of 0.6.
Now we see the gray surface color where the light from the light source falls directly on the sphere but the shaded
side is still absolutely black. Now let's change diffuse to 0.3 and ambient to 0.3.
The sphere now looks almost flat. This is because we have specified a fairly high degree of ambient light and only
a low amount of the light coming from the light source is diffusely reflected towards the camera. The default values
of ambient and diffuse are pretty good averages and a good starting point. In most cases,
an ambient value of 0.1 ... 0.2 is sufficient and a diffuse value of 0.5 ... 0.7 will usually do the job. There are a
couple of exceptions. If we have a completely transparent surface with high refractive and/or reflective values, low
values of both ambient and diffuse may be best. Here is an example:
sphere {
<0,0,0>, 1
pigment { White filter 1 }
finish {
ambient 0
diffuse 0
reflection .25
specular 1
roughness .001
}
interior { ior 1.33 }
}
This is glass, obviously. Glass is a material that takes nearly all of its appearance from its surroundings. Very
little of the surface is seen because it transmits or reflects practically all of the light that shines on it. See glass.inc
for some other examples.
If we ever need an object to be completely illuminated independently of the lighting situation in a given scene we
can do this artificially by specifying an ambient value of 1 and a diffuse value of 0. This
will eliminate all shading and simply give the object its fullest and brightest color value at all points. This is
good for simulating objects that emit light like light bulbs and for skies in scenes where the sky may not be
adequately lit by any other means.
Let's try this with our sphere now.
sphere {
<0,0,0>, 1
pigment { White }
finish {
ambient 1
diffuse 0
}
}
Rendering this we get a blinding white sphere with no visible highlights or shaded parts. It would make a pretty
good street light.
1.3.4.3.2 Using Surface Highlights
In the glass example above, we noticed that there were bright little hotspots on the surface. This gave
the sphere a hard, shiny appearance. POV-Ray gives us two ways to specify surface specular highlights. The first is
called Phong highlighting. Usually, Phong highlights are described using two keywords: phong
and phong_size . The float that follows phong
determines the brightness of the highlight while the float following phong_size determines its size.
Let's try this.
sphere {
<0,0,0>, 1
pigment { Gray50 }
finish {
ambient .2
diffuse .6
phong .75
phong_size 25
}
}
Rendering this we see a fairly broad, soft highlight that gives the sphere a kind of plastic appearance. Now let's
change phong_size to 150. This makes a much smaller highlight which gives the sphere the appearance of
being much harder and shinier.
There is another kind of highlight that is calculated by a different means called specular highlighting.
It is specified using the keyword specular and operates in
conjunction with another keyword called roughness . These two
keywords work together in much the same way as phong and phong_size to create highlights
that alter the apparent shininess of the surface. Let's try using specular in our sphere.
sphere {
<0,0,0>, 1
pigment { Gray50 }
finish {
ambient .2
diffuse .6
specular .75
roughness .1
}
}
Looking at the result we see a broad, soft highlight similar to what we had when we used phong_size of
25. Change roughness to .001 and render again. Now we see a small, tight highlight similar to what we had
when we used phong_size of 150. Generally speaking, specular is slightly more accurate and therefore
slightly more realistic than phong but you should try both methods when designing a texture. There are even times when
both phong and specular may be used on a finish.
1.3.4.3.3 Using Reflection, Metallic and Metallic
There is another surface parameter that goes hand in hand with highlights, reflection .
Surfaces that are very shiny usually have a degree of reflection to them. Let's take a look at an example.
sphere {
<0,0,0>, 1
pigment { Gray50 }
finish {
ambient .2
diffuse .6
specular .75
roughness .001
reflection {
.5
}
}
}
We see that our sphere now reflects the green and white checkered plane and the black background but the gray color
of the sphere seems out of place. This is another time when a lower diffuse value is needed. Generally, the higher reflection
is the lower diffuse should be. We lower the diffuse value to 0.3 and the ambient value to 0.1 and render
again. That is much better. Let's make our sphere as shiny as a polished gold ball bearing.
sphere {
<0,0,0>, 1
pigment { BrightGold }
finish {
ambient .1
diffuse .1
specular 1
roughness .001
reflection {
.75
}
}
}
That is close but there is something wrong, the colour of the reflection and the highlight. To make the surface
appear more like metal the keyword metallic is used. We add
it now to see the difference.
sphere {
<0,0,0>, 1
pigment { BrightGold }
finish {
ambient .1
diffuse .1
specular 1
roughness .001
reflection {
.75
metallic
}
}
}
The reflection has now more of the gold color than the color of its environment. Last detail, the highlight. We add
another metallic statement, now to the finish and not inside the reflection block.
sphere {
<0,0,0>, 1
pigment { BrightGold }
finish {
ambient .1
diffuse .1
specular 1
roughness .001
metallic
reflection {
.75
metallic
}
}
}
We see that the highlight has taken on the color of the surface rather than the light source. This gives the
surface a more metallic appearance.
Iridescence is what we see on the surface of an oil slick when the sun shines on it. The rainbow effect is
created by something called thin-film interference (read section "Iridescence"
for details). For now let's just try using it. Iridescence is specified by the irid
statement and three values: amount, thickness and turbulence . The amount is the contribution
to the overall surface color. Usually 0.1 to 0.5 is sufficient here. The thickness affects the "busyness" of
the effect. Keep this between 0.25 and 1 for best results. The turbulence is a little different from pigment or normal
turbulence. We cannot set octaves , lambda or omega but we can specify an amount
which will affect the thickness in a slightly different way from the thickness value. Values between 0.25 and 1 work
best here too. Finally, iridescence will respond to the surface normal since it depends on the angle of incidence of
the light rays striking the surface. With all of this in mind, let's add some iridescence to our glass sphere.
sphere {
<0,0,0>, 1
pigment { White filter 1 }
finish {
ambient .1
diffuse .1
reflection .2
specular 1
roughness .001
irid {
0.35
thickness .5
turbulence .5
}
}
interior{
ior 1.5
fade_distance 5
fade_power 1
caustics 1
}
}
We try to vary the values for amount, thickness and turbulence to see what changes they make. We also try to add a normal
block to see what happens.
More about "finish"
More about "ambient"
|