6.4.8 Repeat Warp
From [pov:6.7.12.6.2]:
The repeat warp causes a section of the pattern to be repeated over and over.
It takes a slice out of the pattern and makes multiple copies of it
side-by-side. The warp has many uses but was originally designed to make it
easy to model wood veneer textures. Veneer is made by taking very thin slices
from a log and placing them side-by-side on some other backing material. You
see side-by-side nearly identical ring patterns but each will be a slice
perhaps 1/32th of an inch deeper.
The syntax for a repeat warp is
REPEAT_WARP:
warp { repeat <Direction> [REPEAT_ITEMS...] }
REPEAT_ITEMS:
offset <Amount> | flip <Axis>
The repeat vector specifies the direction in which the pattern repeats and the
width of the repeated area. This vector must lie entirely along an axis. In
other words, two of its three components must be 0. For example
pigment {
wood
warp { repeat 2*x }
}
which means that from x=0 to x=2 you get whatever the pattern usually is. But
from x=2 to x=4 you get the same thing exactly shifted two units over in the
x-direction. To evaluate it you simply take the x-coordinate modulo 2.
Unfortunately you get exact duplicates which isn't very realistic. The optional
offset vector tells how much to translate the pattern each time it repeats. For
example
pigment {
wood
warp {repeat x*2 offset z*0.05}
}
means that we slice the first copy from x=0 to x=2 at z=0 but at x=2 to x=4 we
offset to z=0.05. In the 4 to 6 interval we slice at z=0.10. At the n-th copy
we slice at 0.05 n z. Thus each copy is slightly different. There are no
restrictions on the offset vector.
Finally the flip vector causes the pattern to be flipped or mirrored every
other copy of the pattern. The first copy of the pattern in the positive
direction from the axis is not flipped. The next farther is, the next is not,
etc. The flip vector is a three component x, y, z vector but each component is
treated as a boolean value that tells if you should or should not flip along a
given axis. For example
pigment {
wood
warp {repeat 2*x flip <1,1,0>}
}
means that every other copy of the pattern will be mirrored about the x- and y- axis but not the z-axis. A non-zero value means flip and zero means do not flip about that axis. The magnitude of the values in the flip vector doesn't matter.
Andreas Kriegl 2003-07-23