SMPL: A Skinned Multi-Person Linear Model论文解读

SMPL是一种皮肤多人体线性模型,通过学习得到的模型能根据输入参数创建不同身形和姿态的人体动画。文章介绍了模型的构建、训练过程,包括形状和姿态参数、blend skinning、shape和pose blend shapes、关节位置等关键概念,以及模型的评估。SMPL适用于快速渲染和现有渲染引擎,且与多种动画软件兼容。
摘要由CSDN通过智能技术生成

SMPL

paper title: SMPL: A Skinned Multi-Person Linear Model
paper link: http://files.is.tue.mpg.de/black/papers/SMPL2015.pdf
oral or demo video:https://www.youtube.com/watch?time_continue=98&v=kuBlUyHeV5U&feature=emb_logo
project: https://smpl.is.tue.mpg.de/
github: https://smpl.is.tue.mpg.de/signup
conf & anthor: ACM ToG 2015; Matthew Loper et. al (MPII & ILM)

相关知识链接:

MPII Human Shape

what is blendshape

what is ‘bake’ in CG?

what is rigging?

whta is shape displacement?

一、主要内容

这篇文章的主要内容是要通过学习得到一个模型可以根据一些输入的参数创建人体动画模型,可以做到

  • 可以表示不同身形;
  • 随着不同姿势自然变形;
  • 能够展现软组织运动;
  • 模型渲染快速、部署简单、适配现有渲染引擎;

SMPL

目标函数:自己生成的model和registered meshes之间每个顶点的差异

训练数据:1786个高分辨率3D扫描模型(为了学习到人在不同的姿势下模型是如何变形的),将自己的模型与3D扫描模型一一align得到训练集;

二、相关工作
  • (1) blend skinning: 骨骼子空间变形方法,又称blend skinning。mesh中得每一个顶点会受到其相邻骨骼的加权影响,当这种影响是线性的时候就是LBS. how it works-LBS。这篇文章就是要修正blend skinning的局限性。
  • (2) auto-rigging: 给定一个mesh的集合,推算出骨骼、关节和blend权重。
  • (3) blend shapes: 姿态空间变形模型(PSD:Pose Space Deformation)。
  • (4) learning pose models
  • (5) learning pose and shape models
三、模型构建

手工设计的人体mesh:顶点数 N = 6890 N = 6890 N=6890; 关节点数目 K = 23 K = 23 K=23;
根据标准蒙皮操作,模型可以通过一个平均模板形状来定义,并由以下元素来表示:

  • N vertices T ‾ ∈ R 3 N \overline{T} \in \mathbb{R}^{3N} TR3N
  • zero pose θ ∗ ⃗ \vec{\theta^*} θ
  • blend wights W ∈ R N × K \mathcal{W} \in \mathbb{R}^{N \times K} WRN×K
  • shape parameter β ⃗ \vec{\beta} β
  • pose parameter θ ⃗ \vec{\theta} θ
  • blend shape function B s ( β ⃗ ) : R ∣ β ⃗ ∣ ↦ R 3 N B_s(\vec{\beta}):\mathbb{R}^{|\vec{\beta}|} \mapsto \mathbb{R}^{3N} Bs(β ):Rβ R3N
  • K joint location predict function J ( β ⃗ ) : R ∣ β ⃗ ∣ ↦ R 3 K J(\vec{\beta}):\mathbb{R}^{|\vec{\beta}|} \mapsto \mathbb{R}^{3K} J(β ):Rβ R3K
  • pose-dependent blend shape function B p ( θ ⃗ ) : R ∣ θ ⃗ ∣ ↦ R 3 N B_p(\vec{\theta}):\mathbb{R}^{|\vec{\theta}|} \mapsto \mathbb{R}^{3N} Bp(θ ):Rθ R3N

三个主要变换函数:

  • blend shape 函数 B s ( β ⃗ ) B_s(\vec{\beta}) Bs(β )的输入是形状向量,输出是刻画人物(subject)形体的blend shape;
  • joint location 回归函数 J ( β ⃗ ) J(\vec{\beta}) J(β )的输入是形状向量,输出是K个关节点的位置;
  • pose-dependent blend shape函数 B p ( θ ⃗ ) B_p(\vec{\theta}) Bp(θ )的输入是姿态向量,用来实现’姿态-依赖’的变形;

