Emergent Design Exists Between Control & Chaos
October 5, 2022

After creating a handful of generative art projects over the last year or so, I’ve found myself reflecting on intentionality and messaging in my projects and how it relates to my understanding generative art theory and techniques. Despite having had successes from a mix of my creativity, skill, and diligence alongside considerable luck in timing, I’m aware my understanding of the medium is akin to that of a novice when compared with those who have practiced and studied the medium for many years. Beyond doing readings and soaking up what other artists might be saying, I maintain an inquisitive mind by hypothesizing concepts and attempting to prove/disprove the statement I’ve come up with. Emergent design was my most recent exploration that I will now share.

Erratic Out of Bounds

When looking through outputs from projects like Memories of Qilin by Emily Xie and Ringers by Dmitri Cherniak, there is an interesting commonality between the two projects, despite having completely different styles. They both produce art where the sum of the whole is more than the parts; emergent design. To pick a couple easy to recognize examples, as labeled by their communities, Memories has “The Lion” and Ringers has “The Goose”. While both of these examples depict an animal — easy to recognize form resembling something from real life — this is not a requirement of emergent design, it’s just an easy example to illustrate the idea that the elements in the work add up to a whole. What is it specifically that allowed these two projects to produce artworks with forms that the artist did not explicitly direct?

Studying each project’s output space for their common elements, and speculating on the techniques and approaches they may have used to construct them, I noticed they both had a similar characteristic. They did not use predefined compositional forms, rather they defined sets of rules that constructed them. Of course, all generative art uses randomization for things like positions, shapes, rotations, etc. but fewer have clear instances of emergent design. I postulated that there exists a creative sweet spot between control and chaos where this may be more probable. Compelled to explore it further, I decided to incorporate the hypothesis into my next long form generative art project in hopes that I could achieve a few grail status outputs in the collection.

What I mean by “control” and “chaos”

All generative artwork makes use of two core principles. First, a defined set of rules that when followed will result in a perceptible output. Second, using randomization sources to make decisions within this set of rules, thereby introducing a layer of abstraction between the creator and the execution. The types of randomization and where and how much they are applied to the rule set creates a spectrum ranging from control (minimal random) to chaos (fully random)

Proof of Pepe #1620

Towards the control end of the spectrum, you’ll find projects that use randomization sparingly in favour of pre-defined elements to select from and construct the resulting output. I’ve heard this referred to as stochastic or compositional generative art, but categorization labels in this medium haven’t achieved a consensus quite yet. On this end of the spectrum you’ll find many of the collage projects, which pick from sets of images to be placed on the canvas. To the extreme end is where many PFP projects live — Moon Birds, Bored Apes, CryptoPunks — as they primarily use randomization for picking from elements created by artists. An interesting characteristic of this side of the spectrum is that given knowledge of the set elements, decision tree and shape of randomization, you can easily predict what the final artwork may look like.

Montreal Friend Scale #494

Moving over to the chaos end of the spectrum, you’ll find projects that make liberal use of randomization and have fewer pre-defined elements. Much of today’s on-chain generative art skews towards this end given that they have limitations on how much data they can afford to store, minimizing predetermined elements. It’s common to see colour palettes, musical notes, styles, flows, etc. as features to pick from because the data can be stored in relatively fewer bytes, but much of everything else is derived within the rule set. To the extreme end, you’ll find projects that use noise and math operations — Raster is a great example — to create, inching closer to pure random, which would look not much different than a cable TV static signal.

The purist’s view of generative art

Given my definition of the generative art spectrum above and my desire to explore the property of emergent design in my next project, I needed to more clearly define what my set of rules and random values would adhere to. What I landed on is the “purist’s view of generative art”. To be clear, what follows is just a thought experiment I used to create and explore, it does not cast any judgment of what is or is not generative art.

purist (noun) a person who insists on absolute adherence to traditional rules or structures, especially in language or style.

From the perspective of a purist the interpretation of generative art — using random values within a set of rules to achieve an output — could be interpreted as exclusive use of random value ranges within a set of rules that do not branch. While ludicrous to cast the medium as a whole, it resonated with me as an idea to explore because it does reflect how portions of generative code (within a larger structure) already work. To put it simply this means no predefined elements, no conditionals (if/else), and not segmenting value ranges where possible (ex: 0.0, 0.1…1.0 instead of 0 and 1).

Could this extreme set of rules lead to emergent design? What would it feel like as an artist to impose these additional restrictions as part of creating a long form generative art project? Where would the rules break down and force an artistic decision in the pursuit of having a cohesive and visually appealing collection?

