pub const MIN_PARTICLE_DENSITY: f32 = 0.0005;Expand description
The smallest [particles] density a preset may ask for (ADR-0069).
At this fraction the scene draws 25 particles at Floor (50 000) and
75 at Rich (150 000) — and that is deliberately far sparser than it
first looks like it should be, because the sparse end is the point of the
key rather than its degenerate edge.
This value is set from rendered captures, and the first arithmetic argument
for it was wrong. The reasoning that picked 0.01 (500 particles) ran:
ADR-0065 holds total light invariant by weighting each particle 50 000 / active, so a hundredth of the budget already concentrates a hundred
particles’ worth of light into every point, and an order of magnitude below
that must clip to white before it reads as a curve. Rendered at fade = 0.95,
it does not. The banding first appears around 0.01, and at 0.002 (100
particles) and 0.0005 (25) the Lorenz lobes resolve into visibly cleaner
spiral traces. The prediction missed that the trail spreads each particle’s
deposit along its whole path rather than piling it on one texel, so
concentrating light into fewer particles buys contrast against the background
instead of clipping.
So the floor is not protecting a look — it is rejecting a mis-typed magnitude.
0.0005 is the sparsest fraction that has actually been captured rendering
as the attractor; below it a preset is asking for single-digit trajectories,
which is a few orbits rather than a figure. active_particles separately
guarantees at least one particle, so nothing here can produce an empty draw.