Files
workinf_Blender_Wasm/docs/status/N-020.md
mes123456 5a11045ca5
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 Blender 5.2 web parity through M12-03D
2026-08-17 17:30:27 -04:00

64 lines
4.6 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-020 Compositor
状态:`BLOCKED`(GraphIR、有界 CPU executor、真实 Main graph reader、四节点 WebGPU golden、
Unsupported 全图执行门和故障生命周期闭环已落地;完整节点参数映射、通用 WebGPU、HDR golden
和服务端执行未实现)
## 已验证切片
1. N-020-A:版本化 `CompositorGraphIR` 覆盖 Image、Render Layer、Constant Color、
Transform、Invert、Exposure、Alpha Over、Blur、Mix、Viewer、Composite 与 Unsupported;
节点/资源 ID、重复 input socket、缺失引用和 graph cycle 会拒绝。
2. N-020-B(CPU 子集):线性 sRGB Float32 RGBA executor 按拓扑序执行 Transform、颜色、
Alpha Over、Blur、Mix,并返回 Composite 与多 Viewer 输出。
3. N-020-C(部分):最大 4096 nodes、16384 links、4096 resources、8192 dimension、
16M pixels、256 MiB image 和 100M blur operations;分配前检查,支持 worker cancellation。
4. N-020-D(门):Unsupported node 保留 Blender type metadata,并返回
`COMPOSITOR_NODE_UNSUPPORTED`,不会删节点后继续运行。
5. N-020-A(部分):Blender 5.2 Scene `compositing_node_group` 从真实 Main 快照读取稳定 node
identifier、socket identifier 和 link;活动 Group Output/旧 Composite 映射为 Composite,
Viewer 和常量 RGBA 映射到已验证节点,其他节点原样保留 `blenderType` 为 Unsupported。
4096 nodes/16384 links、重复 destination、缺 output 或不可读 node tree 返回 blocked status。
6. N-020-C(部分):CPU executor 在长像素/blur 循环中周期检查 cancellation,不再只在节点
边界取消;内容寻址 frame key 绑定规范化 GraphIR、资源 Float32 内容 SHA-256、frame 和输出
尺寸。有界 LRU cache 以克隆后的真实 buffer 字节计费(最多 256 MiB),命中返回隔离副本,
调用方修改结果不会污染缓存。它是内存帧缓存,不等同于 tile scheduler 或 OPFS 持久缓存。
7. N-020-A/B(真实参数链):Blender 5.2 Main reader 从真实 socket default 读取 Exposure,并仅在
factor=1、invert color=true、invert alpha=false 时把 Invert 映射到当前 CPU 精确子集;Group
Output 的动态 `Socket_0` 规范化为 GraphIR `Image`。桌面生成 fixture 经 WASM/Worker 后直接由
CPU executor 求值 Constant→Exposure→Invert→Composite,RGBA 结果通过;未连接的 Glare 仍保留
Unsupported 并使完整图 capability gate 保持阻断。
8. N-020-B/E(M11-07 有界 WebGPU golden):显式 allowlist 只包含 Constant Color、Exposure、
Invert、Composite。Blender 5.2 生成的四场景 fixture 经真实 WASM Main reader 后,生产 CPU
executor 与 Chromium WebGPU compute 对 2×2 `LINEAR_SRGB` Float32 RGBA 输出逐字节 SHA-256
相同;CPU-only、资源输入、未声明节点、断链和错误 socket 在 shader 编译前结构化阻断。
9. N-020-D(M11-08 全图执行门):CPU 与 frame-cache 入口在求值、取消回调和 cache hit 前扫描
完整 graph;即使 Unsupported 节点未连接到 Composite,也返回
`COMPOSITOR_NODE_UNSUPPORTED`。真实 Blender 5.2 Main fixture 的 Glare node name/type/
`blenderType`、graph JSON 与 revision 在失败前后完全不变;预置 cache 不能绕过该门。
10. M11-14 Compositor fault lifecycle:真实 Main graph 的 CPU executor 周期取消返回
`COMPOSITOR_CANCELLED`,8193 像素超尺寸输入在分配/缓存前返回
`COMPOSITOR_BUDGET_EXCEEDED`。generation 2 重开保持 GraphIR identity 与 Float32 output
SHA-256,LRU `clear()` 返回已释放字节并把 entries/bytes 归零。
## 仍然阻断
- N-020-A:Main graph 写回,以及 Transform、非默认 Invert、Alpha Over、Blur、Mix、Image/Render
Layer 的逐节点参数与 resource/pass reader;基础真实图结构、常量色、Exposure、默认 Invert、
Viewer/Composite 已完成。
- N-020-B/C:M11-07 只实现四节点、无资源、单输入链的有界 WebGPU compute;通用 WebGPU
executor、tile scheduler、OPFS 持久 frame cache、增量 invalidation 和生产 GPU 调度仍阻断;
CPU 周期取消和内容寻址内存 LRU 已完成。
- N-020-D:服务端 Blender job、source hash 和结果提交。
- N-020-E:desktop HDR/alpha/color-space golden、OOM/fault/device-loss。
## 验收
```bash
WEB_TEST_PORT=5320 npm --prefix web run test:e2e -- --grep "N-020 CPU compositor"
npm --prefix web run test:compositor-main-reader
WEB_TEST_PORT=5562 npm --prefix web run test:compositor-node-golden
WEB_TEST_PORT=5565 npm --prefix web run test:compositor-unsupported-gate
WEB_TEST_PORT=5592 npm --prefix web run test:render-compositor-media-recovery
```