Swarm & attractor — the per-particle hue band
| Param | Default | What it does |
|---|---|---|
hue_spread | 1.0 (swarm) / 0.15 (attractor) | Width of the per-particle hue band. Low = a coherent, single-family cloud; 1.0 on the swarm is the full-wheel rainbow. |
hue_center | 0.5 (swarm) / 0.075 (attractor) | Centre of that band in the gradient. Two presets that differ only here render as different colours. |
Particle hues occupy hue_center + (particle_seed - 0.5) * hue_spread. hue_center
is cyclic for the same reason color_center is — a negative centre wraps into the
bright end of the gradient, it does not clamp toward the dark one.
depth_hue rides this same coordinate on the two 3-D attractor flows, and what
it does is whatever moving along your ramp does — it has three regimes, none
of them discoverable from the roster (design-backlog 0062):
- It reads as a hue cue only on a ramp that travels in hue at roughly constant
lightness. Rendered side by side at
perspective = 0.5: against the since-retiredattractor_lorenz’s night-blue → teal → mint → solar-white ramp, adepth_hueof0.4reads as the near material getting brighter — a second contrast lever pointing the same way asdepth_fade, not an independent cue. Against a constant-lightness hue-travel ramp (blue → cyan → gold → orange → rose) the identical figure at the identical value puts a cool cyan on the far wing and warm gold on the near one, which is the atmospheric reading the parameter was built for. A dark-to-light ramp is what an additive glow scene is normally tuned for, so this is the trap the default tuning walks into. - It wraps, and the wrap can make far material look near. The offset is
±depth_hue/2on a coordinate the LUT sampler repeats — keep it under2 * min(hue_center, 1 - hue_center)or one end walks off the ramp and wraps to the other.attractor_lorenz’shue_centerran as low as0.13, so adepth_huemuch above0.26sends the far end negative and lands the far material on the same bright mint as the near — the cue inverts into a collision. Atdepth_hue = 1.0withhue_center = 0.20, both ends of the depth range sample the same coordinate (0.70, and-0.30which wraps to0.70). The repeat is the LUT’s documented behaviour everywhere else in the colour surface, so it is not clamped specially here. - It is structurally dead under
ink_amount = 1, likesaturation: the terminal remap keys on luminance and discards hue, and a depth tint is exactly the cue an ink preset cannot show. Not quite inert on amonopalette (the coordinate shift moves lightness, which the remap does see), but measured atdepth_hue = 0.4it moves 42 % of pixels by a mean of 2/255 — a rounding error against whatdepth_fadedoes deliberately on the same frame.
On the five IFS figures that coordinate has two more terms, and they are the
reason a wide hue_spread can make them look broken
(ADR-0087,
ADR-0088).
The full expression there is
hue_center + (particle_seed - 0.5) * hue_spread + (which_sub_copy - 0.5) * map_tint + how_far_from_skeleton * root_tintThe third term is not the same shape as the other two. map_tint is
centred — it spreads either side of the colour you chose — while root_tint is
anchored at zero: a point sitting on one of the figure’s contraction points
takes no shift at all and keeps your colour exactly, and the rest of the figure
ramps away from there in one direction. So the third term only ever pushes the
coordinate one way, which matters when you are budgeting.
And it is a budget. All three write the same number, so adding one means taking authority away from another, not stacking a third term on top. It has been measured twice on the same preset:
| the change | why |
|---|---|
attractor_fern’s hue_spread 0.16..0.42 → 0.05..0.125 | at the wider spread the random per-particle scatter smeared the parts together and map_tint was a faint wash at any setting |
the same fern’s map_tint 0.46 → 0.22 | stacked at full strength alongside root_tint the plant washes out; the stock preset looked better once the budget was split |
The *_hue routes are the escape, and that is what they are for. Neither
map_hue nor root_hue touches this coordinate — they rotate the hue of the
colour the ramp already returned — so a figure whose coordinate is fully spent
can still take a part separation or a depth cue through the hue route. That is
also why they throw a part out of a narrow palette rather than moving it
within one.
On the fern the escape won, so the second row is a measurement rather than the
shipped tuning. Judged against root_hue — which did not exist when the split
was measured — the fern keeps map_tint at its full 0.46 and takes its depth
cue through the hue route instead, giving up nothing. Every shipped IFS preset
binds root_hue; none binds root_tint. The budget is real; paying it is the
second choice.
One more trap on root_tint specifically: its effective range is per figure,
from 0.41 on the spiral to 1.05 on the dragon, so the same binding is not the
same look across figures. See
the full section in the parameter roster
for the table and for the age_* params these replaced.
Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.