Plasticity
Self-assembling fever dream infrastructure
— By p4stoboy
The Framework
The software that has become Plasticity began purely as an exercise in engineering and abstraction. I love working in 2d with an isometric transform, and it became apparent during work on previous projects that I would eventually really like a framework to reason about and store data in 3 dimensions before rendering it in 2. This framework has come to fruition and is what Plasticity is built on.
Fundamentally the system works as follows:
1. define a discrete 3d space of arbitrary size (as the space is not continuous the gap between any adjacent coordinates can be thought of like a voxel or unit cube).
2. allow any given (x,y,z) coordinate inside the defined space to hold an on/off state and a color value.
3. for each activated coordinate inside the space, determine its active neighbours to inform occlusion parameters and faces to be rendered.
4. calculate 2d positioning of coordinate based on isometric transform.
This image illustrates the granularity at which Plasticity outputs are rendered, it is plain to see from this that any formations in a given output will be rendered as thousands of 2d voxels.
One of the earliest images rendered with this framework
The system described above enables any and all spatial units inside these 3 dimensions to be turned on or off in whatever configuration is desired, and the rendering functions will always display a coherent form. This is where the name Plasticity comes from as not only do the outputs often resemble industrial or architectural forms (or a city), but objects can be placed with arbitrary collisions / overlaps and the renderer will handle the altered formation, as if it were printing with plastic:
The Prototypes
Building this framework and then building something with it were two very different processes. I already knew from frothing over Archetype, from my work on a previous series (Flash), and from some preliminary testing I had done with the new framework that isometric shape packs look goooood:
I began a process of designing a series of functions which would take in arbitrary position, width, length and height parameters and fill that portion of the wider space based on a set of spatial rules, or a blueprint, beginning with a basic rectangular prism
One of the first Plasticity outputs, using only the “platform” blueprint.
Plasticity Prototype #0
The potential for this burgeoning framework was readily apparent, given how it had handled having a bag of randomly placed squares emptied in to it. The resemblance to a city, or to some kind of industrial-scape was also undeniable. I decided to lean in to this aesthetic (because hey, generative cityscapes which can be implemented this generically are cool and exciting) and started formalising blueprints around common industrial or architectural tropes; platforms, grids, scaffolding, towers etc.
By this point, and with roughly 50% of the blueprints which have ultimately made the cut implemented, I was quite excited by what I was seeing after each render. It was dawning on me that I had built what I set out to, which was a framework which could take any hare-brained conceptualisation of form or composition I had, and parse it with no issue.
Some further experiments around the granularity, or absolute magnitude of the space, followed, in combination with some experiments involving limiting the cache of blueprints the algorithm would have access to.
Plasticity Prototype #1
Plasticity Prototype #2
The brutalism of this output, which is derived from both the increased granularity of the space versus previous prototypes, and the limited pool of blueprints (radiators and cubes only) is quite powerful (I love this piece). However such a dense space doesn’t lend itself well to the majority of outputs, and as a result, the static granularity for Plasticity proper is roughly 66% of what is shown here. Limiting the pool of blueprints however had a significant effect on the composition and (at least personally) the subjective, emotive response to the work. These blueprint selection subroutines have been retained and are used in the current iteration of Plasticity.
Prototype #3 revisited the island aesthetic, and #4 experimented with height, pack, density, and color
I really like these islands, and as opposed to minting a second collection there may just be a select few island outputs in the upcoming release.
Plasticity Prototype #3
Prototype #4 really drove home how much versatility there was in just modulating the height and minimum footprint size of any given packed object. I consider this the point where work on the current application seriously began, and the point at which I was convinced that this was a worthwhile aesthetic endeavour. The results since have done nothing to shift me from this perspective.
Plasticity Prototype #4
A plasticity output which uses only the "cage" blueprint
Color and Composition
In my experience a comic aesthetic with high contrast shadows tend to look great in isometric work. However I have attempted to introduce more flexibility in to Plasticity without sacrificing any overall aesthetic value. The result is colorful and flamboyant palettes, industrial palettes, palettes which make heavy use of sci-fi white for lack of a better name, natural/organic palettes, and some other surprises. These are all tied together by one of three lighting settings, the choice of which can dramatically alter the observational response to two pieces with the same palette.
While the composition of most outputs resembles cities (recent past, contemporary, and future), industrial scapes, and even lunar outposts as far as I can imagine them, others are so heavily subdivided that the output resembles a collection of townships, a transformer field, and even an obvious shape pack (albeit an interesting one).