Section 7.6.4.5.1
Constant

The constant function gives the constant value MAX_VALUE regardless of the interval value and the type of density mapping. It is calculated by the trivial formula f(r) = MAX_VALUE.


The constant density function.

The constant density function can be used to create a constant particle distribution that is only constrained by the container object.


Section 7.6.4.5.2
Linear

A linear falloff from MAX_VALUE at r=0 to zero at r=1 is created with the linear density function. It is given by:

f(r) = MAX_VALUE * (1 - r)


The linear density function.


Section 7.6.4.5.3
Cubic

The cubic function gives a smooth blend between the maximum value MAX_VALUE at r=0 and 0 at r=1. It is given by:

f(r) = MAX_VALUE * (2 * r - 3) * r * r + 1


The cubic density function.

This is actually a cubic spline.


Section 7.6.4.5.4
Poly

A polynomial function can be used to get a large variety of density functions. All have the maximum value MAX_VALUE at r=0 and the minimum value 0 at r=1. It is given by:

f(r) = MAX_VALUE * (1 - r) ^ EXPONENT


The polynomial density function for different exponent values.

The exponent is given by the exponent keyword. In case of EXPONENT=0 you'll get a linear falloff.


Section 7.6.4.6
Halo Color Map

The density f(r), which ranges from 0 to MAX_VALUE, is mapped onto the color map to get the color and differential translucency for each volume element as the ray marches through the density field (the final color of attenuating halos is calculated from the total density; see section "Halo Mapping" and section "Attenuating" ). The differential translucency determines for each value of f(r) how much the total opacity has to be increased (or decreased).

The color map is specified by:

halo { [ colour_map COLOUR_MAP ] }

The differential translucency is stored in the transmittance channel of the map's color entries. A simple example is given by

colour_map { [0 rgbt<1, 1, 1, 1>] [1 rgbt<1, 1, 1, 0>] }

In this example areas with a low density (small f(r)) will be translucent (large differential translucency of 1=100%) and areas with a high density (large f(r)) will be opaque (small differential translucency of 0=0%). You should note that negative transmittance values can be used to create very dense fields.

In the case of the dust halo the filter channels of the colors in the color map are used to specify the amount of light that will be filtered by the corresponding color map entry. For all other halo types the filter value is ignored.

There is no default color map.


Section 7.6.4.7
Halo Sampling

The halo effects are calculated by marching through the density field along a ray. At discrete steps samples are taken from the density field and evaluated according to the color map and all other parameters. The effects of all volume elements are accumulated to get the total effect.

The following parameters are used to tune the sampling process:

halo { [ samples SAMPLES ] [ aa_level AA_LEVEL ] [ aa_threshold AA_THRESHOLD ] [ jitter JITTER ] }

The individual sampling parameters are described in the sections below.


Section 7.6.4.7.1
Number of Samples

The number of samples that are taken along the ray inside the halo container object is specified by the samples keyword. The greater the number of samples the more denser the density field is sampled and the more accurate but slower the result will be.

The default number of samples is 10. This is sufficient for simple density fields that don't use turbulence.

High turbulence values and dust halos normally need a large number of samples to avoid aliasing artifacts.


Section 7.6.4.7.2
Super-Sampling

The sampling is prone to alias (like the atmosphere sampling in section "Atmosphere" ). One way to reduce possible aliasing artifacts is to use super-sampling. If two neighboring samples differ too much an additional sampling is taken in-between. This process recurses until the values of the samples are close too each other or the maximum recursion level given by AA_LEVEL is reached. The threshold to kick super-sampling in is given by AA_THRESHOLD .

By default super-sampling is not used. The default values for AA_THRESHOLD and AA_LEVEL are 0.3 and 3 respectively.


Section 7.6.4.7.3
Jitter

Jitter can be used to introduce some noise to the sampling locations. This may help to reduce aliasing artifacts at the cost of an increased noise level in the image. Since the human visual system is much more forgiving to noise than it is to regular patterns this is not much of a problem.

By default jittering is not used. The values should be smaller than 1.0.

Note that jittering is used even if super-sampling is not used.


Section 7.6.4.8
Halo Modifiers

This section covers all general halo modifiers. They are:

halo { [ turbulence <TURBULENCE> ] [ octaves OCTAVES ] [ omega OMEGA ] [ lambda LAMBDA ] [ frequency FREQUENCY ] [ phase PHASE ] [ scale <VECTOR> ] [ rotate <VECTOR> ] [ translate <VECTOR> ] }

***STILL BEING WRITTEN*** [DB]


Section 7.6.4.8.1
Turbulence Modifier

***STILL BEING WRITTEN*** [DB]

