Previous:Bump Maps Main Index Next:Ambient

### Finish

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

The syntax for `finish` is as follows:

FINISH:
`
  finish {
` [FINISH_IDENTIFIER] [FINISH_ITEMS...] `}`
FINISH_ITEMS:
`
  ambient
` COLOR | `diffuse` Amount | `brilliance` Amount | `
  phong
` Amount | `phong_size` Amount | `
  specular
` Amount | `roughness` Amount | `
  metallic
` [Amount] | `reflection` COLOR | `reflection_exponent` Amount | `
  irid {
` Irid_Amount [IRID_ITEMS...] `}` | `crand` Amount
IRID_ITEMS:
`
  thickness
` Amount | `turbulence` Amount

The FINISH_IDENTIFIER is optional but should proceed all other items. Any items after the FINISH_IDENTIFIER modify or override settings given in the FINISH_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. Each of the FINISH_ITEMS listed above is described in sub-sections below.

In earlier versions of POV-Ray, the `refraction`, `ior`, and `caustics` keywords were part of the `finish` statement but they are now part of the `interior` statement. They are still supported under `finish` for backward compatibility but the results may not be 100% identical to previous versions. See "Why are Interior and Media Necessary?" for details.

A `finish` statement is part of a `texture` specification. However it can be tedious to use a `texture` statement just to add a highlights or other lighting properties to an object. Therefore you may attach a finish directly to an object without explicitly specifying that it as part of a texture. For example instead of this:

      object {My_Object texture{finish{phong 0.5}}}

you may shorten it to:

      object {My_Object finish{phong 0.5}}

Note however that doing so creates an entire `texture` structure with default `pigment` and `normal` statements just as if you had explicitly typed the full `texture{...}` around it.

Finish identifiers may be declared to make scene files more readable and to parameterize scenes so that changing a single declaration changes many values. An identifier is declared as follows.

FINISH_DECLARATION:
`
  #declare
`IDENTIFIER `=` FINISH | `
  #local
`IDENTIFIER `=` FINISH

Where IDENTIFIER is the name of the identifier up to 40 characters long and FINISH is any valid `finish` statement. See "#declare vs. #local" for information on identifier scope.

Previous:Bump Maps Main Index Next:Ambient