Lace AttractorInspired by Roger BagulaGraphics by Paul Bourke June 2001, images updated January 2018
Attractor IslandsWritten by Paul BourkeSeptember 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 } }
|