Section 7.6.4.8.2
Octaves Modifier

***STILL BEING WRITTEN*** [DB]

Section 7.6.4.8.3
Omega Modifier

***STILL BEING WRITTEN*** [DB]

Section 7.6.4.8.4
Lambda Modifier

***STILL BEING WRITTEN*** [DB]

Section 7.6.4.8.5
Frequency Modifier

The frequency parameter adjusts the number of times the density interval is mapped onto itself, i. e. the range from 0.0 to 1.0, before it is mapped onto the color map. The formula doing this is:

f_new(r) = (f(r) * FREQUENCY + PHASE) modulo 1.0

Thus the halo color map will be repeated by the specified frequency.


Section 7.6.4.8.6
Phase Modifier

The phase parameter determines the offset at which the mapping of the density field onto itself starts. See the formula in the previous section for how the pahse is used.

Thus the color entry for density f(r)=0 can be moved to phase\!\!\!\!\mod 1.


Section 7.6.4.8.7
Transformation Modifiers

Halos can be transformed using the rotate, scale and translate keywords. You have to be careful that you don't move the density field out of the container object though.

Section 7.6.5
Special Textures

Special textures are complex textures made up of multiple textures. The component textures may be plain textures or may be made up of special textures. A plain texture has just one pigment, normal and finish statement (and maby some halo statements). Even a pigment with a pigment map is still one pigment and thus considered a plain texture as are normals with normal map statements.

Special textures use either a texture_map keyword to specify a blend or pattern of textures or they use a bitmap similar to an image map called a material map (specified with the material_map keyword).

There are restrictions on using special textures. A special texture may not be used as a default texture (see section "Default Directive" ). A special texture cannot be used as a layer in a layered texture however you may use layered textures as any of the textures contained within a special texture.


Section 7.6.5.1
Texture Maps

In addition to specifying blended color with a color map or a pigment map you may create a blend of textures using texture_map . The syntax for a texture map is identical to the pigment map except you specify a texture in each map entry.

A texture map is specified by...

texture{ PATTERN_TYPE texture_map { [ NUM_1 TEXTURE_BODY_1] [ NUM_2 TEXTURE_BODY_2] [ NUM_3 TEXTURE_BODY_3] ... } TEXTURE_MODIFIERS... }

Where NUM_1, NUM_2, ... are float values between 0.0 and 1.0 inclusive. A TEXTURE_BODY is anything that would normally appear inside a texture {... } statement but the texture keyword and {} braces are not needed. Note that the [] brackets are part of the actual statement. They are not notational symbols denoting optional parts. The brackets surround each entry in the map. There may be from 2 to 256 entries in the map.

For example:

texture { gradient x //this is the PATTERN_TYPE texture_map { [0.3 pigment{Red} finish{phong 1}] [0.3 T_Wood11] //this is a texture identifier [0.6 T_Wood11] [0.9 pigment{DMFWood4} finish{Shiny}] } }

When the gradient x function returns values from 0.0 to 0.3 the red highlighted texture is used. From 0.3 to 0.6 the texture identifier T_Wood11 is used. From 0.6 up to 0.9 a blend of T_Wood11 and a shiny DMFWood4 is used. From 0.9 on up only the shiny wood is used.

Texture maps may be nested to any level of complexity you desire. The textures in a map may have color maps or texture maps or any type of texture you want.

The blended area of a texture map works by fully calculating both contributing textures in their entirety and then linearly interpolating the apparent colors. This means that reflection, refraction and lighting calculations are done twice for every point. This is in contrast to using a pigment map and a normal map in a plain texture, where the pigment is computed, then the normal, then reflection, refraction and lighting are calculated once for that point.

Entire textures may also be used with the block patterns such as checker, hexagon and brick. For example...

texture { checker texture { T_Wood12 scale .8 } texture { pigment { White_Marble } finish { Shiny } scale .5 } } }

Note that in the case of block patterns the texture {... } wrapping is required around the texture information. Also note that this syntax prohibits the use of a layered texture however you can work around this by declaring a texture identifier for the layered texture and referencing the identifier.

A texture map is also used with the average pattern type. See "Average" for details.


Section 7.6.5.2
Tiles

Earlier versions of POV-Ray had a special texture called tiles texture that created a checkered pattern of textures. Although it is still supported for backwards computability you should use a checker block texture pattern described in section "Texture Maps" rather than tiles textures.

Section 7.6.5.3
Material Maps

The material map special texture extends the concept of image maps to apply to entire textures rather than solid colors. A material map allows you to wrap a 2-D bit-mapped texture pattern around your 3-D objects.

Instead of placing a solid color of the image on the shape like an image map, an entire texture is specified based on the index or color of the image at that point. You must specify a list of textures to be used like a texture palette rather than the usual color palette.

