动画制作相关术语
Vertex(顶点):动画模型可以看成多个小三角形(四边形)组成,每个小三角形就可以看成一个顶点。顶点越多,动画模型越精细。
骨骼点:人体的一些关节点,类似于人体姿态估计的关键点。每个骨骼点都由一个三元组作为参数去控制(可以查看欧拉角,四元数相关概念)
蒙皮:将模型从一个姿态转变为另一个姿态,使用的转换矩阵叫做蒙皮矩阵。
骨骼蒙皮(Rig):建立骨骼点和顶点的关联关系。每个骨骼点会关联许多顶点,并且每一个顶点权重不一样。通过这种关联关系,就可以通过控制骨骼点的旋转向量来控制整个人运动。
纹理贴图:动画人体模型的表面纹理,即衣服裤子这些。
texture map:将3D多边形网格表面的纹理展开到2D平面,得到纹理图像
混合形状(BlendShape):控制动画角色运动有两种,一种是上面说的利用Rig,还有一种是利用BlendShape。比如:生成一种笑脸和正常脸,那么通过BlendShape就可以自动生成二者过渡的动画。这种方式相比于利用Rig,可以不定义骨骼点,比较方便。它指相对于base shape的变形(deformation),这种deformation是通常被表示为顶点的偏移量(vertex displacements),是由某种参数有关的function确定的
混合蒙皮技术(Blend Skinning) :一种模型网格(mesh)随内在的骨骼结构(skeletal structure)变形的方法。网格的每个顶点(vertex)对于不同的关节点有不同的影响权重(weighted influence),顶点在变形时,形变量与这个权重相关
LBS(Linear Blend Skinning ):线性混合蒙皮。使用最广泛,但是在关节处会产生不真实的变形
DQBS(dual-quaternion blend skinning ):双四元数混合蒙皮。
顶点权重(vertex weights):用于变形网格mesh
uv map:将3D多边形网格展开到2D平面得到 UV图像
拓扑(topology):重新拓扑是将高分辨率模型转换为可用于动画的较小模型的过程。两个mesh拓扑结构相同是指两个mesh上面任一个三角面片的三个顶点的ID是一样的(如某一个三角面片三个顶点是2,5,8;另一个mesh上也必有一个2,5,8组成的三角面片)
pose-dependent blend shape:姿势相关的混合变形
regressor from shape to joint locations: 形状到关节位置的回归函数
相关算法详解
SMPL
1.介绍
SMPL(Skinned Multi-Person Linear Model)是一种裸体的(skinned),基于顶点(vertex-based)的人体三维模型,能够精确地表示人体的不同形状(shape)和姿态(pose)。
SMPL适用于动画领域,可以随姿态变化自然的变形,并伴随软组织的自然运动。SMPL与现有的许多图形渲染管线都是兼容的。
SMPL是一种可学习的模型,通过训练可以更好地拟合人体的形状和不同姿态下的形变。
它将身体形状分为identity-dependent shape和non-rigid pose-dependent shape。人体可以理解为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数——形状参数(shape);同时,使用运动树表示人体的姿势,即运动树每个关节点和父节点的旋转关系,该关系可以表示为三维向量,最终每个关节点的局部旋转向量构成了SPML模型的姿势参数(pose)。
这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。
在SMPL文章中介绍了SMPL的总体模型,这个模型是通过训练得到,就是一些参数, 该模型中β和θ是其中的输入参数,其中β代表人体高矮胖瘦、头身比等比例的10个参数,是一个10-D的vector。θ是代表人体整体运动位姿和24个关节相对角度的75(24*3+3;每个关节点3个自由度,再加上3个根节点)个参数,是一个3K-D的vector(代表pose,其中K为骨架节点数,3是每个关节具有的3个自由度)。 β参数是Shape Blend Pose参数,可以通过10个增量模板控制人体形状变化: 具体而言:每个参数控制人体形态的变化可以通过动图来刻画。
SMPL骨架的节点个数为24,标注了人体影响姿态的几个主要关节,即:
smpl_names = [
'Left_Hip', 'Right_Hip', 'Waist', 'Left_Knee', 'Right_Knee',
'Upper_Waist', 'Left_Ankle', 'Right_Ankle', 'Chest',
'Left_Toe', 'Right_Toe', 'Base_Neck', 'Left_Shoulder',
'Right_Shoulder', 'Upper_Neck', 'Left_Arm', 'R