Skip to content

Cone Parametrization

Cone parametrization methods are a way to compute the parametrization of any surface with any topology. To understand the intuition that motivates them, one can think of a parametrization firstly as a process that displaces the curvature of a surface from its original distribution to zero everywhere except on the boundary. In the case of conformal maps, this idea is expressed by the Yamabe equation, that links the conformal parametrization, described by a scale factor \(u\), to the original and target Gaussian curvatures \(K\) and \(\hat{K}\) by:

\[Lu = K - \hat{K}\]

This curvature displacement is the source of the parametrization's distortion and needs to be minimal in some sense. In an effort to reduce distortion, one can try to find a suitable target curvature distribution \(\hat{K}\) such that, for instance, the amplitude of \(u\) is minimized. This introduces specific vertices called cones (also called singularities) with non-zero angle defect in the parametrization. Cone parametrization therefore aim at finding a sparse set of cones that concentrate the whole curvature of the considered surface. From such a distribution, it is possible to retrieve \(uv\)-coordinates and an embedding in the plane by forcing these cones to lay on the boundary of the parametric domain. More precisely, given a set of cone vertices \(S \subset V\), the following general algorithm can be applied:

  • Perform cuts on edges in order to link every cone vertex;
  • Eventually perform additional cuts along non-contractible cycles in order to retrieve a disk topology;
  • Apply any parametrization algorithm to the cut mesh.

Max Planck's bust parametrized with 4 \(\pi/2\) cones

Max Planck's bust model, mapped to the plane using a conformal cone parametrization. Four cones of defect pi/2 (red points) are placed on the model to reduce distortion

ConformalConeParametrization

Bases: BaseParametrization

Given a user-defined cone distribution on the surface, this algorithm cuts an input surface mesh into a disk topology and parametrize it using conformal mapping

References
  • [1] Conformal equivalence of triangle meshes, Springborn B., Schröder P. and Pinkall U., ACM Transaction on Graphics, 2008

  • [2] Boundary first flattening, Sawhney R. and Crane K., ACM Transaction on Graphics, 2018

Parameters:

Name Type Description Default
mesh SurfaceMesh

Input mesh

required
cones Attribute

float Attribute on vertices. Gives the target angle defects of vertices

required
verbose bool

verbose mode. Defaults to False.

False

Other Parameters:

Name Type Description
use_cotan bool

If True, uses cotangents in the laplacian matrix. Defaults to True.

debug bool, optional)

debug mode. Generates additional output. Defaults to False.

cut_graph property

The seams returned as a polyline

Returns:

Name Type Description
PolyLine PolyLine

seams

cut_mesh property

The mesh where seams have been disconnected and are now boundary edges

Returns:

Name Type Description
SurfaceMesh SurfaceMesh

the mesh where seams have been disconnected

flat_mesh property

A flat representation of the mesh where uv-coordinates are copied to xy.

Returns:

Name Type Description
SurfaceMesh SurfaceMesh

the flat mesh

frame_field property

Local frames of reference rendered as a polyline

run()

Computes the parametrization

SingularityCutter

Bases: Worker

Given some indexes in the mesh, performs optimal cuts connecting all these vertices with the boundary.

Parameters:

Name Type Description Default
mesh SurfaceMesh

input mesh

required
singularities list

indices of the singular vertices

required
features FeatureEdgeDetector

feature edge data structure. If provided, the cuts will follow the feature as much as possible. Defaults to None.

None
verbose bool

verbose mode. Defaults to False.

False

Attributes:

Name Type Description
cut_edges set

indices of edges that were cut

cut_adj dict

cut graph given as adjacency lists per vertex

cut_graph property

Returns:

Name Type Description
PolyLine PolyLine

the cut edges as a Polyline

has_features property

Whether the input mesh has feature edges defined

output_mesh property

Returns:

Name Type Description
SurfaceMesh SurfaceMesh

the mesh where cuts have been performed

_build_singularity_spanning_tree_no_features()

Returns:

Name Type Description
Attribute

the spanning tree given as a boolean attribute on edges

_build_singularity_spanning_tree_with_features()

We do not apply the same algorithm as we want the spanning tree to have the maximal possible intersection with the feature graph. This leads to prettier results.

Returns:

Name Type Description
Attribute

the spanning tree given as a boolean attribute on edges

run()

Runs the cutting process