Conway’s Game Of Life in Blender
Game Of Life (GOL) is possibly one of the most notorious examples of a cellular automata.
Defined by mathematician John Horton Conway, it plays out on a two dimensional grid for which each cell can be in one of two possible states. Starting from an initial grid configuration the system evolves at each unit step taking into account only the immediate preceding configuration. If for each cell we consider the eight surrounding cells as neighbors, the system transition is defines by four simple rules.
I was interested in exploring the visualization of such phenomenon with Blender. What follows are some experimental results.
Here the code if someone is interested. It’s a reusable script you can import and run directly in the Blender scripting interface. It defines the GOL logic and breaks down the porting of the GOL grid to Blender in two customizable components:
- Generator —responsible for the generation of the Blender object that will be mapped to a cell in the original GOL grid. A generator is exactly used to build the initial Blender grid with the preferred mesh (examples: cube, sphere, monkey).
- Updater — defines update behavior for a Blender object based on GOL grid value. Should specify what happens to an object depending if the corresponding grid value is 0 or 1 (examples: scale, hide).
The rest is just helper code to register the updater handler such that a frame change causes an update of the GOL grid (possibly including keyframing).
I suggest to delete the handler once you obtain a result you like, in such a way that additional frame changes won’t trigger again the update and screw up you results.
3D Version
I experimented also with a three dimensional grid which used the same set of rules while extending the count of neighbors to the new dimension.
I am planning to look more into the 3D concept to find more stable configurations. An additional interesting improvement would be to have a non-constrained grid, meaning an automaton that starting from initial configuration can grow indefinitely in space. For such approach I have to reformulate my current code logic, and probably experiment first with some alternative to Blender, cause the guy here consumed a lot of resources even for these simply renders, so any suggestions to this regard is more than welcome!
Digression
Playing around these cellular automata visualizations prompted in my mind concepts like causality/teleology and dust theory. All system states are deterministically defined, but can be computed only based on the state at the previous time-step. With the scaling/shrinking function in place, the system behaves in exactly the same way it would do with other type of updating function, what change is the behavior of cells with regards to the system state. A cell is instantly shrank by external forces to reflect a state equal to zero, but then evolves with the illusion of free will to a renewed state of full size. Practically speaking this growth is nothing more than keyframing filling. It is not the story of a cell that defines its future, but the future of the system that defines the story of all cells life.