Skip to content

UV: Slice D — Seams, sewing, and selection-scoped re-unwrap #462

Description

@fernandotonon

Parent epic: #458
Depends on: Slice C, #400 (xatlas auto-unwrap)

Goal

Let users mark seams on 3D edges, sew/split UV islands, pin UVs, and re-run the unwrap on a selected subset of faces respecting both seams and pins.

Scope

  • Add a per-edge seam boolean attribute on EditableMesh. Persist through save/load for FBX and glTF (use existing custom property channels; document the format).
  • Mark / clear seam actions on selected 3D edges (Edit Mode action) — visualized in both viewports.
  • Pin / Unpin selected UV vertices. Pin state persists in the same way.
  • Sew (stitch) action: where two island borders correspond to the same 3D edge, merge their UV verts.
  • Split (rip) action: break UVs along selected edges to create a new island border.
  • "Unwrap selected" action that calls into xatlas (AI: xatlas auto-UV unwrap (qtmesh uv --unwrap) #400) for the selected 3D faces only, treating marked seams as island boundaries and locking pinned UV vertices.
  • Visualize seams (bold red in 3D, bold red in UV panel) and pins (small icon at vertex) in both viewports.

Acceptance Criteria

  • Seam mark/clear works and survives save/load.
  • Pin/unpin works and survives save/load (or document the limitation if a format can't carry it).
  • Sew correctly merges island borders along shared 3D edges; doesn't merge unrelated coincident UVs.
  • Split creates a new island border with no other side-effects.
  • "Unwrap selected" only modifies the selected faces and respects seams + pins.
  • All operations are undoable.
  • Unit tests cover seam mark, sew, split, and selection-scoped unwrap.

Effort

~7 days. Seam persistence in FBX/glTF is the riskiest part.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestuv-editorUV map editor and editing tools

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions