Skip to content
Русский

shape_field — the same roster, at frame scale

The five silhouettes above are not only marks. system = "shape_field" draws one of them as a fullscreen signed-distance field, which is a different thing from a big particle: the palette coordinate becomes the distance to the figure, so banding it draws concentric offset contours of the shape (ADR-0105).

The roster is not the only source of a silhouette here. A [path] table hands this scene a figure you drew yourself, as inline SVG path data, and everything below applies to it unchanged — the same coordinate, the same banding, the same contours. It also brings two params the roster shares: stroke, which draws the figure’s outline instead of filling it, and morph, which travels between two authored silhouettes.

system = "shape_field"
[params]
shape = "4" # the roster above - 4 is the heart
scale = "0.55" # the figure's size in the frame
palette_steps = "9" # <- the contours. Without this it is a gradient.
palette_contour = "0.7" # thin outlines at the band boundaries
color_span = "0.45" # how much gradient the figure's interior spans
paramdoes
shapethe same numeric selector as the table above, same five names, same closed roster
pointsthe same 3..12 count, for polygon and star
star_valley / star_curve / star_jitter / star_wobble / star_wobble_freq / star_seedthe same star shape params — see The star arm. star_jitter is the one whose field precision is worth reading about there
scalethe figure’s size: its outline sits at scale of the frame’s short half-axis. Default 0.6, clamped to 0.01..20
pan_x / pan_ymove the figure’s centre (the shared view transform)
rotationturns the figure about its own centre, in radians. Default 0, an exact identity, unclamped — an angle wraps. Applied after pan_*, so a panned figure spins in place rather than orbiting the frame
gammathe response exponent on the figure coordinate, before it becomes a palette coordinate — where the contours crowd. Default 1.0 (evenly spaced, and an exact identity), clamped to 0.05..20
coord_modewhich coordinate the palette is handed. 0 (default) is the distance, whose contours are offset curves; 1 is r / r_boundary(theta), whose contours are scaled copies of the outline. Stepped, like points — there is nothing halfway between an offset curve and a scaled copy. See Two coordinates
strokedraws the figure’s outline at this half-width instead of filling it, in coordinate units — 0.08 is a band 8 % of the figure’s half-extent either side of the outline. Default 0, the filled figure and an exact identity. Fill and stroke are the same field, so the outline cannot drift off the figure it belongs to
morphtravels an authored [path] towards its morph_to silhouette, 0..1. Inert on a roster figure and on a path that names no target

gamma is well defined on a curved or jittered star, and the arithmetic behind that is worth knowing (backlog 0097). Those two params take the star arm’s curved branch. Normalizing its true distance by the straight edge plane’s perpendicular — always shorter than the figure’s real deepest-point distance — would put the coordinate negative at the centre, and pow of a negative base is NaN. The branch instead divides by the figure’s own deepest-point distance, so the coordinate is 0 there — exactly 0 while the spikes are all the same length, and within about 0.09 of it under star_jitter, where the divisor is the unjittered figure’s while the measurement is the fragment’s own spike’s. Either way gamma is an ordinary knob on every star, and a star world may bind it to a band like any other figure’s. (The worked example, Facet, bound it to treb after pinning gamma = "1.0" for this defect; it has since been retired, and no shipped star world binds gamma today.)

In this section

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