noise-based land and sky • diverse structures • distant planets
flocking and clustering algorithms • a generative soundtrack • interactivity

A meditation on the meeting point of sky and land, inspired by the salt marshes near my home. In fact, the initial versions of the piece were much more focused on replicating the salt marsh landscape, attempting to conjure the feel of the bristly samphire, the rich mud, the lazy sway of marram grass, and the salt-laden creeks that spill out towards the horizon. Ships, wind farms and oil-rigs were to dot the limits of the sea, capping the frothing blue waters. In time, however, the piece evolved, and an other-worldly influence took over. I'm always keenly aware, perhaps as we all are, that humanity's hold on the planet is slipping. In time we may be forced to explore new avenues for survival, though the dream of seeking a new world is nothing new. And then, pessimistic as it may be, perhaps one day we shall be forced to simply survey a desolate and scarred Earth, and admit that despite all they did, those who came before got it wrong.

The Canvas

The piece takes place in a widescreen canvas, resolutely sticking to a monochrome rendition except in a vanishingly-rare coloured version, expected to appear in around 2.5% of pieces. Colour is interesting, of course, so there are extensive options for playing with various colour modes—details available on pressing 'I' in full-screen mode.

However…  white on black, or black on white; the main piece relies on density, dot-size and texture for effect, whilst the aspect ratio not only suits modern computer screens, but allows for the expansive nature of the horizon to stretch forth.

The Landscape

The heart of the piece is the landscape itself, a small section of a very large circle. The OpenProcessing sketch ‘Landscape Curvature’ documents my initial steps on the piece, a fumbling return to trigonometry.

I normally rely on a simple set of Cartesian co-ordinates for my pieces; there's nothing unusual in that. For this piece, though, every feature is rendered within a narrow arc of planet surface, formed by shifting down to the centre of the circle, rotating by a fractional amount, and returning to the surface once more. Every point rendered, every structure added, every rectangle, line or ellipse, are all plotted using this method. The ever-reliable Perlin noise is constrained an manipulated in various ways to group and shift features, and random values are multiplied together into vanishingly-small possiblities to delineate and group aspects together.

Curvature is thoroughly explored here: a larger circle produces a nearly-horizontal line, with perpendicular features, whilst a smaller circle produces extremes of curvature, and divergingly-angled additions. Additionally, a negatively-large circle can be generated, inverting the horizon as though viewed through a fish-eye lens. Features sway towards each other, and cluster dangerously close in the centre of the piece.

Although the piece is considered finished after three-hundred and sixty frames, I like the render process to be as much a point of interest as the finished piece, and so the landscape is formed progressively: thousand upon thousands of tiny points maniuplated and added to the piece over time.

The Sky

Sometimes sparse, sometimes dot-filled, the main render process for the sky is the same as for the land, though generally with fewer emphasis on filling space. Here, though, objects begin to appear: flocks of wheeling birds may cloud the sky, whilst distant planets may phase in and out of reality. Further off, the enormity of interplanetary distance may reveal gas giants, stellated rippling spheres, or waxing and waning crescents. Subtle shading towards the edges of the piece hints at framing, and sizzling trails leak across the sky: meteors, comets, aircraft or something alien?


Stocky columns protrude from the planet surface. Wisps of smoke flare up in coiling, sinusoidal patterns. Flurries of circular orbs puff into the air, whilst clustered aerials march away, sometimes spilling twisting arcs of energy between their lofty peaks. These features tend to cluster towards the centre of the piece, though space is provided in the algorithm for deviation to extremes.

Sometimes, pieces are reflected, giving the impression of a shiny, ice-like planet. Sometimes, mountainous peaks are reflected, giving the impression of a vast and boundless ocean. Sometimes, when the curvature is positive and less-computationally intensive to calculate, the planets surface is partially-erased of detail, adding to the feeling of desolation.

Generative Sound

Although I've included sound in pieces before, the sound in this piece is produced generatively. As the piece draws heavily on random numbers for rendering, and as sound may be activated at any point (Indeed, must be so activated by the user…) it needs to store away its deterministic set of random values for later. As soon as the piece begins to run, therefore, banks of instruments are selected from a set generated using Apple's Logic Pro, and a complex set of parameters are linked to a string of random values. No matter when music playback begins, the state of the fx(hash) random number generator is irrelevent: the soundtrack is now irrevocably committed to being exactly the same each time.

The method of generation is relatively simple: each sample has a length, a set of playback parameters governing panning, volume, and a range of times between repetitions. Only a certain number of sounds may play, and upon being played each sound selects a time before which it will be unable to play once more. Some possibilities are long, some are short, some are potentially so long that the sounds will seem almost a one-off, unless the piece is left running for a considerable period of time.

The idea is nothing new: Brian Eno experimented with generative music, releasing the snappily-titled Generative Music 1 with SSEYO Koan Software in 1996, though this piece was less reliant on samples and more geared towards sweeping, gentle computer-synthesized textures. More recently, Jean-Michel Jarre's EōN takes a completely sample-based approach to the field, coupling generative artwork with computer-sequenced sounds.

I can't claim to inhabit the same artistic spaces are Eno or Jarre, despite my great admiration for their works, but the generative soundtrack I've created for this piece is a pleasing starting point, and at least goes some way to justifying the cost of Logic Pro from the App Store, to which I treated myself a number of years ago!

Regarding samples, all drum machine samples are usable under the licensing conditions of the software, and most of the sounds were created using the ES-1 software synth, of a combination of the ES-2 or Alchemy synthesizers.

There are six sound banks in Expanse. Two are used as background sounds, titled Drones and Wind. Over these lengthy, drifting backdrops, percussion sounds are selected from Notes, Mallets and Percussion banks. The Percussion bank is mainly focused on the Korg Minipops, and includes the quijada sound, featured extensively in Oxygene by Jean Michel Jarre.. Additionally, a rare bank of samples from the Texas Instruments Speak and Spell is available, listed as Speech. The banks are selected at mint time, and listed as one of the piece's fx(hash) features.


The piece is complete after three-hundred and sixty frames, a simple rendering process that is beautiful to observe, and can then be exported using 's' or 'c', usually after entering full-screen mode. Aside from sound, which must be activated by the user (press 'a' for audio) in accordance with browser guidelines, there are many other options for the curious.

Keyboard interactivity:

The information panel, accessed by pressing 'i' lists the majority of the keys. Colour and blending can be altered using keys from 'q' to 'u', with 'shift-U' being a good starting point to explore this feature through a roll of several virtual dice.

Mouse interactivity:

Also available using keyboard commands ('b', 'n' and 'm'), the image can be zoomed into using the mouse wheel, and panned over according to the position of the mouse. Zooming is initially limited to reasonable amounts, but these can be overriden using the shift key.

Browser parameters:

Interested parties are invited to observe the source code for full options, but some possibilities are listed in the information panel. The basic usage is to add '/?' to the URL, followed by the appropriate parameters, chained using '&'. Note that if fx(hash) has already added the '/?', further parameters may be simply appended with '&'.

resolution may be of interest to those wishing to test the computing power of their processor, generating large-scale images for printing.

aspect takes a value from 0 to 8, with the default aspect being 7, choosing from a hard-coded set of aspect ratios: 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, 9:21. As you might expect, some aspects work better than others.

nosmooth will deactivate smoothing.

testingenabled provides considerable logging, and access to some technical but potentially-interesting features.

There are other browser parameters, which are easily found by browsing the source code on github.


This piece is available here.

Source Code

Code is available here on github.