上述这些函数生成的corrective blend shapes都加到rest pose上。最后,一个标准的blend skinning函数 W ( ⋅ ) W(·) W()用来在以joint location回归函数 J ( β ⃗ ) J(\vec{\beta}) J(β )估计的这些关节点为中心旋转顶点,并使用blend weights进行平滑。 最后的结果是一个模型,根据形状和姿态参数向量映射得到一个顶点集合:
M ( β ⃗ , θ ⃗ ; Φ ) : R ∣ θ ⃗ ∣ × ∣ β ⃗ ∣ ↦ R 3 N M(\vec{\beta},\vec{\theta};\Phi) : \mathbb{R}^{|\vec{\theta}| \times |\vec{\beta}|} \mapsto \mathbb{R}^{3N} M(β ,θ ;Φ):Rθ ×β R3N
其中 Φ \Phi Φ是学习到的一个参数,下文详述。这里做一个说明,变换符号(如上面的 M M M)所带的参数列表中,分号后面的是通过训练学习得到的( Φ \Phi Φ),而分号前面的是系统已知的或是由外部输入的( β ⃗ , θ ⃗ \vec{\beta},\vec{\theta} β ,θ )。

1. Blend skinning
人物模型(body)的姿态采用标准的skeletal rig(what is rigging)。这里使用的rig有 K = 23 K=23 K=23个关节点,第 k k k个部位的绕坐标轴的局部旋转为 w ⃗ k ∈ R 3 \vec{w}_k \in \mathbb{R}^3 w kR3;那么前面提到的pose parameter的形式就是:
θ ⃗ = [ w ⃗ 0 T , . . . , w ⃗ K T ] T \vec{\theta} = [\vec{w}_0^T,...,\vec{w}_K^T]^T θ =[w 0T,...,w KT]T
参数数目为 3 × 23 + 3 = 72 3 \times 23 + 3 = 72 3×23+3=72,其中加的3为根关节的位置。
对每个关节 j j j关于各个轴的旋转角度可以使用罗德里格公式转换为旋转矩阵:
e x p ( w ⃗ j ) = I + w ‾ j ^ s i n ( ∣ ∣ w ‾ j ∣ ∣ ) + w ‾ j 2 ^ c o s ( ∣ ∣ w ‾ j ∣ ∣ ) exp(\vec{w}_j) = \mathcal{I} + \hat{\overline{w}_j}sin(||\overline{w}_j||) + \hat{\overline{w}_j^2}cos(||\overline{w}_j||) exp(w j)=I+wj^sin(wj)+wj2^cos(wj)
其中:

  • w ‾ = w ⃗ ∣ ∣ w ⃗ ∣ ∣ \overline{w} = \frac{\vec{w}}{||\vec{w}||} w=w w 是单位旋转角;
  • w ‾ ^ \hat{\overline{w}} w^ w ‾ \overline{w} w的斜对称矩阵;
  • I \mathcal{I} I 3 × 3 3 \times 3 3×3的单位矩阵;

那么,标准的LBS(Linear Blend Skinning)函数为:
W ( T ‾ , J , θ ⃗ , W ) : R 3 N × 3 K × ∣ θ ⃗ ∣ × ∣ W ∣ ↦ R 3 N W(\overline{T},J,\vec{\theta}, \mathcal{W}) : \mathbb{R}^{3N \times 3K \times |\vec{\theta}| \times |\mathcal{W}|} \mapsto \mathbb{R}^{3N} W(T,J,θ ,W):R3N×3K×θ ×WR3N
其中:

  • T ‾ \overline{T} T为rest pose;
  • J J J 为关节位置;
  • θ ⃗ \vec{\theta} θ 为pose参数;
  • W \mathcal{W} W是blend weight;

OK,到这里就可以计算 T ‾ \overline{T} T中的第 i i i个顶点的变换:
t ‾ i ′ = ∑ k = 1 K w k , i G k ′ ( θ ⃗ , J ) t ‾ i \overline{t}_i^{'} = \sum_{k=1}^Kw_{k,i}G_k^{'}(\vec{\theta},J)\overline{t}_i ti=k=1Kwk,iGk(θ ,J)ti
G k ′ ( θ ⃗ , J ) = G k ( θ ⃗ , J ) G k ( θ ∗ ⃗ , J ) − 1 G_k^{'}(\vec{\theta},J) = G_k(\vec{\theta},J)G_k(\vec{\theta^{*}},J)^{-1} Gk(θ ,J)=Gk(θ ,J)Gk(θ ,J)1

  • 27
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值