53 lines
4.0 KiB
Markdown
53 lines
4.0 KiB
Markdown
# N-012 Geometry Nodes 与 Simulation
|
||
|
||
状态:`in_progress(资源/Simulation cache 安全层)`
|
||
|
||
详细分解、GraphIR、字段/实例闭包、deterministic simulation cache、错误码和验收命令见
|
||
[`docs/UNDECLARED_CAPABILITIES_EXECUTION_PLAN.md`](../UNDECLARED_CAPABILITIES_EXECUTION_PLAN.md)。
|
||
|
||
本轮已交付版本化 `GeometryNodeGraphIR`、node/socket/link/domain 校验、支持节点白名单、
|
||
循环依赖和自递归 group 检测。Object/Collection/Image Info 资源现在按 SceneIR stable ID、
|
||
资源类型、owner cycle 和 linked/missing/corrupt 沙箱校验。保存于 Blender Main 的 allowlist
|
||
图已启用有界 native evaluator;任意图写回仍返回 `CAPABILITY_MISSING`。
|
||
|
||
M10-01 已把真实 Blender Main 图拓扑、socket 默认值、link 和稳定 node/socket ID 发布到
|
||
SceneIR;M10-02 将 16 项 allowlist 固定为 schema 1。M10-03 用 11 个 Blender 5.2 desktop
|
||
fixture 覆盖全部 16 项节点,并在 Node full-Main WASM 与 Chromium Worker 打开、求值、保存、
|
||
重开路径逐项比较 topology、position、bounds 和 point float attribute。当前误差为 0,门限为
|
||
position max `1e-5`/RMS `1e-6`、attribute `1e-6`、bounds `1e-5`。真实 Simulation Zone 节点
|
||
仍返回 `GN_NODE_UNSUPPORTED` 并保留原图、graph hash 和 Main revision。
|
||
|
||
M10-04 已冻结 field materialization schema 1:POINT/EDGE/FACE/CORNER/CURVE/INSTANCE/LAYER
|
||
分别具有元素上限,单批最多 64 fields、32 次 domain conversion、4,000,000 个目标元素和
|
||
64 MiB;单 field 超过 65,536 scalar 时禁止 JSON transport。Depsgraph 的真实 point Float
|
||
attribute 回执携带 schema、domain cardinality、元素/scalar/byte 数并与 payload 交叉校验;
|
||
基数漂移、字节漂移、隐藏 JSON 数组和未知 domain 均 fail-closed。
|
||
|
||
M10-05 将 `SimulationCacheManifestIR` 升为 schema 2,加入 committed `sourceRevision` 和可由
|
||
graph ID/hash、source blend hash、source revision、input hash、Blender 版本及 frame range
|
||
复算的完整 `revisionHash`。cache key 不再截取 hash 前缀,而是 `sim2-` 加完整 revision hash;
|
||
Storage Worker 的 put/read/frame/list 均在 project lock 内核对当前 committed revision/hash,旧
|
||
revision 只保留在存储中、不进入当前列表且显式读取返回 `SIMULATION_CACHE_REVISION_MISMATCH`。
|
||
manifest/frame 未声明字段、legacy schema、graph/source/input/range 漂移均 fail-closed。
|
||
|
||
`SimulationCacheManifestIR` 已绑定 graph/source blend/input/revision hash、Blender 5.2、完整帧范围、
|
||
连续 byte range、总 payload 和逐帧 SHA-256。StorageWorker schema 7 使用 OPFS 内容寻址资产、
|
||
`simulation_manifest` 索引和 `simulation_quarantine` 隔离 store,写入前核对当前 committed blend。
|
||
每个 Worker 生命周期必须先完整复验 cache 才允许逐帧播放;播放/写入支持 AbortSignal,取消不发布
|
||
manifest;LRU 按 `lastAccessAt/createdAt/cacheKey` 确定性淘汰并保护 active playback;Worker 重启
|
||
重新验证,manifest 或 payload 损坏会从可播放索引移入 quarantine,列表仍返回其他有效 cache。
|
||
|
||
M10-15 为 GN 和 Simulation 分别增加隔离 Chromium Worker 门:GN 以 10 次 512-node
|
||
parse/validate、超 node budget 和 dependency cycle 覆盖性能/OOM-prevention/恶意输入;Simulation
|
||
以 64 帧逐帧 hash、16 GiB+1 manifest 和未声明字段覆盖同三类门。两域均在失败后由同 Worker
|
||
完成小输入恢复。
|
||
|
||
仍未声明:任意 field/domain 实际求值、完整 lazy-function runtime、图写回、浏览器生成 bake、
|
||
WASM Simulation Zone 求值、cache frame seek 接入 GN modifier 和任意实例图。验收:
|
||
`npm --prefix web run test:geometry-node-evaluator-golden`、
|
||
`npm --prefix web run test:geometry-node-field-budget`、`npm --prefix web run
|
||
test:simulation-cache-identity`、`npm --prefix web run test:simulation-cache`、
|
||
`npm --prefix web run test:simulation-cache-performance`、`npm --prefix web run
|
||
test:simulation-cache-lifecycle`、`npm --prefix web run test:capability-gates`、
|
||
`npm --prefix web run test:m10-domain-gates`。
|