Lace Attractor

Inspired by Roger Bagula
Graphics by Paul Bourke
June 2001, images updated January 2018

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 {
   "lace_a.tga" /* Sharp attractor for cliffs */
   pigment { }
   finish { }
   normal { }
   scale <1,0.05,1>
height_field {
   "lace_b.tga" /* Smoothed surface for shoreline */
   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 {
   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 {
   rgb <1.0,1.0,1.0<
background {
   color rgb <0,0,0<
light_source {
   color rgb <1,1,1<
light_source {
   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 {
   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 {
   pigment { seapigment }
   normal { wavenormal }

Blurred attractor for shoreline

Rendering without materials

Simple materials

Higher quality rendering