0%

论文笔记: Embedded Deformation for Shape Manipulation

siggraph上的一篇老文章,主要是通过建立一个Deformation Graph以及计算变形模型操作过程中仿射变换的最优值,来实现三维模型的直接操控变形,支持细节保留、粒子系统变形及模型局部变化。

Deformation Graph

一种新型的可变形模型,可作用于所有欧式三维空间$\boldsymbol{R}^3$的点,空间中的变形由一系列仿射变换所定义,仿射变换包含了旋转项和位移项,定义为旋转矩阵$R_{j}$(33)和位移向量$\vec{t_{j}}$(31),同时模型上每个点p的位置都受到全部其他顶点$g_{j}, j\in1…m$的影响,变形后的位置$\tilde{p}$由以下公式得到: $\tilde{p} = \R_{j}(p-g_{j})+g_{j}+\vec{t_{j}} \qquad(1)$
公式(1)为单个定点对模型上点的影响,在多个顶点的共同作用下,可以使用各顶点位置加权和来计算点vi变形之后的位置vi’
公式(2)
类似的,可以对顶点法向量做相应的变化。
公式(3)
位置加权和根据空间位置而改变,因此受到顶点位置的影响。由graph的结构可知,对于非常靠近的顶点来说,变形作用的结果是非常相似的,所以由此我们可以由最近的k个点中的最远距离dmax来计算权重。
公式(4)
获得deformation graph和模型上的顶点,就是对模型表面进行uniform sampling均匀采样,然后根据设定的采样密度反复地删除一定半径里的点,直到达到密度要求,并使这些顶点构成网格。顶点数在200到300个之间较为合适。
当nodes位置确定,便通过在影响同一vertex的两个nodes之间建立edge来确认连通性。

Optimization

deformation graph确定后,即可通过选择顶点并移动它们来操纵形状改变。各个顶点的旋转矩阵和位移向量通过能量最小的方法来求解。
在旋转,正则化和约束三项上进行优化。

rotation

旋转通过一个3x3的矩阵来表示,该矩阵必须满足如下条件:

(a)三个列向量必须为单位向量

(b)三个列向量必须两两正交

得到矩阵R后,计算其平方差Rot(R),通过平方差计算旋转能量Erot

regularization

每一个仿射变换实际上代表了以某个node为中心的局部变形,由于相邻的变换会存在相互交叠的影响,我们必须保证所计算的变换彼此一致。因此加入正则化项。
如果nodes j和k相邻,那么它们将影响同一公共区域。

而从j的仿射变换所推断出的k的位置,必须与k由自身变换得到的位置是相一致的,根据这两种推断位置的方法,可以计算他们的误差得到各点误差和Ereg。公式(7)
其中参数αjk应与j、k交叠程度成比例的,但是为了在点模型及粒子系统也通用,选择αjk的值为1.0。

constraint

约束分两种:

(a)用户选择一部分点,操作这部分点进行变化 handle constraint

(b)用户选择一部分点,固定这些点不发生变化 fixed constraint

handle constraint 会影响计算,因此求Econ项:公式(8) 其中vindex是由公式(2)计算得到的点位置,q是用户变形得到的位置。
fixed constraint 不会影响计算,反而可以减少未知数的数量来加快计算速度。

numerics

将以上三部分求一个加权和,求出使该值最小的R和t的值,即得到对应每个顶点所需要做的变换。
公式(9)

代码实现

首先最基本的就是构造Deformation Graph,对于邻近k个点的选取,我们可以使用KNN算法(kd-tree)或者fast marching算法来实现。