Scale symmetry‎ > ‎

What Colour are Fractals?

While it might seem odd that a geometric shape should have its own distinct colour, there is a basis for it in physics. Structural colouration is the colour due to the shape of an object close to the wavelengths of visible light, it is responsible for the bright blues and greens of parrots' plumage, the iridescent peacock feathers, the oily colour of soap films and the amazing colours of opals that change as you rotate them. Euclidean geometry has no detail at the wavelengths of light, but scale-symmetric or fractal geometry does, if we give it a simple physical model.

The simple model is to treat the fractal as opaque, and with a reflectance that tends to zero (so we can approximate colour with a single bounce) while the white incident intensity tends to infinity to compensate. Consequently it is a parameter free model. Here I look at the simple construction of 2D fractal curves. In fact three well known curves can be produced as variants of the same simple line segment replacement:
each can vary in roughness by controlling the bend angle, and a fourth curve with random bend angle completes the test set. (There are actually three others in this family).

Each point on your retina or camera sensor resolves to a very small spot on the object being lit. The minimum of this width and the spatial coherence width of the incident light gives the spot size, within which the complex wave intensities interfere rather than sum linearly. So we can compute the colour of each pixel along a fractal curve by calculating this interference intensity for each wavelength on the visible spectrum, here we show the process for just blue incident light:
Here you see that the varying path lengths of the incident waves remove the spatial coherency. If you model the wave phase as a point rotating on a circle with ray distance, then the resulting (interfered) intensity is the magnitude of the sum of these 2D points. In complex arithmetic we model this point as the complex number
 where l(x) is the ray path length at pixel position x along the curve and λ is the light wavelength, so the total intensity per incident wavelength is:
where s is the spot size. While this might seem a bit complicated, the whole process is really a special type of low-pass filter per incident wavelength. The image being filtered is of the complex light phase per incident frequency, and one takes the magnitude of the low pass filtered image. 

We now have one parameter which is the spot size. In the image below I render the length of a Koch curve along the x axis, lit head on, with increasing dimension from 1 to about 1.6 over the five strips, and for each pixel line I increase the spot size from about one to about ten times the wavelength of visible light (about 500nm). As can be seen, for higher roughness than about 1.1D and for spot sizes bigger than about 2 wavelengths, the spot size makes little difference to the resulting colour. So I choose a spot size of about 4 wavelengths, and since the colour is largely unaffected by varying this, the model remains essentially parameter free. 
The last parameter is the scale of the fractal, and this does effect the colour. So I now make the y axis per row equal to the scale, you can see the effect on increasing dimension of the Koch curve:
Again, the incident white light is directly head-on. Higher dimension curves change hue more with changing scale. 
The colour thus far is for a single point light source, more commonly an object is lit by ambient light. This is approximated using multiple incident light directions. In the images below I use 20 to 50 incident white light directions over 180 degrees to generate the ambient lighting (left image), and include a point light in the right image, shown for the Koch snowflake, Levy curve and Dragon curve respectively, each with the same bend angle of 60 degrees. The rotating gifs allow you to see change in the last degree of freedom, view angle:


There are some clear differences between these three similarly constructed curves. The Koch snowflake flips between a warm and a cool colour every 30 degrees, the Levy curve has much less colour, resembling a shiny metal, and the dragon curve has strong colour that hue cycles smoothly with view angle. Tests on the random bend angle curve suggest that it lacks any colour. The colour change can be understood in terms of the shape's scale symmetry; if a rotation of a shape is equal to a scale by s then the peak wavelength of reflected light should also scale by s.  

The conclusion seems to be that it is the regularity in these fractals that give it colour, and the colour behaviour can vary significantly with the type of curve. They somewhat resemble crystals and opals where regularity causes colour to change with view angle. I expect very similar colouration to be seen on 3D fractal surfaces.  

Here are some more well known fractal curves, now in colour:

Minkowski mushroom (I made up the name):

More details are available here and the code is on github.