论文笔记——Deformation Transfer for Triangle Meshes(2004-SIGGRAPH)

一、核心思想

  首先,文章题目名为《Deformation Transfer for Triangle Meshes》,即三角网格的形变迁移。这一理论的核心观点可以参考下图,已知条件需要包括三个信息:
  1、源始网格 SS,也就是下图中第一行的第一匹马;
  2、与 SS 对应的发生形变的网格 SS',也就是第一行后面的各种各样的马;
  3、目标网格 TT,也就是我们想要让他像 SS 形变方式一样的目标,即图中第二行的第一只骆驼。
  通过上述三点已知条件,从而得到生成的形变网格 TT', 也就是第二行后面各种各样的网格。需要注意的是,每一对 SSTT, 或者 SS'TT',也就是图中的每一列,在形态上是一致的。
论文笔记——Deformation Transfer for Triangle Meshes(2004-SIGGRAPH)
  根据形变迁移的理论, SSSS' 之间一定存在着确定的形变关系,那么 TTTT' 之间也一定存在着相类似的形变关系。
  作者在摘要中提到,他们提出的是一种通用的方法,SSTT 之间不需要拥有相同数量的顶点、三角形或者相同的点与点之间的连接方式。

二、算法分析

1、Deformation Transfer (形变迁移)

  形变迁移的目的是将源变形所表现出的形状变化传递到目标上。
  我们知道三点成面,这也是三角网格的由来。在二维平面中,一个三角形如何发生变化都不会离开这个平面维度,但是空间中,一个三角形发生形变,就有很大的可能离开它原始的平面。因此,作者引入了一个三角形面外的一个点作为辅助,来探寻该三角形的空间变化。
  首先令 viv_iv~i\tilde{v}_ii1,2,3i \in{1,2,3},分别表示三角形形变前后的三个顶点,那么第四个顶点可以通过以下公式(原文公式(1))得到:
v4=v1+(v2v1)×(v3v1)/(v2v1)×(v3v1) v_4=v_1+(v_2-v_1)\times(v_3-v_1)/\sqrt{|(v_2-v_1)\times(v_3-v_1)|}
同理 v~i\tilde{v}_i 也有相应的计算方式。(v2v1)×(v3v1)/(v2v1)×(v3v1)(v_2-v_1)\times(v_3-v_1)/\sqrt{|(v_2-v_1)\times(v_3-v_1)|}是计算垂直于三角形所在平面的单位向量,而整个式子就是将该单位向量平移到三角形上。这里之所以选择加 v1v_1,和后面的简化运算有关。当然,这里可以用 v2v_2 或者 v3v_3,那么本式,和后面的公式都要对应的替换。
补充知识: 坐标叉乘运算
a×b=(l,m,n)×(o,p,q)=(mqnp,nolq,lpmo) a\times b=(l,m,n)\times (o,p,q)=(mq-np,no-lq,lp-mo)
  假设,四个点的坐标依次为 v1(x1,y1,z1)v_1(x_1,y_1,z_1)v2(x2,y2,z2)v_2(x_2,y_2,z_2)v3(x3,y3,z3)v_3(x_3,y_3,z_3)v4(x4,y4,z4)v_4(x_4,y_4,z_4),那么 viv_iv~i\tilde{v}_i 都是3 ×\times 4的矩阵。两者之间可以通过一个3 ×\times 3的仿射矩阵 QQ 和偏移量 dd 联系在一起,如下(原文公式(2)):
Qvi+d=v~i,i1...4 Qv_i+d=\tilde{v}_i, \quad i \in 1 ... 4
  原文说到,为了消去 dd,就对每一项减去 v1v_1,就可以得到 QV=V~QV=\tilde{V},其中(原文公式(3)):
论文笔记——Deformation Transfer for Triangle Meshes(2004-SIGGRAPH)
  第一次看到这里的时候,比较懒,直接默认这是成立的,而这一次为了这篇博客,我就稍微的思考了一下:
已知:
  v~i=Qvi+d\tilde{v}_i=Qv_i+d
  d=v~1Qv1d=\tilde{v}_1-Qv_1
dd 代入第一个式子,得:
  v~i=Qvi+v~1Qv1\tilde{v}_i=Qv_i+\tilde{v}_1-Qv_1
左右调整一下之后,得:
  v~iv~1=Q(viv1)\tilde{v}_i-\tilde{v}_1=Q(v_i-v_1)
于是就可以得到原文公式(3)。所以 QV=V~QV=\tilde{V},于是 Q=V~V1Q=\tilde{V}V^{-1}
(待续。。。。。。。。。。。。。。。。。。。。。。。。。。)