34 lines
2.3 KiB
Markdown
34 lines
2.3 KiB
Markdown
# N-014 NLA
|
||
|
||
状态:`in_progress(Action Clip Main/求值 + reverse/repeat 子集)`
|
||
|
||
详细分解、AnimationIR strip/track、Main 编辑、原生 NLA 求值、UI、GLB 映射和验收命令见
|
||
[`docs/UNDECLARED_CAPABILITIES_EXECUTION_PLAN.md`](../UNDECLARED_CAPABILITIES_EXECUTION_PLAN.md)。
|
||
|
||
本轮已交付 `NlaTrackIR`/`NlaStripIR`、Action 存在性、owner/path、稳定排序、不重叠、
|
||
range/scale/repeat/influence 一致性、blend/extrapolation 和 time-warp 阻断。SceneIR reader
|
||
可恢复 Track/Action Clip 摘要;`setNLAStack` 以整栈替换事务写 Blender Main,并经过
|
||
undo 历史、保存重开和 frame 5 native depsgraph 求值。Action Clip `reverse` 已映射到
|
||
Blender `NLASTRIP_FLAG_REVERSE`,reader 可恢复该标志;反向正例得到预期线性位置约
|
||
`[0.555556, 1.111111, 1.666667]`。
|
||
同一正例已扩为 `repeat=2`,frame 5 与第二周期 frame 14 的 native Depsgraph 矩阵一致。
|
||
|
||
M10-11 另以桌面 Blender 5.2 生成只读 fixture:同一 Track 包含 scale=2 的正向 Clip 和
|
||
reverse + repeat=2 的 Clip。桌面、Node WASM 与生产 Chromium Worker 在 12 个边界/周期帧上
|
||
逐矩阵比较,最大误差为 0;每帧求值前后的 Track/Strip/Action JSON 完全一致。本切片不调用
|
||
`setNLAStack`,不提前关闭细粒度 operator 工作。
|
||
|
||
当前只支持单对象 Action Clip、正 scale、Replace/Add/Multiply/Combine 和有限外插。
|
||
M10-12 仅新增 `moveNLAStrip`,以 revision gate 和单次 Main transaction 保留时长移动现有 Clip,
|
||
并已通过 undo/redo 与保存重开。Transition/Meta/Sound、Animated Time、Drivers、其余
|
||
create/remove/resize/active 命令、NLA UI、
|
||
骨骼/约束混合矩阵及 GLB 展开仍为 planned/结构化阻断。
|
||
|
||
M10-15 冻结 4,096 tracks、每 track 16,384 strips、总 65,536 strips 及 ID/name/reason 字节预算,
|
||
拒绝未声明字段。隔离 Chromium Worker 对 20 次 256-strip stack、超 track budget、恶意字段和
|
||
同会话小 stack 恢复分别建立 performance/OOM-prevention/malicious-input 门。
|
||
|
||
验收:`npm --prefix web run test:nla-evaluation-golden`、`npm --prefix web run test:nla-operator`、
|
||
`npm --prefix web run test:authoring-roundtrip`、
|
||
`npm --prefix web run test:capability-gates`、`npm --prefix web run test:m10-domain-gates`。
|