Fire and Ice
Snow crystals are fascinating. Probably the best bit about winter – which, as we all know by now, is coming.
Snowflakes, like many other crystals, are effectively unique. There are so many factors affecting their growth that the likelihood of duplicating the exact conditions is staggeringly small. A tiny ice crystal is seeded – by a speck of dust or a bacterial cell – and as it drifts about the clouds, the amount of water vapour, the atmospheric pressure and the temperature vary so that new water molecules freeze to the crystal at varying speeds. Even minute changes in the environment will lead to drastically different shapes.
There's a lot of interesting research into modeling snow crystal formation. One approach that has been implemented a few times, because it was designed to be relatively easy to compute, is the Gravner-Griffeath II model. It effectively models the amount of water vapour, ice and liquid water in the vicinity of a snow crystal over time. Using a simple geometric transformation it also does this in a hexagonal space so that we get artificial snowflakes that look a lot like real snowflakes.
Gravner and Griffeath's algorithm is an instance of what's called a cellular automaton. As it happens I know a bit about cellular automata. Late in the last century I studied Cognitive Science and Artificial Intelligence. AI research produced a lot of useful tools, but alas even today no actual intelligence1. Do not go to sleep in your Tesla without parking it first.
Even basic intelligence requires a lot of infrastructure – a body to live in, training and experience. Basic life needs a lot less help. Artificial Life research has more modest goals than AI – it hopes to learn about complex things by studying the least complex of them first rather than the most complex. So I transitioned to artificial life.
One useful way of modeling complex life-like processes is the cellular automaton. Cellular because you divide the space up into small regions or cells, and automaton because it has a self-contained set of rules that require no external control. Imagine a checkerboard where the presence or absence of a piece at any given time is dependent on how many of that square's neighbours already have one. At each turn you examine each square and figure out whether it should be occupied by a checker or not. One set of rules for this is a simulation called the Game of Life, created by the late John Conway, rockstar mathematician and game lover. And originally he pretty much ran it by hand with counters on a board. Now we have super fast computer versions. Like the colourful one embedded above.
In the Gravner-Griffeath snowflake automaton the 'board' consists of a two-dimensional array of cells representing a small area of the crystal. Each cell has four values that model whether or not the cell is part of the crystal and how much water vapour, water and ice is present in it. At each time period four separate steps are run on each cell and determine:
- water vapour moving around between cells (diffusion).
- water vapour depositing and liquid water freezing into ice.
- whether there is enough ice to consider the cell part of the crystal.
- frozen ice re-melting into water or sublimating back into vapour.
After many thousands of cycles of these four steps applied to each cell the repeated freezing and thawing of the cells generates a characteristic snowflake shape. To borrow a term from complexity theory, the snowflake emerges from these low level rules.
How does all this relate to the manufacture of quality wooden products you ask? Well, we make visual things with robots here so there's a natural fit with patterns made in the computer. We started making ornaments a few months ago and I thought that snowflakes would be an awesome addition. But I wasn't content with only a couple of human-made designs. Nothing less than infinite unique simulated snowflakes would suffice. And I rather like the thermodynamic irony of burning simulated ice crystals into wood with a laser.
I found a number of implementations of Gravner-Griffeath II. Some of them were fast but difficult to maintain, some of them closer to the original paper but very slow. To get a program that I could make changes to and that ran fast enough, I had to recreate it. The result is a system that can generate snowflakes in a form that I can load directly into the laser cutter.
Each snowflake is generated from a random set of initial conditions. Because of the way that random numbers work in a computer we can use one number to uniquely determine all the others that we need. That number is called the 'seed'. We laser etch the seed on the back of the snowflake. You can think of it like that initial speck of dust that starts the whole process.
There will only ever be one snowflake made with any given seed. The snowflakes are engraved in maple veneer and mounted on a 5mm cherry hexagon with an indented window on the back for the seed and a cavity for the string knot to sit in.
For the future, there are a number of improvements to be made. We can make the generation faster using the awesome parallel power of modern graphics processors present in recent computers. We can also start to add some analytic capability so that the program can help find aesthetically pleasing areas of the model's 7-dimensional parameter space. We'd still have infinite variations but we wouldn't have to throw so many boring hexagons or spindly stars out.
Gravner and Griffeath also have a newer model – one that works in three dimensions and lays down more internal detail in the snowflake. If it's possible to run it fast enough we might be able to do two or three layers, perhaps in different woods. But for now we're really happy with how this first iteration is turning out.
Thanks to Aaron Burden on Unsplash for the cover image and Vincent Maglione for the Game of Life Code.
1. Come over some day and I'll tell you more than you really want to know about why, contrary to to the marketing hype, there is as yet no such thing as AI.