The relative bump size can be scaled using the bump_size modifier. The bump size number can be any number other than 0 but typical values are from about 0.1 to as high as 4.0 or 5.0.

normal { bump_map { gif "stuff.gif" bump_size 5.0 } }

Originally bump_size could only be used inside a bump map but it can now be used with any normal. Typically it is used to override a previously defined size. For example:

normal { My_Normal //this is a previously defined normal identifier bump_size 2.0 }

Use_Index and Use_Color

Usually the bump map converts the color of the pixel in the map to a gray scale intensity value in the range 0.0 to 1.0 and calculates the bumps based on that value. If you specify use_index, the bump map uses the color's palette number to compute as the height of the bump at that point. So, color number 0 would be low and color number 255 would be high (if the image has 256 palette entries). The actual color of the pixels doesn't matter when using the index. This option is only available on palette based formats. The use_color keyword may be specified to explicitly note that the color methods should be used instead. The alternate spelling use_colour is also valid. These modifiers may only be used inside the bump_map statement.

Section 7.6.3

The finish properties of a surface can greatly affect its appearance. How does light reflect? What happens when light passes through? What kind of highlights are visible. To answer these questions you need a finish statement.

The finish statement is the part of a texture which defines the various finish properties to be applied to an object. Like the pigment or normal statement you can omit the surrounding texture block to save typing. Do not forget however that there is a texture implied. For example...

this... can be shortened to this... object { object { My_Object My_Object texture { pigment {color Purple} pigment {color Purple} finish {phong 0.3} finish {phong 0.3} } } }

The most complete form for defining a finish is as follows:

finish { FINISH_IDENTIFIER [ ambient COLOR ] [ diffuse FLOAT ] [ brilliance FLOAT ] [ phong FLOAT ] [ phong_size FLOAT ] [ specular FLOAT ] [ roughness FLOAT ] [ metallic [ FLOAT ] ] [ reflection COLOR ] [ refraction FLOAT ] [ ior FLOAT ] [ caustics FLOAT ] [ fade_distance FLOAT ] [ fade_power FLOAT ] [ irid { thickness FLOAT turbulence VECTOR } ] [ crand FLOAT ] }

The FINISH_IDENTIFIER is optional but should proceed all other items. Any items after the FINISH_IDENTIFIER modify or override settings given in the IDENTIFIER. If no identifier is specified then the items modify the finish values in the current default texture. Note that transformations are not allowed inside a finish because finish items cover the entire surface uniformly.


The light you see in dark shadowed areas comes from diffuse reflection off of other objects. This light cannot be directly modeled using ray-tracing. However we can use a trick called ambient lighting to simulate the light inside a shadowed area.

Ambient light is light that is scattered everywhere in the room. It bounces all over the place and manages to light objects up a bit even where no light is directly shining. Computing real ambient light would take far too much time, so we simulate ambient light by adding a small amount of white light to each texture whether or not a light is actually shining on that texture.

This means that the portions of a shape that are completely in shadow will still have a little bit of their surface color. It's almost as if the texture glows, though the ambient light in a texture only affects the shape it is used on.

Usually a single float value is specified 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 default value is very little ambient light (0.1). The value can range from 0.0 to 1.0. Ambient light affects both shadowed and non-shadowed areas so if you turn up the ambient value you may want to turn down the diffuse value.

Note that this method doesn't account for the color of surrounding objects. If you walk into a room that has red walls, floor and ceiling then your white clothing will look pink from the reflected light. POV-Ray's ambient shortcut doesn't account for this. There is also no way to model specular reflected indirect illumination such as the flashlight shining in a mirror.

You may color the ambient light using one of two methods. You may specify a color rather than a float after the ambient keyword in each finish statement. For example

finish { ambient rgb <0.3,0.1,0.1> } //a pink ambient

You may also specify the overall ambient light source used when calculating the ambient lighting of an object using the global ambient_light setting. The formula is given by


See section "Ambient Light" for details.

Diffuse Reflection Items

When light reflects off of a surface the laws of physics say that it should leave the surface at the exact same angle it came in. This is similar to the way a billiard ball bounces off a bumper of a pool table. This perfect reflection is called specular reflection. However only very smooth polished surfaces reflect light in this way. Most of the time, light reflects and is scattered in all directions by the roughness of the surface. This scattering is called diffuse reflection because the light diffuses or spreads in a variety of directions. It accounts for the majority of the reflected light we see.

POV-Ray and most other ray-tracers can only simulate directly one of these three types of illumination. That is the light which comes directly from actual light sources. Light coming from other objects such as mirrors via specular reflection (shine a flashlight onto a mirror for example). And last not least light coming from other objects via diffuse reflections (look at some dark area under a desk or in a corner: even though a lamp may not directly illuminate that spot you can still see a little bit because light comes from diffuse reflection off of nearby objects).


The keyword diffuse is used in a finish statement to control how much of the light coming directly from any light sources is reflected via diffuse reflection. For example

finish {diffuse 0.7}

means that 70% of the light seen comes from direct illumination from light sources. The default value is diffuse 0.6.


The amount of direct light that diffuses from an object depends upon the angle at which it hits the surface. When light hits at a shallow angle it illuminates less. When it is directly above a surface it illuminates more. The brilliance keyword can be used in a finish statement to vary the way light falls off depending upon the angle of incidence. This controls the tightness of the basic diffuse illumination on objects and slightly adjusts the appearance of surface shininess. Objects may appear more metallic by increasing their brilliance. The default value is 1.0. Higher values from to about 10.0 cause the light to fall off less at medium to low angles. There are no limits to the brilliance value. Experiment to see what works best for a particular situation. This is best used in concert with highlighting.

Crand Graininess

Very rough surfaces, such as concrete or sand, exhibit a dark graininess in their apparent color. This is caused by the shadows of the pits or holes in the surface. The crand keyword can be added to cause a minor random darkening in the diffuse reflection of direct illumination. Typical values range from crand 0.01 to crand 0.5 or higher. The default value is 0. For example:

finish { crand 0.05 }

The grain or noise introduced by this feature is applied on a pixel-by-pixel basis. This means that it will look the same on far away objects as on close objects. The effect also looks different depending upon the resolution you are using for the rendering. For these reasons it is not a very accurate way to model the rough surface effect but some objects still look better with a little crand thrown in.

Note that this should not be used when rendering animations. This is the one of a few truly random features in POV-Ray and will produce an annoying flicker of flying pixels on any textures animated with a crand value.

Next Section
Table Of Contents