【笔记】Libig从入门到放弃(续)

参数化

参数化方法可大致分为四族:

  1. Single patch, fixed boundary. parametrize a disk-like part of the surface given fixed 2D positions for its boundary. 简单,高校,但是参数化后的map有很大distortion
  2. Single patch, free boundary. 减少了map distortion,但是可能出现self-intersection
  3. Global parametrization. 对任意亏格的网格均适用。初始的时候把网格切为多个patches,然后分别参数化。生成的maps在切边是不连续的(切边也称为seams,缝)
  4. Global seamless parametrization. 使得参数化结果”continuous“

Harmonic Parametrization

调和参数化是一种single patch,fixed boundary的算法。

算法步骤如下:

  1. 检测boundary vertices
  2. 把boundary vertices映射到一个圆上
  3. 计算两个harmonic functions(uv坐标)。调和函数使用固定在圆上的顶点作为边界约束

libigl实现

Eigen::VectorXi bnd;
igl::boundary_loop(V, F, bnd);

Eigen::MatrixXd bnd_uv;
igl::map_vertices_to_circal(V, bnd, bnd_uv);

igl::harmonic(V, F, bnd, bnd_uv, 1, V_uv);

bnd是边界顶点的序列号,bnd_uv是他们在UV平面上的位置,1表示我们使用harmonic function计算(2表示biharmonic,3表示triharmonic等等)

UV参数化结果可以展示为:

viewer.data().set_uv(V_uv);

LSCM (Least Squares Conformal Maps)

LSCM参数化是最小化conformal (angular) 失真,LSCM不需要固定边界。

LSCM最小化如下能量:
E L S C M ( u , v ) = ∫ X 1 2 ∣ ∇ u ⊥ − ∇ v ∣ 2 d A E_{LSCM}(u,v)=\int_{X}\frac{1}{2}|\nabla u^{\perp }-\nabla v|^2dA ELSCM(u,v)=X21uv2dA
写成矩阵形式:
E L S C M ( u , v ) = 1 2 [ u , v ] t ( L c − 2 A ) [ u , v ] E_{LSCM}(u,v)=\frac{1}{2}[u,v]^t(L_{c}-2A)[u,v] ELSCM(u,v)=21[u,v]t(Lc2A)[u,v]
这里 L c L_c Lc是余切Laplacian矩阵;A是面积变换矩阵, [ u , v ] t A [ u , v ] [u,v]^tA[u,v] [u,v]tA[u,v]和网格的vector area相等。

libigl首先使用igl::cotmatrix计算余切矩阵

SparseMatrix<double> L;
igl::cotmatrix(V, F, L);

因为我们想同时对u和v坐标使用Laplacian matrix,把它扩展一下:

SparseMatrix<double> L_flat;
igl::repdiag(L, 2, L_flat);

面积矩阵A计算如下:

SparseMatrix<double> A;
igl::vector_area_matrix(F, A);

最终能量矩阵是 L f l a t − 2 A L_{flat}-2A Lflat2A

ARAP (As-rigid-as-possible)

ARAP是single patch,free boundary方法。尽可能保留距离。每个三角形在映射到平面上时尽可能保留它的原始外形,顶多发生rigid rotation

首先,利用harmonic参数化计算ARAP的初始解

Eigen::VectorXi bnd;
igl::boundary_loop(F, bnd);
Eigen::MatrixXd bnd_uv;
igl::map_vertices_to_circle(V, bnd, bnd_uv);

igl::harmonic(V, F, bnd, bnd_uv, 1, initial_guess);

然后,初始化ARAP

igl::ARAPData arap_data;
arap_data.with_dynamics = true;
Eigen::VectorXi b = Eigen::VectorXi::Zero(0);
Eigen::MatrixXd bc = Eigen::MatrixXd::Zero(0, 0);

arap_data.max_iter = 100;
arap_precomputation(V, F, 2, b, arap_data);

接着,求解优化

