feat(mix-visualizer): Phase 10 tuning — smooth waveform, bouncy collision, 8 knobs
Smooth the loudness contour (~50 ms envelope at preprocessing + decode-time, plus smootherstep render reconstruction); retune wax↔waveform collision to bouncy/sub-unity (no explosion/stuck/jitter); split the bubbles knob into fluid-amount + fluid-viscosity (cohesion via uniform-only smin/wobble); retune scroll/gravity/heat/width ranges; make the colour rotation visible and boost OKLab chroma; the controls bar now holds its layout and hides only its knobs via a Visible parameter.
This commit is contained in:
@@ -15,6 +15,27 @@ public static class MixZoomMapping
|
||||
/// <summary>Longest span (min zoom). Tunable.</summary>
|
||||
public const double MaxVisibleSeconds = 30.0;
|
||||
|
||||
/// <summary>
|
||||
/// Lower edge of the useful zoom band on the underlying fraction axis. Phase 10 retune: the bottom
|
||||
/// 60% of the old knob travel (fraction 0…0.6) was a useless slow/wide window, so the scroll knob's
|
||||
/// full [0,1] travel now maps onto the upper 0.6…1.0 band where every position reads as a useful
|
||||
/// zoom (Daniel: "range below 60% is useless; optimize for the current 60%–110% zoom values" — 110%
|
||||
/// caps at the hard 0.333 s max-zoom anchor, fraction 1.0).
|
||||
/// </summary>
|
||||
public const double ScrollKnobZoomFloor = 0.60;
|
||||
|
||||
/// <summary>
|
||||
/// Maps the scroll-speed knob [0,1] onto the useful zoom band [<see cref="ScrollKnobZoomFloor"/>, 1.0]
|
||||
/// of the underlying fraction axis, then to visible seconds. So knob 0 sits at the slow edge of the
|
||||
/// *useful* range (not the dead slow end), and knob 1 reaches max zoom. Phase 10 scroll retune.
|
||||
/// </summary>
|
||||
public static double ScrollKnobToSeconds(double knob)
|
||||
{
|
||||
knob = Math.Clamp(knob, 0, 1);
|
||||
var fraction = ScrollKnobZoomFloor + (1.0 - ScrollKnobZoomFloor) * knob;
|
||||
return FractionToSeconds(fraction);
|
||||
}
|
||||
|
||||
/// <summary>Slider position [0, 1] -> visible seconds. 0 = zoomed out, 1 = zoomed in.</summary>
|
||||
public static double FractionToSeconds(double fraction)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user