Files
workinf_Blender_Wasm/docs/status/N-018.md
2026-08-14 18:08:29 -04:00

57 lines
4.0 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 播放会话已落地desktop bake playback、WASM solver 和 bake job 未实现)
## 已验证切片
1. N-018-ARigid 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-Ccache 绑定 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 均验证。
## 仍然阻断
- N-018-A/B从真实 Main 提取完整 family settings、collection/effector/collision 依赖。
- N-018-Cdesktop bake payload 的逐 family decoder、正式 viewport UI 播放控制和 100 帧
golden浏览器自有 transform frame decoder/SceneIR 播放会话已完成但不替代 Blender bake。
- N-018-D逐 family WASM solver 初始化、线程、内存和确定性验证。
- N-018-Ebake 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
```
本轮在 Chromium 隔离端口复验 content-addressed cache 的 Worker restart、目标帧 range read、
帧 SHA-256、BTF1 seek/play/cancel 和迟到结果抑制通过;没有 desktop bake family decoder 或
solver因此 desktop playback/solver/bake 状态不变,继续为 `BLOCKED`