SMPL

基础知识

  • 顶点(vertex):动画模型可以看成多个小三角形组成,每三个顶点组成一个三角形,每个小三角形就可以看成一个顶点。

  • 骨骼点:骨架关节,比如膝盖

  • 骨骼蒙皮(Rig):建立骨骼点和顶点的关联关系。每个骨骼点会关联许多顶点,并且每一个顶点权重不一样。通过这种关联关系,就可以通过控制骨骼点的旋转向量来控制整个人运动。

  • 顶点权重(vertex weights):用于变形网格mesh,通过骨骼计算当前顶点

  • BlendShape:控制动画角色运动有两种,一种是上面说的利用Rig,还有一种是利用BlendShape。比如:生成一种笑脸和正常脸,那么通过BlendShape就可以自动生成二者过渡的动画。这种方式相比于利用Rig,可以不定义骨骼点,比较方便。

  • 蒙皮函数(SF,Skinning Function):是计算机图形学中用于将骨骼动画(Skeletal Animation)的变形作用到3D模型表面顶点上的数学方法。它的核心作用是根据骨骼的运动(如旋转、平移)动态调整模型顶点的位置。蒙皮函数包括下面的LBS,BS,DQS。

  • 线性混合蒙皮函数(LBS,linear blend skinning algorithm):是一种蒙皮函数skinning methods ,每个模型的顶点可以受多个骨骼影响,每个骨骼对顶点的影响程度通过权重(Weight)表示(权重总和为1)例如,一个顶点可能受“上臂骨”影响60%,受“肩膀骨”影响40%。在骨骼运动时,顶点的新位置是所有关联骨骼变换的加权平均。

    • image-20250602185203297
    • 缺点:
      • 糖果纸效应(Candy Wrapping)**:在关节弯曲时可能出现不自然的塌陷或扭曲(如图)。
      • 体积损失:剧烈弯曲时模型体积可能收缩。
  • 混合蒙皮函数(BS,BlendSkin)是一种改进的蒙皮(Skinning)技术,主传统LBS直接对变换矩阵进行线性加权,而BlendSkin可能采用 非线性混合局部几何感知的插值,使关节弯曲时保持更好的体积和表面连续性。

  • 双四元数蒙皮函数(DQS,Dual Quaternion Skinning):使用双四元数代替线性插值,能更好地保持关节处的体积和形状,避免糖果纸效应。

  • image-20250602185743277

SMPL

https://www.zhihu.com/question/292017089

https://zhuanlan.zhihu.com/p/696878001

https://zhuanlan.zhihu.com/p/94218908

https://zhuanlan.zhihu.com/p/94218908

https://zhuanlan.zhihu.com/p/420208990

https://zhuanlan.zhihu.com/p/420090584

https://zhuanlan.zhihu.com/p/420090584

https://zhuanlan.zhihu.com/p/453206221

https://zhuanlan.zhihu.com/p/453206221

https://zhuanlan.zhihu.com/p/453206221

https://zhuanlan.zhihu.com/p/453206221

《SMPL: A Skinned Multi-Person Linear Model》

  • 人体可以理解为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数——形状参数(shape);同时,使用运动树表示人体的姿势,即运动树每个关节点和父节点的旋转关系,该关系可以表示为三维向量,最终每个关节点的局部旋转向量构成了smpl模型的姿势参数(pose)。

  • 该模型中β和θ是其中的输入参数,其中β是ShapeBlendPose参数代表人体高矮胖瘦、头身比等比例的10个参数,θ是代表人体整体运动位姿和24个关节相对角度的75(24*3+3;每个关节点3个自由度,再加上3个根节点)个参数。然后通过LBS输出是6980个顶点N。

  • 参数:

    • M, : SMPL function
    • T,一个 6890 × 3 6890 的矩阵。这个矩阵是常数值,是TPose
    • J,从蒙皮预测骨架的函数,实现从顶点坐标获得关节坐标,24 × 3的矩阵,23个关节点+1个root orientation。这个矩阵是常数值
    • W,Skinning function蒙皮函数,一个 6890 × 24 的矩阵。注意,这个矩阵的值需要训练得到,每一个关节点的坐标变化对每一个mesh顶点坐标变化
    • B_p: 姿态混合蒙皮函数,Pose blendshapes function,输入姿态参数输出是3*N=3*6980的顶点坐标
    • p:所有207个姿势混合形状组成的矩阵
    • B_s: 形状混合蒙皮函数,Shape blendshapes function,输入形状参数输出是3*N=3*6980的顶点坐标
    • s:形状位移矩阵
    • β,影响人体mesh的形状(高矮胖瘦)
    • θ,影响人体mesh的姿态(动作姿势)
    • SMPL通过训练获得的参数:T,W,S,P,J
