Every surface must have a color. In POV-Ray this color is called a pigment . It does
not have to be a single color. It can be a color pattern, a color list or even an image map. Pigments can also be
layered one on top of the next so long as the uppermost layers are at least partially transparent so the ones beneath
can show through. Let's play around with some of these kinds of pigments.
We create a file called texdemo.pov and edit it as follows:
#include "colors.inc"
camera {
location <1, 1, -7>
look_at 0
angle 36
}
light_source { <1000, 1000, -1000> White }
plane {
y, -1.5
pigment { checker Green, White }
}
sphere {
<0,0,0>, 1
pigment { Red }
}
Giving this file a quick test render at 200x150 -A we see that it is a simple red sphere against a
green and white checkered plane. We will be using the sphere for our textures.
1.3.4.1.1 Using Color List Pigments
Before we begin we should note that we have already made one kind of pigment, the color list pigment. In the
previous example we have used a checkered pattern on our plane. There are three other kinds of color list pigments, brick ,
hexagon and the object
pattern. Let's quickly try each of these. First, we change the plane's pigment as follows:
pigment { hexagon Green, White, Yellow }
Rendering this we see a three-color hexagonal pattern. Note that this pattern requires three colors. Now we change
the pigment to...
pigment { brick Gray75, Red rotate -90*x scale .25 }
Looking at the resulting image we see that the plane now has a brick pattern. We note that we had to rotate the
pattern to make it appear correctly on the flat plane. This pattern normally is meant to be used on vertical surfaces.
We also had to scale the pattern down a bit so we could see it more easily. We can play around with these color list
pigments, change the colors, etc. until we get a floor that we like.
1.3.4.1.2 Using Pigment and Patterns
Let's begin texturing our sphere by using a pattern and a color map consisting of three colors. We replace the
pigment block with the following.
pigment {
gradient x
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
}
Rendering this we see that the gradient pattern gives us an interesting pattern of
vertical stripes. We change the gradient direction to y. The stripes are horizontal now. We change the gradient
direction to z. The stripes are now more like concentric rings. This is because the gradient direction is directly
away from the camera. We change the direction back to x and add the following to the pigment block.
pigment {
gradient x
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
rotate -45*z // <- add this line
}
The vertical bars are now slanted at a 45 degree angle. All patterns can be rotated, scaled and translated in this
manner. Let's now try some different types of patterns. One at a time, we substitute the following keywords for gradient
x and render to see the result: bozo , marble ,
agate , granite ,
leopard , spotted
and wood (if we like we can test all patterns listed in section "Patterns").
Rendering these we see that each results in a slightly different pattern. But to get really good results each type
of pattern requires the use of some pattern modifiers.
1.3.4.1.3 Using Pattern Modifiers
Let's take a look at some pattern modifiers. First, we change the pattern type to bozo. Then we add the following
change.
pigment {
bozo
frequency 3 // <- add this line
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
rotate -45*z
}
The frequency modifier determines the number of times the color map repeats itself per unit of size.
This change makes the bozo pattern we saw earlier have many more bands in it. Now we change the pattern
type to marble . When we rendered this earlier, we saw a banded pattern similar to gradient y
that really did not look much like marble at all. This is because marble really is a kind of gradient and it needs
another pattern modifier to look like marble. This modifier is called turbulence . We
change the line frequency 3 to turbulence 1 and render again. That's better! Now let's put frequency
3 back in right after the turbulence and take another look. Even more interesting!
But wait, it gets better! Turbulence itself has some modifiers of its own. We can adjust the turbulence several
ways. First, the float that follows the turbulence keyword can be any value with higher values giving us
more turbulence. Second, we can use the keywords omega , lambda
and octaves to change the turbulence parameters.
Let's try this now:
pigment {
marble
turbulence 0.5
lambda 1.5
omega 0.8
octaves 5
frequency 3
color_map {
[0.00 color Red]
[0.33 color Blue]
[0.66 color Yellow]
[1.00 color Red]
}
rotate 45*z
}
Rendering this we see that the turbulence has changed and the pattern looks different. We play around with the
numerical values of turbulence, lambda, omega and octaves to see what they do.
1.3.4.1.4 Using Transparent Pigments and Layered Textures
Pigments are described by numerical values that give the rgb value of
the color to be used (like color rgb<1,0,0> giving us a red color). But this syntax will give us
more than just the rgb values. We can specify filtering transparency by changing it as follows: color
rgbf<1,0,0,1> . The f stands for filter , POV-Ray's word for filtered
transparency. A value of one means that the color is completely transparent, but still filters the light according
to what the pigment is. In this case, the color will be a transparent red, like red cellophane.
There is another kind of transparency in POV-Ray. It is called transmittance or non-filtering transparency
(the keyword is transmit ; see also rgbt ).
It is different from filter in that it does not filter the light according to the pigment color. It
instead allows all the light to pass through unchanged. It can be specified like this: rgbt <1,0,0,1> .
Let's use some transparent pigments to create another kind of texture, the layered texture. Returning to our
previous example, declare the following texture.
#declare LandArea = texture {
pigment {
agate
turbulence 1
lambda 1.5
omega .8
octaves 8
color_map {
[0.00 color rgb <.5, .25, .15>]
[0.33 color rgb <.1, .5, .4>]
[0.86 color rgb <.6, .3, .1>]
[1.00 color rgb <.5, .25, .15>]
}
}
}
This texture will be the land area. Now let's make the oceans by declaring the following.
#declare OceanArea = texture {
pigment {
bozo
turbulence .5
lambda 2
color_map {
[0.00, 0.33 color rgb <0, 0, 1>
color rgb <0, 0, 1>]
[0.33, 0.66 color rgbf <1, 1, 1, 1>
color rgbf <1, 1, 1, 1>]
[0.66, 1.00 color rgb <0, 0, 1>
color rgb <0, 0, 1>]
}
}
}
Note: how the ocean is the opaque blue area and the land is the clear area which will
allow the underlying texture to show through.
Now, let's declare one more texture to simulate an atmosphere with swirling clouds.
#declare CloudArea = texture {
pigment {
agate
turbulence 1
lambda 2
frequency 2
color_map {
[0.0 color rgbf <1, 1, 1, 1>]
[0.5 color rgbf <1, 1, 1, .35>]
[1.0 color rgbf <1, 1, 1, 1>]
}
}
}
Now apply all of these to our sphere.
sphere {
<0,0,0>, 1
texture { LandArea }
texture { OceanArea }
texture { CloudArea }
}
We render this and have a pretty good rendition of a little planetoid. But it could be better. We do not
particularly like the appearance of the clouds. There is a way they could be done that would be much more realistic.
1.3.4.1.5 Using Pigment Maps
Pigments may be blended together in the same way as the colors in a color map using the same pattern keywords and a pigment_map .
Let's just give it a try.
We add the following declarations, making sure they appear before the other declarations in the file.
#declare Clouds1 = pigment {
bozo
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
#declare Clouds2 = pigment {
agate
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
#declare Clouds3 = pigment {
marble
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
#declare Clouds4 = pigment {
granite
turbulence 1
color_map {
[0.0 color White filter 1]
[0.5 color White]
[1.0 color White filter 1]
}
}
Now we use these declared pigments in our cloud layer on our planetoid. We replace the declared cloud layer with.
#declare CloudArea = texture {
pigment {
gradient y
pigment_map {
[0.00 Clouds1]
[0.25 Clouds2]
[0.50 Clouds3]
[0.75 Clouds4]
[1.00 Clouds1]
}
}
}
We render this and see a remarkable pattern that looks very much like weather patterns on the planet earth. They
are separated into bands, simulating the different weather types found at different latitudes.
More about "pigment"
More about "object"
More about "gradient"
More about "wood"
More about "turbulence"
|