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:
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.
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