Attractor Islands
Written by Paul Bourke
September 2002
The following discusses a way of representing chaotic attractors
so they look more interesting than the usual "points on a plane".
The approach involves representing them as landscapes, or since the
attractors are normally bounded, as islands.
The example used here is an iterated function system by Roger Bagula.
A low resolution version of the function is shown on the right. Note that this is a
two state image, the pixels that are not black represent points on
the attractor and all other pixels are not on the attractor.
If the attractor image was used
by itself the cliffs would rise out of the water straight to their
peaks. A base to the island was created by applying a Gaussian blur
to the original attractor image, this is shown on the right. This
is applied as a second height field, the PovRay code is given below.
The two height maps used here (lace_a.tga and lace_b.tga)
were both 2000 pixels square.
height_field {
tga
"lace_a.tga" /* Sharp attractor for cliffs */
pigment { }
finish { }
normal { }
scale <1,0.05,1>
}
height_field {
tga
"lace_b.tga" /* Smoothed surface for shoreline */
smooth
pigment { }
finish { }
normal { }
scale <1,0.07,1>
}
The result of using these two height maps without any material definitions
is shown on the right. The surfaces have the default PovRay surface
definitions and are coloured 50% grey. The camera and lighting environment
are below.
camera {
perspective
location <0.7,0.7,-0.25<
up y
right -4*x/3
angle 60
sky <0,1,0<
look_at <0.5,0,0.4<
}
global_settings {
ambient_light
rgb <1.0,1.0,1.0<
}
background {
color rgb <0,0,0<
}
light_source {
<0,1,0<
color rgb <1,1,1<
}
light_source {
<1,2,0.5>
color rgb <0.5,0.5,0.5<
}
The image on the right is rendered using a particular material
set, the sand fades to jungle, grass is growing at the top of the
plateau, the ocean has depth variation, etc. The scene files are given here
lace.ini and
lace.pov.
#declare seapigment = pigment {
bozo
turbulence 2
octaves 6
lambda 3
omega 0.5
color_map {
[0.0 color rgbt <0.3,0.3,0.7,0> ]
[1.0 color rgbt <0.5,0.5,1.0,0> ]
}
scale 0.5
}
global_settings { number_of_waves 10 }
#declare wavenormal = normal {
ripples 0.2
frequency 10
phase 0
scale 0.1
rotate <0,0,13>
}
polygon {
5
<0,0.0001,0<,
<1,0.0001,0>,
<1,0.0001,1>,
<0,0.0001,1>,
<0,0.0001,0>
pigment { seapigment }
normal { wavenormal }
}
| |

Attractor

Blurred attractor for shoreline

Rendering without materials

Simple materials

Higher quality rendering
|