Files
workinf_Blender_Wasm/docs/status/N-018.md
mes123456 0fe8d2bb56
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
Advance M8-M11 parity workflows
2026-08-17 04:37:07 -04:00

65 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# N-018 Physics 与 Simulation
状态:`BLOCKED`(family capability、settings/dependency/cache manifest、错误帧门、浏览器自有
BTF1 播放会话及逐 family solver probe 已落地;desktop bake playback、WASM solver 和 bake job 未实现)
## 已验证切片
1. N-018-A:Rigid Body、Soft Body、Cloth、Fluid、Dynamic Paint、Particle、Hair
使用固定枚举能力清单;metadata/cache manifest 为 `LOCAL_BOUNDED`,cache playback、
local solver、server job 均保持 `BLOCKED`。
2. N-018-B(部分):`PhysicsSimulationManifestIR` 绑定 owner Object、settings SHA-256、
有界设置摘要、依赖 stable ID 和 desktop bake cache;系统依赖环、重复依赖和超预算拒绝。
3. N-018-C(门):cache 绑定 source blend/settings/input/cache SHA-256、帧范围和实际已缓存帧;
`COMPLETE` 必须逐帧连续,frame seek 只返回精确命中帧,禁止复用相邻错误帧。
4. Simulation cache 在 Worker restart 后重新验证整包;帧级读取在 OPFS 使用目标 range、
IndexedDB 使用有界 slice,并再次校验该帧 SHA-256,越界帧返回 `SIMULATION_CACHE_MISSING`。
5. 单 manifest 上限 4096 systems、每系统 1024 dependencies、256 settings/64 KiB、
100k frames;单帧 512 MiB、整包 16 GiB,分配和 range 计算前检查安全整数及预算。
6. authoritative Main reader 扫描真实 Rigid Body、Soft Body、Cloth、Fluid、Dynamic Paint、
Particle/Hair 数据;只输出实际存在的 system,绑定 owner stable ID、有界 settings、collision
dependency 和浏览器可复算 SHA-256。当前 fixture 实证覆盖禁用 Cloth、Soft Body 和 Collision
依赖,save/reopen 保持一致;未用合成 system 填充其余 family。
7. N-018-C(浏览器格式边界):版本化 `BTF1` 二进制帧可解码有界 object transform,校验
frame、对象 stable ID、精确字节长度、有限 translation、单位 quaternion、非零 scale 和重复
ID。该格式仅是浏览器自有的 cache playback primitive,不是 Blender desktop bake family
payload,因此 capability inventory 的 `cachePlayback` 仍为 `BLOCKED`。
8. N-018-C(预览适配):精确帧匹配的 BTF1 可不可变地映射到 SceneIR preview,按 stable object
ID 更新 translation/quaternion/scale、Euler、local/world matrix 和当前帧;未知对象、错帧、
层级环或缺父对象拒绝。该适配只证明浏览器自有 transform cache,不改变 desktop family
bake playback 的 `BLOCKED` 状态。
9. N-018-C(浏览器播放会话):BTF1 支持有界范围顺序播放、精确 seek 和 cancel;新请求会使旧
异步读取失效,即使底层读取器忽略 `AbortSignal`,迟到结果也不会覆盖当前预览。每帧都从同一
不可变基准 SceneIR 应用绝对变换,避免逐帧累计误差。
10. N-018-C(持久缓存集成):两帧真实 BTF1 经过 content-addressed Simulation cache 写入,终止
Storage Worker 后由新 Worker 精确 range 读取第二帧并应用到 SceneIR;帧 hash、magic、offset
和最终 object translation 均验证。
11. N-018-D(M10-13 probe 门):七个 family 分别检查 runtime export、初始化、线程和内存;只有
四门全过才允许 `LOCAL_SOLVER`。当前生产 inventory 没有 solver adapter,全部明确路由到
`DESKTOP_SERVER_BAKE`。合成正例只验证门逻辑,不声明真实 WASM solver 或 cache decoder。
12. N-018-C/D(M10-14 cache 门):七类 desktop/server bake cache 均绑定 cache schema、family、
Blender 5.2、source/settings/input/cache hash、frame range、总/逐帧 byte range/hash;消费前对
实际 source、payload 和逐帧 bytes 复算 SHA-256。decoder/playback capability 仍不开放。
## 仍然阻断
- N-018-A/B:从真实 Main 提取完整 family settings、collection/effector/collision 依赖。
- N-018-C:desktop bake payload 的逐 family decoder、正式 viewport UI 播放控制和 100 帧
golden;浏览器自有 transform frame decoder/SceneIR 播放会话已完成但不替代 Blender bake。
- N-018-D:逐 family 真实 WASM solver adapter、初始化实现和确定性 golden;探测/路由门已完成。
- N-018-E:bake start/cancel/commit、服务端 job、故障恢复、进度与 UI。
## 验收
```bash
WEB_TEST_PORT=5204 npm --prefix web run test:e2e -- --grep "N-018 physics"
npm --prefix web run test:simulation-cache
npm --prefix web run test:physics-main-reader
npm --prefix web run test:physics-solver-probe
npm --prefix web run test:physics-cache-family
```
本轮在 Chromium 隔离端口复验 content-addressed cache 的 Worker restart、目标帧 range read、
帧 SHA-256、BTF1 seek/play/cancel、迟到结果抑制和逐 family solver probe 通过;没有 desktop
bake family decoder 或真实 solver,因此 desktop playback/solver/bake 状态不变,继续为 `BLOCKED`。