Пользовательский результат
Проверить, может ли compositor исполнять spring-траекторию существенно меньшим числом сегментов, если вместо piecewise-linear linear() использовать piecewise cubic Hermite, построенный по точным значениям и скоростям solver.
Это исследование representation, не заранее принятое изменение production path.
Математическая основа
На интервале [t₀,t₁], h=t₁-t₀, известны:
x₀ = x(t₀)
v₀ = x'(t₀)
x₁ = x(t₁)
v₁ = x'(t₁)
Cubic Hermite interpolant совпадает по value+velocity на обоих концах. Классический bound:
|max(f-H)| <= max|f⁽⁴⁾| · h⁴ / 384
В отличие от linear interpolation O(h²), cubic даёт O(h⁴) при точных derivatives.
Для spring в dimensionless state y=x-1, v=y':
y'' = -y-2ζv
y''' = 2ζy + (4ζ²-1)v
y⁽⁴⁾ = (1-4ζ²)y + 4ζ(1-2ζ²)v
Нужен устойчивый local/global bound на |y⁽⁴⁾|, желательно через state/energy, а не dense heuristic.
Представление через WAAPI cubic-bezier
Для каждого сегмента значение cubic Hermite эквивалентно cubic Bézier по value-axis:
P₁ = x₀ + h v₀ / 3
P₂ = x₁ - h v₁ / 3
Если Δ=x₁-x₀ не вырожден:
cubic-bezier(
1/3, (P₁-x₀)/Δ,
2/3, (P₂-x₀)/Δ
)
может использоваться как per-segment easing между authored keyframes. Нужно доказать браузерную семантику для overshooting control points, exact offsets и multi-property groups во всех трёх движках.
При |Δ|≈0, экстремумах или sign change representation обязана split-нуть сегмент в критической точке либо fail-closed; деление на малый span запрещено.
Подтверждённый потенциал
Прототип при tolerance 0.0025 дал ориентировочно:
ζ=0.03: linear 684 segments -> cubic 117
ζ=0.10: 207 -> 36
ζ=0.30: 66 -> 13
ζ=0.50: 44 -> 8
ζ=0.70: 33 -> 7
ζ=0.90: 28 -> 8
ζ=1.00: 29 -> 10
При сильном overdamping простой global fourth-derivative bound может быть хуже linear; поэтому решение должно быть portfolio/conditional, не полной заменой.
Обязательные вопросы spike
- Поддерживают ли Chromium/Firefox/WebKit нужные per-keyframe easing и overshooting y-control points одинаково?
- Остаётся ли исполнение compositor-resident для transform/opacity?
- Что меньше фактически: число segments, serialized bytes, parsed keyframe memory и start cost?
- Можно ли sample/handoff получить аналитически из cubic artifact за
O(log K) с точной производной?
- Как группировать multi-property tracks с общей spring shape без дублирования frames?
- Когда linear representation строго лучше?
RED / доказательства
- independent Hermite evaluator + fourth-derivative bound;
- exact value/velocity at every knot;
- mandatory roots/extrema/near-zero-span split corpus;
- under/critical/over,
v₀, near-critical, large overshoot;
- dense raw-spring error <= effective tolerance including number serialization;
- browser differential by
Animation.currentTime;
- pause/seek/cancel/retarget handoff slope against serialized cubic, not raw spring;
- no layout reads and zero steady-state rAF for accepted native path;
- fallback to current linear artifact when capability/budget fails;
- mutation on control-point factors, derivative scaling, split roots, segment offsets;
- size/perf comparison against current adaptive linear and uniform implicit candidates.
GO
Production representation разрешена только если для определённого shape-domain она одновременно:
- меньше по actual gzip/raw artifact bytes либо значительно дешевле browser start/memory;
- проходит full browser/capability/C¹ matrix;
- не повышает runtime entry budgets;
- выбирается общим portfolio compiler, а не новым публичным API.
NO-GO
Если browser implementation уходит с compositor, artifact bytes растут из-за per-segment easing или handoff усложняется непропорционально — сохранить report/lower bounds, удалить experimental runtime.
Не входит
Зависит: #226. Родитель: #225. Связано: #223, #228, #220.
Пользовательский результат
Проверить, может ли compositor исполнять spring-траекторию существенно меньшим числом сегментов, если вместо piecewise-linear
linear()использовать piecewise cubic Hermite, построенный по точным значениям и скоростям solver.Это исследование representation, не заранее принятое изменение production path.
Математическая основа
На интервале
[t₀,t₁],h=t₁-t₀, известны:Cubic Hermite interpolant совпадает по value+velocity на обоих концах. Классический bound:
В отличие от linear interpolation
O(h²), cubic даётO(h⁴)при точных derivatives.Для spring в dimensionless state
y=x-1,v=y':Нужен устойчивый local/global bound на
|y⁽⁴⁾|, желательно через state/energy, а не dense heuristic.Представление через WAAPI cubic-bezier
Для каждого сегмента значение cubic Hermite эквивалентно cubic Bézier по value-axis:
Если
Δ=x₁-x₀не вырожден:может использоваться как per-segment easing между authored keyframes. Нужно доказать браузерную семантику для overshooting control points, exact offsets и multi-property groups во всех трёх движках.
При
|Δ|≈0, экстремумах или sign change representation обязана split-нуть сегмент в критической точке либо fail-closed; деление на малый span запрещено.Подтверждённый потенциал
Прототип при tolerance
0.0025дал ориентировочно:При сильном overdamping простой global fourth-derivative bound может быть хуже linear; поэтому решение должно быть portfolio/conditional, не полной заменой.
Обязательные вопросы spike
O(log K)с точной производной?RED / доказательства
v₀, near-critical, large overshoot;Animation.currentTime;GO
Production representation разрешена только если для определённого shape-domain она одновременно:
NO-GO
Если browser implementation уходит с compositor, artifact bytes растут из-за per-segment easing или handoff усложняется непропорционально — сохранить report/lower bounds, удалить experimental runtime.
Не входит
Зависит: #226. Родитель: #225. Связано: #223, #228, #220.