All experiments

Surface parameterization

UV unwrap studio

Mark seams, unfold mesh charts, inspect distortion, and paint between the flat map and 3D surface.

JavaScript · Three.js · Surface parameterization

View source on GitHub

Try it

All editing and processing stays in your browser.

Getting started

  1. In Seams mode, click an edge and toggle it. Coral edges are cuts.
  2. Unwrap solves the charts again; a closed surface needs enough seams to open it.
  3. Switch to Paint and draw directly on the model or the atlas below. Export the atlas and OBJ together.

Made with this tool

Examples captured from the running editor.

A checker-textured cylinder with terracotta brush strokes on the top and curved side, alongside its flattened UV atlas.
Cylinder charts solved with LSCM and painted through their actual surface-to-UV mapping.
A checker-textured cube with cobalt paint and visible seam edges, alongside six square UV charts.
Six cube charts retain their own seams and share one paintable texture atlas.

Implementation and limits

Cut a surface into charts, flatten it with least-squares conformal maps, and paint on the model or its texture atlas.

  • Presets contain at most 80 triangles; the solver accepts at most 2,000.
  • Charts use two boundary pins and a rectangular grid packer, not an optimal production atlas packer.
  • Highly curved or poorly cut charts can overlap or fold. Stretch colors reveal local angular distortion, not a guarantee of an injective map.
  • The 3D brush uses a small spherical footprint: it spans UV seams but may also touch nearby surfaces on very thin geometry.

Explore the implementation, tests, and examples on GitHub