2.5.2.2 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 pattern is used. 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: 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.
|