Erratic; an exploration of restricted chaos

The project began as a series of isolated shader experiments in which I was trying to manipulate SDF objects — mathematical way to draw spheres, boxes, etc. — with the goal of producing a deformed and sharply jagged structures. In one attempt, I tried slicing and transforming one side, which worked but ended up exponentially more expensive with every slice. I replaced the slice with a polar reflection instead and iteratively moved the centre pivot by an ever-decreasing amount in each step. What rendered was promising and as I refined the concept by adjusting the instructions and value ranges, I realized some versions of the script were producing unexpected results.

Erratic Experiments

My curiosity was piqued and the unexpected outputs spurred the reflection described previously in this article, leading to the hypothesis I would then choose to follow for the remainder of the project. After a little refactoring to adhere to the rules, I now had a working theory to explore and viable prototype to build upon. I set about reshaping the code little by little every day; adding new modifiers, adjusting values, rendering thousands of outputs overnight and identifying any outliers. This creative process went on for months in the early mornings and late evenings, alongside some paid client work I was working on at the time. I was obsessed with achieving my goal.

Eventually the project matured and had a good balance between chances of emergent design while maintaining cohesion across the generated outputs, which is crucial in long form given you cannot have any “duds” in the output space. During development, I was tempted to segment value ranges whenever I had found an interesting output, as adjacent values would likely produce similar structure, but I managed to stave off that temptation. Across 50 randomized input variable ranges, only 2 were segmented with a conditional to allow for rare outputs I enjoyed, but would ruin the collection as a whole if the full ranges were permitted. Examples of the “pure” ranges include:

  • Colour - random RGB values clamped within an acceptable brightness range, with the green channel drastically reduced to allow for warmer tones to mix in.

  • Iterations - the number of times a given artwork will loop through and scale down the series of instructions, producing large blocks up to very fine details

  • Reflections - triplet of numbers describing polar reflections for each pass

  • Movements - triplet of vectors describing the amount of movement to apply in all three axis (x, y, z) after each reflection and within each pass, which has a huge impact on the resulting patterns and is by far the most unpredictable variable

  • Noise & Maths - the scale and amount of Perlin noise and Math (sin/cos/tan) to apply to the calculated distance to object, resulting in a displacement like effect

  • Twist & Zoom - the amount of camera-oriented twisting and zooming

Erratic Out of Bounds

The vast majority of the coded logic also adhered to the rules of the purist, with only a few if/else statements checking a random value to introduce a little bit more variety to the mix. The rendering logic was otherwise one big math equation based on the pixel position within the canvas and random values fed into it. Conditional logic was also used to add render passes, where if a pixel were too bright or too dark it would scale the coordinate space randomly and re-render. I don’t consider this as necessarily a break in the purist rules, given it just helped fill in the canvas and introduced a lovely overlapping effect. Were I able to quantify it, I’d say the code roughly follows the same percentage of adherence to the imposed restrictions as the random variables.

The sweet spot is “part-time purist”

Having more or less followed the purist’s perspective, I can say that it forced me to think differently and change my development cycle to one of rapid iterations where I test new ideas or adjustments. I think this is because having full value ranges means a wider domain of potential outputs and greater chance for them to completely diverge. When making a code edit I knew roughly what the changes might produce but far less than in my previous works. I also found this project was far more challenging because many outputs ended up ugly or pure black/white pixels. On the flip side, these same generations would produce a few amazing outputs I had never seen before. I had to find ways to creatively shape the outputs without straying too far from the spiritual intent behind the project. Finding that sweet spot was difficult, but did I end up achieving my goal of producing emergent design in the project?

Evaluating the test outputs, I believe the answer is yes. The design of my artwork is inherently abstract and doesn’t produce organic structure, so it’s a bit more difficult to identify but having seen 100k+ outputs I can safely say there are examples of this. I do think the framework helped me to achieve this to some degree, but as part of pursuing long form generative I feel I may have lost some of the magic along the way. In order to ensure the chances of an undesirable output you must restrict the output domain, which unfortunately also means losing some of the spaces in which a brilliant output might have existed. I think if I were to explore this idea again, I’d relegate it to either an open edition with a burn to mint mechanism or manually curated collection.

I must therefore conclude that the purist’s perspective I came up with is ridiculous to follow in whole — as most purist ideals are — but has merit as a methodology to use within a greater creative strategy. One which I will continue to use, but only part-time.