The LOD level dissolve as a state machine: which groups are dissolving from
which level, and how far.
When the DISPLAYED level of a group changes, the registry dissolves from the
outgoing level to the incoming one over config.lod.fadeMs — the incoming
at smoothstep of the elapsed fraction, the outgoing at the complement. It
is a function of TIME since the change, never of the camera's distance to a
threshold, so a parked camera always settles on ONE level at full weight
(#2925). This module owns only the bookkeeping; whether a pair CAN dissolve
(both ready, the outgoing still fresh, both blendable) is the registry's
answer, asked through DissolveHost, and the opacity writes are
lod-fade.ts.
Liveness (TickDemand): a dissolve advances only when the registry
evaluates a frame, so the loop must keep ticking while one is in flight.
The LOD level dissolve as a state machine: which groups are dissolving from which level, and how far.
When the DISPLAYED level of a group changes, the registry dissolves from the outgoing level to the incoming one over
config.lod.fadeMs— the incoming atsmoothstepof the elapsed fraction, the outgoing at the complement. It is a function of TIME since the change, never of the camera's distance to a threshold, so a parked camera always settles on ONE level at full weight (#2925). This module owns only the bookkeeping; whether a pair CAN dissolve (both ready, the outgoing still fresh, both blendable) is the registry's answer, asked through DissolveHost, and the opacity writes arelod-fade.ts.Liveness (TickDemand): a dissolve advances only when the registry evaluates a frame, so the loop must keep ticking while one is in flight.