When used with mapped file types such as GIF, and some PNG and TGA images, the index of the pixel is used as an index into the list of textures you supply. For unmapped file types such as some PNG and TGA images the 8 bit value of the red component in the range 0-255 is used as an index.

If the index of a pixel is greater than the number of textures in your list then the index is taken modulo N where N is the length of your list of textures.


Section 7.6.5.3.1
Specifying a Material Map

The syntax of a material map is...

texture { material_map { FILE_TYPE "filename" BITMAP_MODIFIERS... texture {..}. // First used for index 0 texture {..}. // Second texture used for index 1 texture {..}. // Third texture used for index 2 texture {..}. // Fourth texture used for index 3 // and so on for however many used. } TRANSFORMATION... }

Where FILE_TYPE is one of the following keywords gif , tga , iff , ppm , pgm , png or sys . This is followed by the name of the file using any valid string expression. Several optional modifiers may follow the file specification. The modifiers are described below. Note that earlier versions of POV-Ray allowed some modifiers before the FILE_TYPE but that syntax is being phased out in favor of the syntax described here.

Filenames specified in the material_map statements will be searched for in the home (current) directory first and, if not found, will then be searched for in directories specified by any +L switches or Library_Path options. This would facilitate keeping all your material map files in a separate subdirectory and specifying a library path to them. Note that any operating system default paths are not searched unless you also specify them as a Library_Path .

By default, the material is mapped onto the x-y-plane. The material is projected onto the object as though there were a slide projector somewhere in the -z-direction. The material exactly fills the square area from (x,y) coordinates (0,0) to (1,1) regardless of the bitmap's original size in pixels. If you would like to change this default you may translate, rotate or scale the texture to map it onto the object's surface as desired.

The file name is optionally followed by one or more BITMAP_MODIFIERS. See "Bitmap Modifiers" for other details.

After a material_map statement but still inside the texture statement you may apply any legal texture modifiers. Note that no other pigment, normal, finish or halo statements may be added to the texture outside the material map. The following is illegal:

texture { material_map { gif "matmap.gif" texture {T1} texture {T2} texture {T3} } finish {phong 1.0} }

The finish must be individually added to each texture.

Note that earlier versions of POV-Ray allowed such specifications but they were ignored. The above restrictions on syntax were necessary for various bug fixes. This means some POV-Ray 1.0 scenes using material maps many need minor modifications that cannot be done automatically with the version compatibility mode.

If particular index values are not used in an image then it may be necessary to supply dummy textures. It may be necessary to use a paint program or other utility to examine the map file's palette to determine how to arrange the texture list.

The textures within a material map texture may be layered but material map textures do not work as part of a layered texture. To use a layered texture inside a material map you must declare it as a texture identifier and invoke it in the texture list.


Section 7.6.6
Layered Textures

It is possible to create a variety of special effects using layered textures. A layered texture consists of several textures that are partially transparent and are laid one on top of the other to create a more complex texture. The different texture layers show through the transparent portions to create the appearance of one texture that is a combination of several textures.

You create layered textures by listing two or more textures one right after the other. The last texture listed will be the top layer, the first one listed will be the bottom layer. All textures in a layered texture other than the bottom layer should have some transparency. For example:

object { My_Object texture {T1} // the bottom layer texture {T2} // a semi-transparent layer texture {T3} // the top semi-transparent layer }

In this example T2 shows only where T3 is transparent and T1 shows only where T2 and T3 are transparent.

The color of underlying layers is filtered by upper layers but the results do not look exactly like a series of transparent surfaces. If you had a stack of surfaces with the textures applied to each, the light would be filtered twice: once on the way in as the lower layers are illuminated by filtered light and once on the way out. Layered textures do not filter the illumination on the way in. Other parts of the lighting calculations work differently as well. The results look great and allow for fantastic looking textures but they are simply different from multiple surfaces. See stones.inc in the standard include files directory for some magnificent layered textures.

Note layered textures must use the texture {... } wrapped around any pigment, normal or finish statements. Do not use multiple pigment, normal or finish statements without putting them inside the texture statement.

Layered textures may be declared. For example

#declare Layered_Examp = texture {T1} texture {T2} texture {T3}

may be invoked as follows:

object { My_Object texture { Layer_Examp // Any pigment, normal or finish here // modifies the bottom layer only. } }

If you wish to use a layered texture in a block pattern, such as checker, hexagon, or brick, or in a material map, you must declare it first and then reference it inside a single texture statement. A special texture cannot be used as a layer in a layered texture however you may use layered textures as any of the textures contained within a special texture.


Next Section
Table Of Contents