V_uv = initial_guess;
arap_solve(bc, arap_data, V_uv);

N-rotationally Symmetric Tangent Fields

Tangent fields 这个东西是用来design guidance fields,为uniform quadrilateral 和 hexahedral remeshing服务的。Libigl提供了一些N-RoSy fields 的算法,

在libigl里,tangent unit-length vector fields 是piece-wise constant的,对三角网格的每个面片而言。每个面片上用一个或多个vectors描述。

函数igl::nrosy(V,F,b,bc,b_soft,b_soft_weight,bc_soft,N,0.5,output_field,output_singularities)创建了一个光滑的单位长度向量场(N=1),从一个sparse set of constrained faces开始,faces的indices是b,它们的约束值定义在bc里。函数支持软约束,返回插值的场,还有场的奇异值。

所谓奇异值,是指场vanished的顶点。igl::nrosy还能生成N-RoSy场,这是向量场的一种泛化,对每个面,向量取决去一个旋转常量 2 π / N 2\pi/N 2π/N。不同的N值,奇异值的样式和位置都不一样。

Global, Semless Integer-grid Parametrization

全局的,无缝的参数化,目标是把一个复杂形状参数化,使其和一个给定的set of directions对齐。目的是做surface remeshing。

Libigl提供了mixed integer quadrangulation paper的求解过程:

  1. 设计一个4-RoSy场(也叫cross field),描述了remeshing所需要对齐的边。这个场的约束通常是人工设置或者通过主曲率方向提取的。
  2. Combing and cutting。给定cross field后,需要把表面剪开,使其与圆盘拓扑同胚。这个可以直接在cross-field上做,也可以在它的bisector field(把cross-field旋转45度)上做。因为在后者上做更加stable和generic。因此我们首先旋转cross field,然后通过给每个面指定u和v方向,移除掉歧义的rotation。这个指定使用广度优先搜索,从任意一个face开始。这个过程类似梳毛,在某些点,无法一致性地区把整个表面捋顺,这些不连续边就定义了cut graph。最后,我们把combed filed旋转45度,恢复初始的角度。combed cross field可以认为是一个理想的Jacobian。
  3. Poisson参数化。网格沿着上述找到的缝切开,参数化通过计算试图找到两个标量函数,使其梯度和combed cross field匹配。 E ( u , v ) = ∣ ∇ u − X u ∣ 2 + ∣ ∇ v − X v ∣ 2 E(u,v)=|\nabla u-X_u|^2+|\nabla v-X_v|^2 E(u,v)=uXu2+vXv2。通过求解这个能量最小化问题,得到一个参数化表示,其中u和v等值线和输入的cross field是对齐的。我们通过增加interger constraints来对齐缝的两边。

这种参数化方法只能用于remeshing,因为它包含了很多overlaps

Anisotropic Remeshing

各项异的remeshing和非统一的quad remeshing对于concentrate the elements in the regions with more details十分重要。可以通过扩展MIQ quad meshing framework,使用一个mesh deformation方法来生成各项异的quad meshed。

输入是一个sparse set of constraints,定义了shape和所需的quads的scale。这个可以被编码成一个frame field(一对non-orthogonal和non-unit length vectors)。这个frame field可以通过分解成一个4-RoSy场和一个unique affine transformation来插值。这两部分可以分别插值。对cross field,使用igl::nrosy,对affine part使用harmonic interpolant。

插值后,表面被warp,each frame被变形为一个正交的和单位长度的cross(移除了尺度和skewness from the frame)。这个变形定义了一个新的表面嵌入(embedding,同时一个新的metric)。

变形后的表面可以使用MIQ算法做各项异的remeshing。变形后的表面的uv坐标可以用来把参数化传递到原始表面。

Planarizatoin

一个quad mesh可以变形到一个平面quad mesh,使用Shape-Up方法。这是一种local/global方法,global step确保surface continuity,local step确保planarity。

igl::planarize

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值