LBS是CG的基础概念之一。
Linear Blend Skinning: linearly blend the results of the vertex transformed rigidly with each bone.
LBS:线性地混合顶点根据每个骨骼的刚性变形结果。
这个场景应用在哪里呢?
假如我们重建好一个人体,现在用全新的姿态对其进行驱动。本身姿态只会驱动骨架,但人体表面和衣服该怎么变换呢?
有以下公式:
V
=
Σ
i
=
1
n
w
i
M
i
′
M
i
−
1
V
g
=
(
Σ
i
=
1
n
w
i
T
i
)
V
g
V=\Sigma^n_{i=1}w_iM_i'M_i^{-1}V_g=(\Sigma^n_{i=1}w_iT_i)V_g
V=Σi=1nwiMi′Mi−1Vg=(Σi=1nwiTi)Vg
其中,
Σ
i
=
1
n
w
i
=
1
\Sigma^n_{i=1}w_i=1
Σi=1nwi=1。
假设我们要确定一直手臂在弯折90度之后,表面的A点的移动位置。由图1可知,A点受两个关节点影响。
手臂弯折后A点的位置就可以通过LBS来进行计算。注意看:首先,在手臂伸直状态(即图A),A点在胳膊关节点和手肘关节点两个位置都有一个坐标,这两个坐标通过图1中红色和绿色的向量(箭头)来表示。进行曲臂操作时,红色向量保持不动(因为胳膊没有弯曲),绿色向量会旋转90度(变成图2的样子),这时红色箭头和绿色箭头在蒙皮处分别有1个交点。我们会认为点A处于这两个交点之间,但具体坐标我们还需要进一步确定。这里就引进了Linear Blend Skinning方法,以确定点A在曲臂后的坐标。
由图1,2可知,点A在胳膊关节的坐标依旧是(3,1),在手肘关节的坐标从(-1,1)变为了(1,1),我们把坐标系都调整为胳膊关节为原点,那么手肘关节的坐标在变换后变成了(5,1)。那么,我们采用LBS公式,即加权平均来确定点A的新坐标:
0.8
∗
(
3
,
1
)
+
0.2
∗
(
5
,
1
)
=
(
3.4
,
1
)
0.8*(3,1)+0.2*(5,1)=(3.4,1)
0.8∗(3,1)+0.2∗(5,1)=(3.4,1)
注意,这里的0.8和0.2分别是两个关节点对点A影响点权重。我们最后得到的点A坐标即为(3.4,1)。
那么,这个权重是怎么得到的呢?答:可以通过欧氏距离,也可以自己规定,现在也有很多基于学习的方法。
参考和致谢:https://homepages.inf.ed.ac.uk/tkomura/cav/presentation4_2020.pdf