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, for details on the equations see the code portions on this page. 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