Boundary Conditions is based on a personal observation about the nature of existence: that it is most clear at the interface between two separate aspects of reality. We enjoy the merging of sea and land, congregate at the boundaries of the land and the sky, tenuously ponder—in small, select groups—the limits where atmosphere dwindles into vacuum. Life is about the transition from one state to another, maintaining a precarious existence on the edge of everything.

The Generative Process

At the heart of Boundary Conditions is micro-managed Perlin noise, produced as small points and patches of colour. Rendering takes place over three hundred and sixty frames, with the number of points rendered increasing as time passes. This allows the piece to initially form a general overview, and fill in the finer details as time passes. This results in the piece fading gently into view over several seconds, but allows the rendering process to be part of the experience, rather than presenting the viewer with a blank screen or a progress bar.

‘Grains’ and ‘Dunes’

The main focus of the image is the ‘grains’ layer—the dark, spattered series of grouped dots that form sweeping, striated patterns. A spattering technique is used, as though the grains were splashes of paint flung onto the canvas with vigorous brushstrokes. Amongst them, more saturated and thicker lines of colour accentuate one side of the grains, within certain chosen parameters, like shadows on the sides of a dunes, or the ripples left in sand by the receding tide.

Colour and Large-scale Texture

Larger swathes of colour, termed ’dunes’, are added in such a way as to form patches, or thick striations. Along these paths larger circles of ink may be added, sometimes singly, sometimes in a pattern of splashes. Further shading is added to alter shading over the space of the entire instance. The ‘sand’ layer is a tighter, more extreme band of colour, but is intentionally limited so as not to overpower the piece.

Geometric Overlays

Larger geometric shapes are sometimes overlaid: both circles and rectangles. These, too, are stippled in various ways, often fading so that only their corners, or partial edges, are visible.


Applied, perhaps, at intervals of ninety degrees, or maybe in more subtle ways—sometimes a forty-five degree rotation will produce a diagonal rendering. This is in addition to the rotation of individual blocks, although the two may work against each other, leaving only part of the instance rotated.

Grids and Intersections

The main image produced using the above techniques is taken and used as a building block for the finished piece. It may appear as a background to the entire image, and may then be broken into parts to provide the finished piece. These blocks may be small, may be large, may be further subdivided, or may not even be rendered at all. Sometimes they will be reversed or rotated, sometimes shifted in the x-axis, the y-axis, or both at once. The grid formations are chosen from a number of sub-styles, each one tuned and constrained to provide variation within aesthetic limits. Hundreds of test renders have been used to hone these options, but the possibility of the anomalous is always there.


Scaling allows for the image to move beyond the limits of the canvas, or be constrained within it. It also provides the possiblity of a sector being only slightly displaced from the background, leading to something akin to motion-blur. Sometimes a piece will be scaled to extremes of value, zooming in on a portion of the image, or rendering it as a smaller window within the larger canvas.


Not all pieces are coloured, and in general the colours are muted and saturation is low. However, the saturation level is variable, and in rare cases can lead to completely greyscale images or, athe other extreme, instances where the saturation values are pushed to twice the standard value. Rarely is a piece saturated to the point where clipping of hue values occurs, but the possiblity is there. A dark mode exists in a small proportion of pieces, which enhances and highlights the saturated palettes.

This piece is close to the un-altered main image rendered by the algorithm. A single block containing the instance is overlaid on a faded background. It's relatively unsaturated, leading to a muted grey palette, and is of normal density. There are no overlaid circles, and the image is of normal size and rotation. It's pleasing to view, but also minimalist.

This piece is similar, but features two rectangular blocks overlaid on the main background. These blocks form the backbone of the piece's variations: they are samples of the main instance render, and may be split, rotated, faded, combined, or shifted and thus provide contrast and variation.

The grid pattern in this image is split into two vertically, but the horizontal axis has been split to a much greater degree. Within these splits, horizontal subdivision has occurred. Some sectors are not rendered, leading to the contrasting light stripes.

In a similar way, the grid pattern is severely constrained in the vertical axis. The rendered canvas has been scaled to be smaller, however, framing it in the context of the larger piece. A circle and rectangle overlay can be clearly seen.

This dark piece features a two by two grid, of which only one segment is filled. This leads to a framed upper quarter, which happens to be positioned over its original place in the image.

A faded background image, over which a square grid of segments has been placed. Perlin noise is used to form the arrangement, rather than simply choosing random values, to maintain some order to the piece.

Split into thirds vertically, with many more horizontal segments, pieces of image are being chosen from across the render and shifted vertically.

A single image is placed over itself with scaling, producing a motion-blur effect.

The piece has been split into horizontal strands, and each strand has an independent rotation value applied. Rotation is taken from a Perlin noise field to introduce enough order to avoid chaos.

This pattern also shows rotation of individual blocks, but with a larger quantity of individual segments.

A rotated and scaled version of the main image is placed over itself.

The effects of using a Perlin noise field to control rotation are evident here: there is a clear pattern and progression to the rotation, as opposed to the chaotic disorder of simply applying a random value.

A relatively-simple two by two grid with randomly-selected quarters of the main image, placed over a blank background.

The effects of a saturated palette over a dark background.

Interactive Features

Pressing 'I' whilst the piece is active will bring up an information panel. This will show which render layers are currently available; they can be activated and deactivated using the number keys.

The rendered image, at a resolution of 2048x2048 can be saved with 'S', whilst the actual viewport canvas, at whatever resolution the piece is currently running in, can be saved with 'C'. The canvas version will include any text currently on-screen, whilst the render version will not.

'R' and 'P' provide options for re-rendering with and without new parameters.

Sample Renders


View the Boundary Conditions marketplace on fxhash.

Source Code

Source code is available on github.