2.4 KiB
2.4 KiB
N-017 Paint 与权重
状态:BLOCKED(stroke/patch schema、真实 Three raycast 命中、Main 顶点色/权重 transaction
已落地;PBVH brush、texture paint 和 GPU/image 生命周期未实现)
已验证切片
- N-017-A(部分):
PaintStrokeIR覆盖 Vertex Color、Weight、Texture Paint,携带 object/revision、radius/strength、pressure、PBVH face/barycentric hit 和 UV hit。 - N-017-A(部分):
WeightPatchIR覆盖有界 vertex index/value、normalize 和 mirror 意图。 - 预算限制为单 stroke 100k samples/64 MiB 估算、单 weight patch 1M entries、单 texture tile 256 MiB;非法 barycentric、pressure、color、weight 和非有限数会结构化拒绝。
- N-017-B(部分):
setVertexColors在单用户 Mesh 上创建/转换POINT或CORNERFLOAT_COLOR属性,并更新 active color;setVertexWeights在真实 Object/Mesh 上创建顶点组、 写入/移除MDeformWeight,支持逐顶点 normalize。 - 顶点色和权重都已通过 Main undo/redo 与
.blendsave/reopen;mirror:true在没有已验证 对称拓扑映射时返回CAPABILITY_MISSING,不会伪造镜像结果。 paintHitFromIntersection消费真实 ThreeRaycasterintersection,按 indexed/non-indexed triangle 解析顶点,输出对象/data stable ID、source face、局部 barycentric、世界法线、 插值 UV 与 pressure;测试使用真实 BufferGeometry 射线,不注入伪命中。- Properties paint 面板消费 viewport 的真实 VERT selection,可向选中顶点提交
POINTWebPaintColor和 vertex group weight;每次操作只发一个既有 Main transaction,继续使用 revision、undo/redo、save/reopen 边界。它不是 PBVH brush 或 texture paint。
仍然阻断
- N-017-A:PBVH 加速结构、遮挡/背面选择和 brush falloff 对桌面语义的对应;基础 Mesh/UV raycast hit 已完成。
- N-017-B:limit/clean、已验证拓扑映射上的 mirror、桌面 brush/falloff 对照。
- N-017-C:packed/UDIM tile transaction、色彩空间、dirty tile 和原子保存。
- N-017-D/E:armature golden、seam bleed、mask/selection、GPU dispose、quota、坏图和 UI。
验收
WEB_TEST_PORT=5203 npm --prefix web run test:e2e -- --grep "N-017 paint"
npm --prefix web run test:paint-roundtrip
test:paint-roundtrip 覆盖 CORNER color、vertex group patch、normalize、mirror 错误门、
undo/redo 与 save/reopen。