public record class SourceAttributesThe channels a source mesh carries that EditMesh has no room for.
Remarks
Parallel arrays alongside the mesh, and that is the documented choice. docs/plan/41-automatic-retopology.md § D12 asks for colours and skinning weights to survive a remesh and leaves open where they live. EditMesh has a normal layer and a texture-coordinate layer and nothing else, and growing it a colour channel and a bone channel would put a renderer's and a rig's vocabulary into doc 24's geometry types — which have consumers that have never heard of either. So they travel beside the mesh, indexed by the mesh's own indices.
⚠ Colours are per corner and weights are per position, and the split is not arbitrary. A colour is a statement about the surface's appearance and can legitimately jump across a seam; a weight is a statement about where the surface moves to, and two corners at one position that moved differently would tear the mesh open.
⚠ Every channel is optional and an empty one means "the source had none", not "zero". A source with no colours must not come back with a mesh painted black.
Fields and properties (4)
public IReadOnlyList<Vector4> ColorsA colour or mask per source corner, or empty for none.
public SkinBinding? WeightsSkinning weights per source position, or null for none.
public IReadOnlyList<int>? BoneMirrorWhere each bone's mirror sits, entry i being bone i's, or null for none.
public static SourceAttributes NoneNothing at all — a source that is only geometry, which is the generated-blob case.
Used by (6)
- AttributeMirrorVixen.Geometry.Remeshing
- AttributeTransferVixen.Geometry.Remeshing
- AttributeTransferTestsVixen.Geometry.Remeshing.Tests
- RemesherVixen.Geometry.Remeshing
- SymmetryPassVixen.Geometry.Remeshing
- SymmetryTransferTestsVixen.Geometry.Remeshing.Tests