For Fundamentals of Spatial Computing I explored recursive and generative architecture in a general sense. Rather than designing buildings I was concerned with generative 3D structural forms built only out of cubes aligned to a grid. I wanted to create a system that would be simple to use but be capable of creating a wide range of 3D distributions ranging from very sparse (resembling a skeletal structure) to very dense (more of a cube mountain).
I named my system ‘Levity’ which means “a manner lacking seriousness ” because I wanted my system to create silly cube constructs instead of the more typically seen organic generative forms.
Each structure starts with one or more base cubes which fork child cubes in various directions that grow each iteration until a certain termination condition is reached. In this case I set an iteration depth limit at 30 so it will always terminate after growing 30 times.
I studied L-Systems which were initially used in biology to study the evolution of algae colonies but have since been used quite extensively for generating foliage and other organic forms.
I settled on a modified L-Systems approach to drive the overall spatial distribution with additional stochastic parametrization to influence the end result. I declared a custom ‘L-Symbol’ grammar that is used to specify instructions for cube structure growth using a set of symbols taken from the grammar.
Each 3D construct is uniquely specified by a four character ‘genetic’ string. Each slot (L0 through L3) contains an ‘L-Code’ symbol that for now I have defined as the letters A through G. Each symbol represents a numerical number between 0.0 and 1.0 as well as a string of L-Symbols that can be used to construct the 3D form.
Slot L0 (left-most) controls the color distribution by defining a base hue. From the base hue all colors are derived as a function of cube height from the base plane.
Slot L1 influences the lateral spatial distribution (maximum row and column span on the grid plane). This spot also influences the density of the resultant figure by specifying a probability of ‘mutation’ where more child cubes are spawned than normal.
Slot L2 influences the resultant size of the construct by specifying conditions where growth temporarily pauses in some places which causes other parts to over-take the paused sections and the overall size to be reduced.
Slot L3 has the largest impact on the overall look of the object. The L-Symbol string represented by the L-Code symbol in this slot is used to construct the form as a whole. In general the ‘species’ and most broad characterization is determined by this slot. The other slots merely determine the specific distribution of cubes within an already defined ‘family’ of shapes.
L-Systems are characterized by a defined ‘grammar’ and rules to translate one symbol to one or more other symbols. By starting with one symbol and repeatedly applying the rules a large string can be created that obeys the system design.
My L-Symbol language contains only four symbols:
START
MOVE
FORK
PAUSE
START does not show up in finished strings but provides the starting point.
I have some loosely defined (and easily changeable) rules for expanding and re-writing an L-Symbol string:
START goes to MOVE immediately.
MOVE goes to either MOVE or FORK.
PAUSE goes to either PAUSE or FORK.
I use the float value for the current L-Code in conjunction with a random number generator to influence the L-Symbol string as well which is why it is not a true L-System but instead more of a stochastic probabilistic process.
I am now looking into making high quality renderings of these constructs and also perhaps making plastic models using a 3D printer.