absorbed
KEF
HiFi
"Absorbed:" A Story of Discovery Told Through Generative Animation

"Absorbed:" A Story of Discovery Told Through Generative Animation

written by hieroglyphica

31 Oct 2022500 EDITIONS
0.25 TEZ

When creative studio PARAMETA emailed me in late March, asking if I’d like to collaborate on a long-form generative art NFT for a major UK retail brand, my first thought was that it must be some kind of phishing scam. Why would a major brand want to work with me—a little-known artist with just two publicly released pieces to his name? In the 7 months since, I’ve come to see that this suspicion and sense of impossibility were very web2 attitudes. In my growing experience with web3, I’ve been nothing but amazed and delighted by the general spirit of trust and community, by the sense of possibility, and by the thoughtful openness to new voices and new ideas. "Absorbed" is very much a product of—and testament to—this incredible ecosystem.

It is also, in some sense, the result of a misunderstanding. When I learned that the brand involved was KEF, and that they were interested in me for this project because my work involved “noise fields,” I had to explain that the noise I used in my art and the noise absorbed by KEF’s MAT™ technology were completely different things. This got me thinking deeply about the meaning of “noise,” and my work on the project quickly honed in on exploring the ambiguities and contradictions of noise in its many forms.

An image of KEF’s MAT™ absorber that I was sent in April as inspiration for "Absorbed."
An image of KEF’s MAT™ absorber that I was sent in April as inspiration for "Absorbed."

In its most familiar sense, noise is a form of random interference—the background crackle in an otherwise crisp recording. It is unpredictable and unwanted, serving only to cloud or distort some intended signal. In computer graphics, however, the term noise has a very different meaning. This kind of noise, procedural noise, is the go-to technique for producing images of highly textured surfaces that look real: the jagged mountains or puffy clouds of an animated film. These features look real, in part, because they possess just the right amount of randomness: enough to convey the sense of some underlying pattern without allowing the exact nature of that pattern to be understood. In this sense, procedural noise is quite different from conventional noise. It is not random, but only pseudorandom. And it is both intentional and predictable, even if it doesn’t always appear that way to human eyes.

"Absorbed" explores and emphasizes this distinction. At the start of each animation, thousands of particles are released into a noise field, which drives their motion as they paint their paths across the screen. As the animation unfolds, that noise field is forced to battle a slowly emerging attractor field, whose strength increases until it has drawn the particles into the shape of one or more MAT™ absorbers. In this way, the battle between signal and noise, between order and randomness, is the animating force behind each piece.

A detail from a large-format render of "Absorbed," showing the paths traced by many individual particles.
A detail from a large-format render of "Absorbed," showing the paths traced by many individual particles.

The noise fields used in "Absorbed" are of two types: gradient and sinusoidal. Gradient noise, which can be found in approximately 25% of the pieces, is the form conventionally used in generative design. (1) The other 75% of the pieces use what I call sinusoidal noise. An original noise algorithm developed for this series, sinusoidal noise produces results similar to gradient noise by layering a large number of unrelated sine waves. (2) Unlike gradient noise, however, sinusoidal noise can be scaled to any desired degree of randomness. Many of the iterations in "Absorbed" use this feature to produce noise that is highly structured, inviting the collector to discover and appreciate the underlying pattern. Others tilt toward randomness, concealing the structure of their noise in large-scale patterns of indecipherable complexity. Hopefully, each and every iteration encourages a deeper appreciation of just how murky the line between randomness and pattern really is.

The first working prototype of my sinusoidal noise algorithm, completed in late April.
The first working prototype of my sinusoidal noise algorithm, completed in late April.

The approximately 7% of the series that uses a “discrete matrix” shows the tension between order and randomness in yet another way: these pieces display intensely chaotic behavior around the edges of the “matrix cells,” while the bright outlining of these edges simultaneously lends order to the piece. (I use quotes above because the piece does not make use of any matrix or cells: the “discrete” iterations simply layer in one or more tan(x) terms to the sinusoidal noise function. In naming this feature, I took the advice of my collaborator and friend, Gus, who suggested it was less important to be technically accurate with the feature name than to have it visually connect with the piece.)

Because "Absorbed" composites multiple times per frame, using BLEND and DIFFERENCE and LIGHTEST, color palettes aren't WYSIWYG.
Because "Absorbed" composites multiple times per frame, using BLEND and DIFFERENCE and LIGHTEST, color palettes aren't WYSIWYG.

"Absorbed" was initially conceived as a much larger release (1,000+ editions). And so the use of the tan(x) terms—as well as other under-the-hood parameters involving absolute value functions, damping, and selective scale factors—were devised with the intention of ensuring sufficient variety across such a large number of editions.

Experimenting with different parameters in May.
Experimenting with different parameters in May.

Balancing the need for variety with the need to ensure an acceptable minimum quality of each output is one of the great eternal challenges of long-form generative art. Far less talked about, however, is the great eternal challenge of long-form generative animation: ensuring a reasonably consistent look and movement across the vast array of window dimensions, screen sizes, pixel densities and processors on which a piece might conceivably be run. For example, a 1000x1000 window is only 1/4 the area of a 2000x2000 window. To have an animation appear similar in both windows, should the piece spawn only 1/4 as many particles for the smaller window? Or should it spawn the same number of particles, but draw them 1/4 as wide? How do the particles’ velocities need to change to keep the pacing similar? Would the same approach work equally well when scaling from a 1000x1000 window to a 500x500 window? A significant amount of the code in "Absorbed" is devoted to addressing these kinds of questions—and yet despite this considerable engineering, I marvel at how imperfect the piece still is in this regard.

One of many test runs of "Absorbed"—and the first that seemed to strike an optimal balance between variety and acceptable minimum quality of each output.
One of many test runs of "Absorbed"—and the first that seemed to strike an optimal balance between variety and acceptable minimum quality of each output.

Nonetheless, I am very optimistic about the future of generative animation. Dynamic systems are famous for their chaotic (i.e., not easily anticipated) behavior, and this presents an incredible artistic opportunity. Case in point: each iteration of "Absorbed" tells an entire story of tension and transition, and it’s little surprise that the most beautiful and interesting moments of that story come near the unpredictable middle of each animation.

The collection’s preview images are captured at or around the 1,050th frame, a choice that seemed aesthetically appropriate but that is ultimately arbitrary, as no single frame captures the full range of visual elements developed in each iteration. In this way too, "Absorbed" mirrors the never-ending battle between signal and noise as a dynamic phenomenon, shifting and transforming over time, fascinating us with the promise of comprehending some larger pattern just beyond our sight.

— hieroglyphica (aka Jason Sholl), October 2022


(1) More specifically, "Absorbed" uses Perlin curl noise, an algorithm for creating divergence-free flow fields by following the derivative of the noise field at a given location rather than the noise field itself.

(2) Some months after developing my version of sinusoidal noise, I chanced upon this excellent article by Bruce Hill, describing the full details and implementation of a very similar but slightly more sophisticated algorithm. If you are interested in understanding the sinusoidal noise used in "Absorbed," I can’t recommend it highly enough. (And Bruce, if you ever find yourself reading this, I hear you about the difficulty of naming things. I can’t tell you how many times I searched for “noise fields with sin functions” & similar—if only I had known to search for “hill noise!")


A HUGE thanks to KEF and to Gus Lee at PARAMETA for believing in me and supporting this project. I hope you’re as proud of the finished piece as I am. :)

stay ahead with our newsletter

receive news on exclusive drops, releases, product updates, and more

feedback