image-20250602184708123
  • 
    J_regressor_prior (scipy.sparse.csc.csc_matrix):表示一个稀疏矩阵,用于从形状参数推断关节位置的先验模型。
    f (numpy.ndarray):通常表示面的数组,用于描述3D网格模型的拓扑结构。
    J_regressor (scipy.sparse.csc.csc_matrix):另一个稀疏矩阵,用于从形状参数计算关节位置的回归器。
    kintree_table (numpy.ndarray):表示关节层次结构的数组,用于描述骨骼的树状结构。
    J (numpy.ndarray):关节位置的数组,表示模型中各关节在标准姿态下的位置。
    weights_prior (numpy.ndarray):一个先验权重数组,用于姿态和形状的权重调整。
    weights (numpy.ndarray):每个顶点的骨骼权重数组,表示各顶点受不同骨骼的影响程度。
    vert_sym_idxs (numpy.ndarray):顶点对称索引数组,用于保持模型的左右对称性。
    posedirs (numpy.ndarray):姿态方向数组,用于描述姿态变化对顶点位置的影响。
    pose_training_info (dict):包含姿态训练信息的字典,可能包含训练数据或参数设置。
    bs_style (str):绑定皮肤样式的字符串,描述模型的皮肤绑定方式。
    v_template (numpy.ndarray):顶点模板数组,表示未变形的基础顶点位置。
    shapedirs (chumpy
    
  • 形状参数:

    • 0 代表整个人体的胖瘦和大小,初始为0的情况下,正数变瘦小,负数变大胖(±5)
      1 侧面压缩拉伸,正数压缩
      2 正数变胖大
      3 负数肚子变大很多,人体缩小
      4 代表 chest、hip、abdomen的大小,初始为0的情况下,正数变大,负数变小(±5)
      5 负数表示大肚子+整体变瘦
      6 正数表示肚子变得特别大的情况下,其他部位非常瘦小
      7 正数表示身体被纵向挤压
      8 正数表示横向表胖
      9 正数表示肩膀变宽
  • 形状参数怎么影响顶点的:利用PCA原理控制mesh的胖瘦高矮(

用LBS表示的线性混合蒙皮核用双cerian混合蒙皮dqb 都不如SMPL

SMPL是Tpose并对这个模型施加偏移量实现

image-20250602174618282

image-20250602174707435

创新点:

  • 提出了一种学习人体形状和位置依赖的形状变化模型:模型的参数从数据中学习,包括静止姿势模板、混合权重、姿势相关的混合变形、身份相关的混合变形以及从顶点到关节位置的回归。
  • 将pose blend shapes建模成rotation matrices(旋转矩阵)的线性函数。因为旋转矩阵的元素是有界的,所产生的变形也是有界的,有助于模型更好地推广。

image-20250602170036448

image-20250602170200797

评估指标指标含义。

  • MPJPE。(Mean Per Joint Position Error:首先对齐骨盆(pelvis,关节0)处的预测和GT真实3D关节,然后计算它们的距离,综合评价预测的姿态和形状,包括全局旋转。
  • PA-MPJPE。(Procrustes-Aligned Mean Per Joint Position Error, or reconstruction error):在计算 MPJPE 之前执行 Procrustes 对齐,即刚性对齐(rigid alignment),这主要测量关节姿势,消除了尺度和全局旋转的差异。
  • MPVE。(Mean Per-vertex Error or Vertex-to-Vertex ,V2V):被定义为预测网格顶点与地面GT网格顶点之间的平均点对点欧几里得距离。
  • PA-MPVE。(Procrustes-Aligned Mean Per-vertex Error ):Procrustes对齐后的MPVE。