文章目录
摘要
阅读:SMPL: A Skinned Multi-Person Linear Model。ACM TOG。选他是因为基础需要同时现在正热门的smpl以这一篇文章为基础。
abstract
Reading: SMPL: A Skinned Multi-Person Linear Model. ACM TOG. I chose it because I need the fundamentals and right now the popular SMPL is based on this paper.
一、学习论文:
核心:
1.人体参数化:
"身高、体重、肩宽"10 个数字就能描述一个人的身材,用 "头转多少度、胳膊弯多少度" 几十个数字就能描述一个人的动作。
核心就是:把一个复杂的 3D 人体网格(6890 个顶点),压缩成两组低维数字,只要修改这两组数字,就能生成任意身材、任意动作的人体。直接操作 6890 个顶点太麻烦,参数化后才能被动画师控制、被算法优化。
2.姿态pose:身体所有关节的旋转角度。
SMPL 里有 23 个关节(头、脖子、肩膀、手肘、腰、膝盖等),每个关节用 3 个数字表示旋转(轴角表示),再加根节点的 3 个全局朝向,总共72 维参数。pose 只改变动作,不改变身材;同一个 pose,胖人和瘦人做出来的动作姿态一样,只是身材不同
3.shape(体型 / 身份):天生的身材特征:高矮、胖瘦、肩宽、腿长、头身比等
SMPL 里用10-300 维参数(通常用前 10 维就够),是从几千个人的扫描数据里用 PCA 提取出来的 "人体主成分"。shape 只改变身材,不改变动作;同一个 shape,不管做什么动作,都是同一个人的身材。
总结就是:SMPL 用 shape 参数控制身材、pose 参数控制动作,然后生成对应的 3D 人体网格,解决之前模型要么不真实、要么不能用在游戏引擎里的问题。
1.1流程

SMPL 整体生成流程:a) 基准网格:所有人的基础模板,是一个标准的裸体人体。(b) 加 shape 变形:把 shape 参数对应的 "身材变化" 叠加到基准网格上,变成某个人的身材。© 加 pose 变形:把 pose 参数对应的 "姿态变化" 叠加到上面,变成这个人在这个姿态下的 "预变形网格"(d) 蒙皮旋转:用骨骼把整个网格 "拉" 成最终的姿态
顺序:基准 → 变身材 → 变姿态 → 蒙皮旋转,这就是 SMPL 的全部核心。

人体骨架与蒙皮权重: a图左:SMPL 的 23 个关节和人体部件分割,对应 pose 参数控制的部位。b图右:看蒙皮权重的颜色,颜色越接近红色,说明这个顶点受对应骨骼的影响越大

shape 变形:3 个主成分(PC1/PC2/PC3)从 - 2 到 + 2 的变化:不同的 shape 参数,对应什么样的身材变化(胖瘦、高矮、肌肉量等)。红色的关节点:关节位置会跟着 shape 自动变化,这就是关节回归器的作用。

pose 变形:对比最左边的 LBS(纯蒙皮)和最右边的 SMPL
看肘部、膝盖、臀部:纯蒙皮会出现 "拉伸"" 变细 ""蝴蝶结" 的畸形,SMPL 加了 pose 变形后就正常了
直观理解 pose 变形的作用:专门用来修补纯蒙皮的 bug,同时模拟肌肉隆起、皮肤褶皱。

pose 变形的中间过程:前4列:基准+shape → 加pose变形 → 最终SMPL → 真实扫描。加pose变形后:臀部、肩膀、肘部都变鼓了,这就是肌肉隆起的效果

shape 和 pose 的解耦效果:
横向看:同一个 pose,不同的 shape → 动作一样,身材不同
纵向看:同一个 shape,不同的 pose → 身材一样,动作不同
验证 SMPL 的核心优势:身材和动作完全独立,可以任意组合

图 1:最终效果
左图:SMPL 拟合真实扫描的效果
右图:在 Unity 引擎里实时渲染的效果,证明了工业兼容性。
总结
代码方面话没有开始跑,只下载了原来老版的实现,以及最新神经网络的代码实现。
再就是数学部分还没懂:如旋转矩阵,线性混合蒙皮(LBS)的公式如何变成smpl的混合蒙皮(Blend Skinning),SMPL 的核心就是用融合形变弥补 LBS 的缺陷。