On Experiplay as Method
Experiplay is a practice-based research methodology that treats generative code as a medium of inquiry rather than a means of production. Each piece begins not with a defined outcome but with a question — aesthetic, technical, or conceptual — and proceeds through rapid iteration, snapshot, and reflection.
The method borrows from both artistic practice and scientific experimentation: form a hypothesis about what a system might do, build the simplest possible version, observe what actually emerges, and document the gap between intention and result. Discovery happens in that gap. The snapshot is the unit of evidence — a moment when something worth preserving has been found, before the next push destabilises it.
Groups are ordered by when they were first encountered. A group may be returned to at any point — informed by discoveries made in other groups. The journal is intentionally open-ended. It documents a practice in progress.
Framework & Early Patterns
PlayCanvas · WebGL · Point Cloud · Reaction-Diffusion
Open — active groupThe opening experiments used PlayCanvas — a high-level WebGL framework — to establish a foundation before moving to raw WebGL. Reaction-diffusion was attempted twice and encountered the iOS WebGL constraints that would recur throughout the practice. The constraint was first mapped here.
First PlayCanvas Point Cloud
15 April 2026The first piece: a PlayCanvas point cloud with a sphere mesh, white point sprites, and proximity-based threads between nearby particles. The framework abstracted away WebGL infrastructure, allowing focus on behaviour. Initial experiments with forms, UI controls, and blend-morph transitions between states followed rapidly.
By the fourth iteration the framework was constraining. High-level abstractions were fighting the low-level control that interesting particle behaviour requires. Moving to raw WebGL was not a technical decision — it was an artistic one.
Reaction-Diffusion — GPU Attempt
16 April 2026First attempt at GPU ping-pong reaction-diffusion. The output was a star-shaped artefact caused by mediump float precision being insufficient for atlas UV addressing in the simulation shader. The simulation was not producing Gray-Scott patterns but the artefact was itself a data point about mobile WebGL precision constraints.
Reaction-Diffusion — CPU Fallback
16 April 2026CPU-side Gray-Scott after the GPU approach failed. Produced correct patterns in principle but was too slow on mobile to be usable. This was the first full encounter with the iOS WebGL FBO constraint that would define the entire ferrofluid journey three weeks later. The constraint was noted but not yet fully understood.
Crystal Fields
WebGL · Particle Growth · Bloom · Thread Networks
Open — active groupShifting from reaction-diffusion to crystal growth produced the first genuinely surprising result — particles growing luminous tendrils toward each other. The bloom post-processing pipeline was introduced here and has remained in every subsequent piece.
Crystal Field v1
17 April 2026First crystal growth model: particles extending crystalline tendrils toward each other based on local proximity. The visual quality — dark background, luminous thread connections — established an aesthetic that the Brownian, Attractor, and Wireforms work all subsequently inherited.
Crystal Threads with Bloom
17 April 2026The bloom post-processing pass added: threshold filter, Gaussian blur at half resolution, additive composite back onto the scene. This pipeline makes particle density readable as luminosity — dense regions glow, sparse regions recede. A fundamental shift in how the system communicates.
Mycelial / DLA Growth
WebGL · Agent-Based · DLA · Space Colonisation · Bioluminescent
Open — active groupA hybrid DLA and space-colonisation system: growth tips seeking chemical gradients, leaving bioluminescent trails. Thinking of particles as organisms with local decision-making rather than physics objects changed what questions were asked of the system.
Mycelial Growth — Initial
17 April 2026Hybrid DLA and space-colonisation: growth agents seek attractors, consuming them when close, reinforcing trails left by other agents. The biological analogy was explicit and productive. The desire for more physical randomness — less deterministic growth — led directly to the Brownian motion exploration that followed.
Brownian Motion Explorations
WebGL · CPU Simulation · Two-Population Particles · Phase Transitions · Mesh Formation
Open — active groupThe most extensively iterated group in the practice so far. Two particle populations — fast amber Brownian bombers and slow blue target particles — interact through energy transfer triggering three phases of emergent behaviour: chaotic bombardment, attraction forces, and membrane formation. Eleven working milestones produced in a single session. The group was revisited in Session 3 to produce a scientific instrument spin-off.
Movement Explorer
22 April 2026Returning to the Brownian simulation in Session 3 with a new framing: four aesthetic versions of the same physics (Scientific Instrument, Dark Field, Artistic, Blue/Amber) sharing one engine, with time-scale and magnification sliders. Conceived as a demonstration that science-minded and art-minded thinking illuminate the same phenomenon differently. Depth-of-field applied per-particle based on Z-distance from a moveable focal plane.
Self-Organisation — Eleven Milestones
17 – 19 April 2026Eleven working milestones across a single extended session. Stepped charge activation (levels 0–3 with exponential cascade), neighbour contagion, global energy accumulation triggering phase transitions, proximity-scaled mesh growth (edges then faces), and flood-fill patch colouring with golden-ratio hue sequence.
Key technical encounters: uniform int → uniform float required for iOS GLSL ES 1.0 compatibility; backtick characters inside JavaScript template literal strings terminate the string early (a recurring hazard in GLSL-as-JS); energy deposit rate calibration for reliable Phase II and III triggering.
The membrane that forms in Phase III was not programmed — it emerged as a stable configuration from the interaction between diffusion rates and energy thresholds. The system found its own equilibrium.
The 2001 Trumbull Explorations
Fragment Shader · Domain Warping · Curl Noise · Logarithmic Spiral · Horizon Projection
Open — active groupUsing Douglas Trumbull's final sequence from Kubrick's 2001: A Space Odyssey as aesthetic reference — the slit-scan corridor, organic terrain flyovers, ink-in-fluid macro photography, and galactic forms. Each sub-direction is a different way of approaching the same visual language: slow, organic, cosmically scaled, simultaneously geological and biological.
Terrain — Organic Flyover
22 April 2026A perspective-projected terrain flyover using domain-warped noise — the entire scene computed per-pixel, no geometry. Domain warping (using one noise field to distort the coordinates of another) produces the folded, cellular, organic quality that makes this read as biological rather than geological at high warp strengths. Six presets explore a single mathematical structure across wildly different visual registers: Coral, Cloud, Tissue, Jupiter, Abyss, Stellar.
Terrain — Mirror Controls
22 April 2026Horizontal and vertical mirror toggles added. The first implementation applied mirroring to screen UV coordinates before perspective projection — one axis worked, the other produced unexpected behaviour. The fix required moving the mirror into terrain coordinate space, after the projection calculation. An apparently simple operation (fold the image) behaves completely differently depending on which stage of the pipeline it is applied at.
Terrain — Above and Below
22 April 2026A specific 2001 frame — a crisp horizon dividing a radiant upper world from a dark still lower world — demanded a completely new piece rather than an iteration on the terrain. The upper world uses vanishing-point projection where all streaks radiate from a single horizon point (replicating the slit-scan quality). The lower world is a dark plain in ground-level perspective. The horizon is a bright line with its own visual presence.
Ink in Fluid — Curl Noise
22 April 2026The macro photography sequences in 2001 — paint and fluorescent dye in water — suggested a fluid simulation approach. Curl noise generates a mathematically divergence-free velocity field: fluid with no sources or sinks, only rotation and flow. Metaball-like ink volumes drift on independent paths while the curl field warps sampling coordinates, making them billow and fold without compressing. Six palettes: Ink, Oil, Nebula, Cell, Aurora, Magma.
Galactic Form — Reference Match
22 April 2026A photographic frame from the 2001 sequence — a galactic form between spiral galaxy, cresting wave, and neural structure — decomposed into generative elements: logarithmic spiral arms, bright blooming core, dark rift along the equatorial plane, scattered stars denser near the galaxy, tilted viewing angle. Each layer implemented separately, then composed. The dark rift creates the sense of a physical disc at an angle rather than a flat image.
Galactic Form — Multi-Arm Wispy
22 April 2026The first galaxy was too uniform — perfectly regular arms, smooth falloff, no character. Six arms (two primary, two secondary, two faint feather), each with independent breakup noise. Twelve discrete globules along the spiral path with slight jitter. Wisps (high-frequency noise along arm direction) and voids (low-frequency subtraction creating dark gaps). Breakup noise raised to a power greater than 1 punches holes through arm material, leaving bright knots — replicating irregular nebula texture.
The Wireforms
WebGL · Parametric Geometry · GPU Vertex Physics · Torus Knot · Frenet Frame
Open — active groupA reference image of a wireframe parametric surface — fine parallel curves sweeping along a torus knot — raised a question: what if the wireframe responded to physics? The entire form is computed in the vertex shader each frame from two parameters (u along the path, v around the ring), with no CPU geometry and no uploads.
Breathing Torus Knot
22 April 2026Three physics layers: a breathing wave travelling along the knot path creating peristaltic expansion/contraction, a twist rate rotating cross-section rings over time (the whole structure slowly corkscrews), and a ripple oscillation around each ring making them pulse rather than remaining perfect circles. Five knot configurations via P and Q parameters: Trefoil (2,3), Cinquefoil (2,5), Torus (1,3), Lissajous (3,4), Jellyfish (1,2).
A naming error — attribute aU referenced as uU throughout the vertex shader — silenced the entire pipeline. iOS GLSL fails immediately on undeclared identifiers with a minimally informative error.
The Ferrofluids
Fragment Shader · Turing Patterns · Reaction-Diffusion · Multi-Scale Noise · Magnetic Poles
Open — active groupThe most resistant group. Ferrofluid — magnetic liquid forming labyrinthine spike and cell patterns under a magnetic field — required five failed implementation attempts before a working solution was found. The failures are documented in full: they constitute the research record for why the eventual approach is architecturally correct.
CPU Gray-Scott — Four Failed Attempts
22 April 2026Four successive CPU reaction-diffusion attempts, each addressing the previous failure mode. Tiny white rectangles (simulation cells at native pixel density, no upscaling). Black screen (too slow to develop patterns). Isolated patches (insufficient pre-warming and sparse seeding). Same isolated patches with dense seeding (2000 steps still insufficient for 320×320 on mobile hardware). CPU simulation at any resolution sufficient to produce connected labyrinthine patterns is too slow on mobile — this is the same constraint first encountered in Group 01.
GPU Ping-Pong — Silent FBO Failure
22 April 2026Full GPU ping-pong reaction-diffusion — simulation in fragment shaders alternating between two framebuffer objects. The FBO status check passed. The pre-warm loop ran. The output showed only the initial seed texture. iOS Safari was silently discarding all writes to the simulation FBOs. checkFramebufferStatus() returns COMPLETE but writes have no effect. This behaviour is undocumented and undetectable with standard WebGL API calls. The file was incomplete — create operation interrupted mid-write.
Turing Shader — Single-Pass Approximation
22 April 2026The solution was to abandon simulation entirely. A Turing pattern — the mathematical structure underlying reaction-diffusion — can be approximated directly using multi-scale noise. Activator at fine scale, inhibitor at coarser scale: their difference produces the cellular/labyrinthine structure of Gray-Scott at steady state. Computed in a single fragment shader pass, no state, no FBO, no upload. Full screen resolution on every device.
Magnetic poles warp the sampling coordinates toward their positions, creating radial spike structures exactly as real ferrofluid does around a physical magnet. Six presets: Labyrinth, Spots, Coral, Cells, Chaos, Reference.
The constraint that prevented simulation led to a solution that is architecturally simpler, more portable, and qualitatively identical to the intended output.
The Attractor & Point Cloud Explorations
WebGL · N-Body Gravity · Particle Trails · Ring Buffer · Point Cloud · PLY Loading
Open — active groupInspired by a Rendah Mag cover image — a gravitational particle disc with long velocity trails, created in TouchDesigner. The question was how close a self-contained browser piece could get to the same aesthetic. The answer: very close — and the point cloud seeding capability extends the idea beyond what the TouchDesigner piece does.
Gravitational Disc — Foundation
22 April 20268000 particles seeded in a flat ring with circular orbital velocity (v = √G/r). Each particle accumulates up to 40 past positions in a ring buffer, rendered as GL_LINES fading from white-hot at the head to transparent at the tail. Particles that escape or are swallowed by the attractor respawn from fresh initial conditions. Bloom post-process gives the characteristic bright core with diffuse halo. Pre-warmed 120 steps before first render.
Point Cloud Seeding + PLY Loader
22 April 2026Five embedded point cloud shapes (Sphere, Torus, Twist, Helix, Figure-8) generated procedurally and baked as Float32Arrays in the HTML. A PLY file loader accepts any ASCII PLY, centres and normalises it, and uses the vertex positions as spawn coordinates. Switching shapes immediately respawns all particles from the new geometry — the object's form is briefly legible before the attractor pulls everything into the orbital disc.