Skip to content
Русский

The built-in systems

Every built-in system is addressable from a preset. Their named parameters, defaults, and per-system notes are tabulated in Parameter roster — that table is maintained alongside the presets and is the authoritative list.

system = What it draws
fragment_fieldA fullscreen domain-warped light field (fragment shader).
swarm~10k CPU-simulated particles on an evolving flow field.
parametric_curveA sampled line curve from one of five families — the Maurer rose, Lissajous, hypotrochoid, superformula or harmonograph (below).
lsystemAn L-system turtle figure, precomputed per depth.
star_patternA Hankin star pattern over a regular tiling.
reaction_diffusionA Gray-Scott reaction-diffusion field.
attractorGPU compute particles iterating a strange attractor.
spectrumThe log-spaced band array as N elements — bars, a contour, or a ring.
emitterObjects that spawn, ride their own parabola, and die — the only system whose population varies.
shape_fieldOne mark silhouette drawn at frame scale as a signed-distance field, so banding the palette draws concentric offset contours.
warp_meshThe previous frame, resampled through a grid with one transform per vertex — the only system that draws nothing of its own.
shape_collageFlat opaque elements on their own off-white paper, composited in painter order — the only system in which one object is genuinely in front of another, and the only one that draws a graphic rather than light.
analytic_fieldA fullscreen closed-form function of position from one of two families — the Chladni plate’s nodal lines, or an escape-time Julia or Mandelbrot set with optional orbit traps (below).
cellularA discrete cellular automaton on a grid of cells, from one of three families — Conway’s Life and every birth/survival rule, Larger than Life’s wide neighbourhoods, or the cyclic automaton’s spirals — painted with the history of each cell (below).
plexusA few hundred points in 3D, joined by a line wherever two come close, seen through a perspective camera with a real focal plane: lines and dots blur with their distance from focus. The points drift through a cube or ripple on a sheet (below).

There is deliberately no per-system preset count here. A count re-drifts every time a preset is added and nothing fails when it does. presets/ is the list; ls presets/*.toml is the count.

shape_collage adds parameters, not grammar. Every variable, constant, function, operator and error message in The expression language is the same with it as without, and a collage preset is written with the same vocabulary as every other preset — worth stating, because a new system reads like it must have brought new grammar with it.

The four line systems share one stroke. parametric_curve, lsystem, star_pattern and spectrum all draw through the same line renderer, so thickness, brightness, glow and softness mean the same thing on all four and a value that reads well on one transfers. softness is the shape of the stroke across its width: 0 is solid with a one-pixel antialiased edge, 1 is a pure quadratic falloff, and the default is 0.25. It is coverage where glow is light — reach for softness when a figure reads blurred and glow when it reads too bright. The working ranges, the sub-pixel limit and the thickness dead zone that sits beside it are in Parameter roster.

Beyond a system’s own parameters, every preset may also bind the engine-wide compositing controls — the shared view transform (zoom, pan_x, pan_y), the background pass (bg_*), feedback trails, the screen-space kaleidoscope (kaleido_*), bloom_*, occlude (how much of the figure’s coverage the backdrop resolves against), the frame exposure, and the final ink-on-paper remap (ink_* / paper_*). Those are documented under Engine-wide controls.

They run in a fixed order, which is worth knowing when a look does not compose the way you expect:

|------------------ linear light, unbounded -------------------| |-- 0..1 --|
scene -> post chain (trails -> kaleidoscope -> bloom) OVER background -> [transition blend] -> tonemap/exposure -> ink -> present

Everything up to and including the post chain is per preset — during a dissolve each side composites its own backdrop and chain, independently. The blend, the tonemap and the ink remap are engine-wide: one pass each, over the frame both presets produced.

Everything left of the tonemap is floating-point linear light, so an additive accumulation is free to exceed 1.0 and no hand-off clips; the tonemap is the single place the frame becomes a displayable picture. That is why bloom_threshold can mean “brighter than the display could show” and why stacked strokes roll off with their colour intact instead of flattening to white.

The post chain renders at the render target’s own resolution. trails and kaleido_* follow the target (quantized and capped) rather than a fixed grid, so composing either one costs no sharpness at any display size.

A stage changes softness, never shape. The internal grid is a resolution, not a proportion: your scene is drawn at the window’s aspect and the stage’s present stretches it back by exactly the inverse, so the grid’s own ratio cancels out and a circle stays a circle whether trails is on or off (ADR-0037). A preset comment that blames a stage for a figure’s shape is stale.

Two things still follow from a stage being a resample:

  • On a line scene, mirror_order / mirror_reflect replicate real geometry before rasterization, so they cost nothing in resolution, while kaleido_* folds finished pixels. Prefer the mirror when either would do — see Mirror or kaleidoscope?.
  • Reaction-diffusion is a special case in the other direction. Its simulation grid is deliberately fixed and independent of the window, but the field is toroidal, so pan_* is a seamless infinite scroll and zoom > 1 tiles rather than running out of field.

In this section

Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.