Previous:Slope Maps Main Index Next:Bump Maps

#### Normal Maps and Normal Lists

Most of the time you will apply single normal pattern to an entire surface but you may also create a pattern or blend of normals using a `normal_map`. The syntax for a `normal_map` is identical to a `pigment_map` except you specify a `normal` in each map entry.

The syntax for `normal_map` is as follows:

NORMAL_MAP:

`
  normal_map{
` NORMAL_MAP_BODY `}`
NORMAL_MAP_BODY:
  NORMAL_MAP_IDENTIFIER
| NORMAL_MAP_ENTRY...
NORMAL_MAP_ENTRY:
`
  [
` Value NORMAL_BODY `]`

Where Value is a float value between 0.0 and 1.0 inclusive and each NORMAL_BODY is anything which can be inside a `normal{...}` statement. The `normal` keyword and `{}` braces need not be specified.

Note that the `[]` brackets are part of the actual NORMAL_MAP_ENTRY. They are not notational symbols denoting optional parts. The brackets surround each entry in the normal map. There may be from 2 to 256 entries in the map.

For example

      normal {

        gradient x       //this is the PATTERN_TYPE

        normal_map {

          [0.3  bumps scale 2]

          [0.3  dents]

          [0.6  dents]

          [0.9  marble turbulence 1]

        }

      }

When the `gradient x` function returns values from 0.0 to 0.3 then the scaled bumps normal is used. From 0.3 to 0.6 dents are From 0.6 up to 0.9 a blend of dents and a turbulent marble is used. From 0.9 on up only the turbulent marble is used.

Normal maps may be nested to any level of complexity you desire. The normals in a map may have slope maps or normal maps or any type of normal you want.

A normal map is also used with the `average` normal type. See "Average" for details.

Entire normals in a normal list may also be used with the block patterns such as `checker`, `hexagon` and `brick`. For example...

      normal {

        checker

          normal { gradient x scale .2 }

          normal { gradient y scale .2 }

        }

      }

Note that in the case of block patterns the `normal` wrapping is required around the normal information.

You may not use `normal_map` or individual normals with a `bump_map`. See section "Texture Maps" for an alternative way to do this.

You may declare and use normal map identifiers but the only way to declare a normal block pattern list is to declare a normal identifier for the entire normal.

Previous:Slope Maps Main Index Next:Bump Maps