47 lines
3.0 KiB
Markdown
47 lines
3.0 KiB
Markdown
# N-018 Physics 与 Simulation
|
||
|
||
状态:`BLOCKED`(family capability、settings/dependency/cache manifest 与错误帧门已落地;
|
||
cache 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`。
|
||
|
||
## 仍然阻断
|
||
|
||
- N-018-A/B:从真实 Main 提取完整 family settings、collection/effector/collision 依赖。
|
||
- N-018-C:desktop bake payload 的逐 family decoder、与 depsgraph/viewport 的 frame playback
|
||
连接和 100 帧 golden;浏览器自有 transform frame decoder 已完成但不替代 Blender bake。
|
||
- N-018-D:逐 family WASM solver 初始化、线程、内存和确定性验证。
|
||
- 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
|
||
```
|
||
|
||
本轮在 Chromium 隔离端口复验 content-addressed cache 的 Worker restart、目标帧 range read 与
|
||
帧 SHA-256 门通过;没有 desktop bake family decoder 或 solver,因此 playback/solver/bake 状态
|
||
不变,继续为 `BLOCKED`。
|