47 lines
2.6 KiB
Markdown
47 lines
2.6 KiB
Markdown
# W-076 Status
|
|
|
|
status: in_progress
|
|
task: 属性、UV 和蒙皮安全简化
|
|
|
|
`SimplifyProfile` now requires an explicit attribute policy after parsing and
|
|
defines `SkinSimplifyPolicy` limits for influences, weights, position error and
|
|
shape keys. The native command currently implements this partial protection
|
|
matrix:
|
|
|
|
- normals are recomputed from the evaluated triangle topology;
|
|
- BMFace material indices and material slot IDs are retained;
|
|
- existing UV and float-color corner values are transferred to output corners
|
|
using a deterministic closest-source-triangle barycentric projection;
|
|
- `DROP` is the only policy that removes these arrays intentionally;
|
|
- Collapse validates and accepts open/non-manifold Mesh-to-BMesh topology;
|
|
- the native reader exports Mesh `MDeformVert` CustomData as fixed four-slot
|
|
`SkinWeightsIR` arrays, carries Mesh vertex-group names, and exports
|
|
non-Basis `KeyBlock` positions as `ShapeKeyIR`; the local
|
|
`rigged_shape_scene.blend` fixture validates both on a real `.blend` file;
|
|
- a skinned or shape-key mesh requires explicit `skinPolicy`; omitting it is a
|
|
structured `NOT_IMPLEMENTED` failure rather than silent attribute loss.
|
|
|
|
Native smoke and browser Worker E2E verify normal, UV, corner and material
|
|
buffer sizes on the closed cube fixture. The WebEngine protocol validates
|
|
`SkinWeightsIR` and `ShapeKeyIR`. After BMesh produces the authoritative
|
|
topology, native code projects each output vertex onto the closest source
|
|
triangle, merges and normalizes its joint influences, and reconstructs every
|
|
shape-key position with the same barycentric weights. `maxInfluences`,
|
|
`minWeight` and `maxPositionError` are enforced before committing the new
|
|
SceneIR. Native smoke and Worker E2E verify output vertex counts, normalized
|
|
weights, stable joint IDs, bind matrices and shape-key array lengths.
|
|
`shapeKeys: REJECT` still returns `SHAPE_KEYS_REJECTED` before native work.
|
|
|
|
The reader now exports `ArmatureIR` bones with parent IDs, Blender `Bone.arm_mat`
|
|
rest matrices and matching `PoseChannel.pose_mat` matrices. A mesh Armature
|
|
modifier resolves its armature object, remaps vertex-group bone names to stable
|
|
joint IDs, and records the mesh object TRS as its non-identity bind matrix. The
|
|
generated rig fixture verifies all fields against local Blender data. This is
|
|
sufficient for GLB inverse-bind generation and the current triangle-bridge
|
|
remapping path.
|
|
|
|
UV seam and sharp-edge error metrics, tangent regeneration, native
|
|
vertex-group name selection in profiles, Armature deformation comparison,
|
|
seam/sharp constraints and Blender-evaluated shape-key error comparison remain
|
|
required before this task can be marked done.
|