简介 SMPL ,全称 Skinned Multi-Person Linear Model,是一套优雅而实用的三维人体参数化模型.
更白话一点:给它一份”骨架的姿态”(pose)和”一纸身形的刻度”(shape),它便能织出一张细腻的人体网格(成千上万的顶点),起落有致,动作流畅.Pose 决定关节如何开合回旋;Shape 勾勒高矮胖瘦的轮廓;再配上整体的平移与旋转,人物就稳稳落在世界坐标系中.
它之所以经久不衰,有两点朴素而关键的优势:
可微且线性友好,和深度学习模型同频共振;
扎根于大规模人体扫描数据,形体细节自然,少有违和的折痕.
应用场景也很广:三维人体重建,姿态估计,动作捕捉,AR/VR,动画制作……凡与”人”有关的 3D 任务,往往都有它的身影.
下面,我们沿着一条清晰的路径——从姿态到旋转,再到顶点——把 SMPL 温柔而彻底地拆开.
2. 数学预备 2.1 轴角表示法 在深入 SMPL 之前,先把”旋转”这件事说清楚:一根轴,一份角.轴告诉你”沿这条直线去绕”,角则回答”要绕多少”.有了它们,三维里的任何小转身都能被描述得干净利落.
轴(axis):一个单位向量 u = ( u x , u y , u z ) \boldsymbol{u} = (u_x, u_y, u_z) u = ( u x , u y , u z ) ,表示一个向量要绕着哪一条直线旋转.
角度(angle):一个标量 θ \theta θ ,说明要转过的弧度/角度是多少.
例如 u = ( 0 , 0 , 1 ) \boldsymbol{u}=(0,0,1) u = ( 0 , 0 , 1 ) 且 θ = 90 ∘ \theta=90^\circ θ = 9 0 ∘ ,就是”绕着 z z z 轴,旋转 90 ∘ 90^\circ 9 0 ∘ “.
走到罗德里格斯公式之前,先认识一个小角色:叉乘矩阵(skew-symmetric matrix).它的巧思在于——把”u × v \boldsymbol{u} \times \boldsymbol{v} u × v “这类向量叉乘,变成一记清爽的矩阵乘法.
给定单位向量 u = ( u x , u y , u z ) \boldsymbol{u} = (u_x, u_y, u_z) u = ( u x , u y , u z ) ,它的叉乘矩阵记作:
[ u ] × = [ 0 − u z u y u z 0 − u x − u y u x 0 ]
[\boldsymbol{u}]_\times =
\begin{bmatrix}
0 & -u_z & u_y \\\
u_z & 0 & -u_x \\\
-u_y & u_x & 0
\end{bmatrix}
[ u ] × = 0 u z − u y − u z 0 u x u y − u x 0
于是就有 u × v = [ u ] × v \boldsymbol{u} \times \boldsymbol{v} = [\boldsymbol{u}]_\times \, \boldsymbol{v} u × v = [ u ] × v .这里 v ∈ R 3 \boldsymbol{v} \in \mathbb{R}^3 v ∈ R 3 表示任意三维向量;而 [ u ] × [\boldsymbol{u}]_\times [ u ] × 本身是一类反对称矩阵,用来把向量叉乘”线性化”.
常用性质:
[ u ] × ⊤ = − [ u ] × , [ u ] × u = 0 .
[\boldsymbol{u}]_\times^\top = -[\boldsymbol{u}]_\times, \quad\quad [\boldsymbol{u}]_\times\, \boldsymbol{u} = \boldsymbol{0}.
[ u ] × ⊤ = − [ u ] × , [ u ] × u = 0 .
当 ∥ u ∥ = 1 \lVert \boldsymbol{u} \rVert = 1 ∥ u ∥ = 1 时,还有一个极好用的恒等式:
[ u ] × 2 = u u ⊤ − I .
[\boldsymbol{u}]_\times^{\,2} = \boldsymbol{u} \, \boldsymbol{u}^\top - \mathbf{I}.
[ u ] × 2 = u u ⊤ − I .
推导(用向量三重积 BAC–CAB 恒等式):对任意 v ∈ R 3 \boldsymbol{v} \in \mathbb{R}^3 v ∈ R 3 ,
[ u ] × 2 v = [ u ] × ( [ u ] × v ) = u × ( u × v ) = u ( u ⋅ v ) − v ( u ⋅ u ) .
[\boldsymbol{u}]_\times^{\,2}\,\boldsymbol{v}
= [\boldsymbol{u}]_\times\big([\boldsymbol{u}]_\times\,\boldsymbol{v}\big)
= \boldsymbol{u}\times(\boldsymbol{u}\times\boldsymbol{v})
= \boldsymbol{u}\,(\boldsymbol{u}\cdot\boldsymbol{v}) - \boldsymbol{v}\,(\boldsymbol{u}\cdot\boldsymbol{u}).
[ u ] × 2 v = [ u ] × ( [ u ] × v ) = u × ( u × v ) = u ( u ⋅ v ) − v ( u ⋅ u ) .
由于 ∥ u ∥ = 1 \lVert\boldsymbol{u}\rVert=1 ∥ u ∥ = 1 ,即 u ⋅ u = 1 \boldsymbol{u}\cdot\boldsymbol{u}=1 u ⋅ u = 1 ,于是
[ u ] × 2 v = u ( u ⋅ v ) − v = ( u u ⊤ − I ) v .
[\boldsymbol{u}]_\times^{\,2}\,\boldsymbol{v}
= \boldsymbol{u}\,(\boldsymbol{u}\cdot\boldsymbol{v}) - \boldsymbol{v}
= (\boldsymbol{u}\,\boldsymbol{u}^\top - \mathbf{I})\,\boldsymbol{v}.
[ u ] × 2 v = u ( u ⋅ v ) − v = ( u u ⊤ − I ) v .
因上式对任意 v \boldsymbol{v} v 都成立,便有矩阵恒等式
[ u ] × 2 = u u ⊤ − I .
[\boldsymbol{u}]_\times^{\,2} = \boldsymbol{u}\,\boldsymbol{u}^\top - \mathbf{I}.
[ u ] × 2 = u u ⊤ − I .
小注:这也意味着 [ u ] × 2 [\boldsymbol{u}]_\times^{\,2} [ u ] × 2 在 u \boldsymbol{u} u 方向为 0 \mathbf{0} 0 ,而在与 u \boldsymbol{u} u 正交的平面上等于 − I -\mathbf{I} − I (把垂直分量”翻个面”).
有了它,罗德里格斯公式就水到渠成:围绕单位轴 u \boldsymbol{u} u 旋转 θ \theta θ 的旋转矩阵可写为
R ( ω ) : = I + sin θ [ u ] × + ( 1 − cos θ ) [ u ] × 2 .
\mathbf{R}(\boldsymbol{\omega})
:= \mathbf{I} + \sin\theta\,[\boldsymbol{u}]_\times + (1-\cos\theta)\,[\boldsymbol{u}]_\times^{\,2}.
R ( ω ) := I + sin θ [ u ] × + ( 1 − cos θ ) [ u ] × 2 .
其中 ω = θ u \boldsymbol{\omega} = \theta\,\boldsymbol{u} ω = θ u .
直观一点看:沿着 u \boldsymbol{u} u 的分量不动,垂直于 u \boldsymbol{u} u 的那一片平面里,整体转过一个 θ \theta θ .
等价的”向量版”写法也很常见,对任意 v ∈ R 3 \boldsymbol{v} \in \mathbb{R}^3 v ∈ R 3 :
R ( u , θ ) v = cos θ v + sin θ ( u × v ) + ( 1 − cos θ ) ( u ⋅ v ) u .
\mathbf{R}(\boldsymbol{u},\theta)\,\boldsymbol{v}
= \cos\theta\,\boldsymbol{v}
+ \sin\theta\,(\boldsymbol{u}\times\boldsymbol{v})
+ (1-\cos\theta)\,(\boldsymbol{u}\cdot\boldsymbol{v})\,\boldsymbol{u}.
R ( u , θ ) v = cos θ v + sin θ ( u × v ) + ( 1 − cos θ ) ( u ⋅ v ) u .
3. 模型参数 3.1 形状参数(β) 形状参数刻画”人”的体态与比例变化,可把它想象成一组推拉自如的滑块:身高,胖瘦,肩宽……轻轻调整,体型便随之细腻起伏.下文将在模板网格与形状基的框架中展开说明.
在 SMPL 中,模板网格(Template Mesh) 共有 N = 6890 N=6890 N = 6890 个顶点(vertices),每个顶点都是一个三维坐标:t i = ( x i , y i , z i ) t_i = (x_i, y_i, z_i) t i = ( x i , y i , z i ) .
将所有顶点按顺序”堆叠”起来,得到一条长向量:
T = { t 1 , t 2 , ⋯ , t 6890 } , T ∈ R 3 N .
T = \{t_1, t_2, \cdots, t_{6890}\},\quad T \in \mathbb{R}^{3N}.
T = { t 1 , t 2 , ⋯ , t 6890 } , T ∈ R 3 N .
(也常把 T T T 看作 R N × 3 \mathbb{R}^{N\times 3} R N × 3 的矩阵,两种写法本质等价.)
形状对模板的线性修正,按原论文记号为:
T ( β ) = T ˉ + B S ( β ) ,
T(\boldsymbol{\beta}) = \bar{T} + B_S(\boldsymbol{\beta}),
T ( β ) = T ˉ + B S ( β ) ,
其中 T ˉ \bar{T} T ˉ 是模板网格,B S ( β ) B_S(\boldsymbol{\beta}) B S ( β ) 是由形状参数 β \boldsymbol{\beta} β 驱动的 shape blend shapes.
等价地,也可写成 PCA 形状基的和式:
T ( β ) = T ˉ + ∑ k = 1 K β k S k .
T(\boldsymbol{\beta}) = \bar{T} + \sum_{k=1}^{K} \, \beta_k\, S_k.
T ( β ) = T ˉ + k = 1 ∑ K β k S k .
其中,β k \beta_k β k (shape parameter) 是第 k k k 个形状参数,S k S_k S k (shape basis vector) 是对应的形状基向量,通常由大量 3D 扫描人体数据通过 PCA(Principal Component Analysis,主成分分析) 学到.
小记:β = ( β 1 , … , β K ) ⊤ ∈ R K \boldsymbol{\beta} = (\beta_1,\dots,\beta_K)^\top \in \mathbb{R}^K β = ( β 1 , … , β K ) ⊤ ∈ R K ,S k ∈ R 3 N S_k \in \mathbb{R}^{3N} S k ∈ R 3 N .常见设置是 K = 10 K=10 K = 10 (SMPL 经典 10 维形状空间).
补充:实际发布的 SMPL 亦提供 K = 10 K=10 K = 10 与 K = 300 K=300 K = 300 两种形状空间版本,后者能捕捉更细致的体型差异.
可以把 β \boldsymbol{\beta} β 理解成一排”滑块 “,每个滑块驱动一类典型的体型变化:
β 1 \beta_1 β 1 :身高
β 2 \beta_2 β 2 :胖瘦
β 3 \beta_3 β 3 :腿长 vs 躯干
β 4 \beta_4 β 4 :肩宽
β 5 \beta_5 β 5 :四肢粗细
β 6 \beta_6 β 6 :骨盆大小
β 7 \beta_7 β 7 :胸腔厚度
β 8 , β 9 , β 10 \beta_8,\beta_9,\beta_{10} β 8 , β 9 , β 10 :细部比例,用于刻画更精细的身材差异.
3.2 姿态参数(θ) 共 24 个关节,每个关节用 3 个参数(旋转轴 + 角度)描述,合计 72 维:
θ ∈ R 72 .
\boldsymbol{\theta} \in \mathbb{R}^{72}.
θ ∈ R 72 .
为什么不是 4 个参数(四元数)?因为三维旋转群 SO(3) 只有 3 个自由度 ;四元数 q ∈ R 4 \boldsymbol{q}\in\mathbb{R}^4 q ∈ R 4 还需满足 单位范约束 ∥ q ∥ = 1 \lVert\boldsymbol{q}\rVert=1 ∥ q ∥ = 1 (且 q \boldsymbol{q} q 与 − q -\boldsymbol{q} − q 表示同一旋转),有效自由度仍是 3.轴—角(axis–angle) 用 3 维最小参数,回归更直接.
每个关节的参数是一个轴—角向量 .记第 i i i 个关节的单位旋转轴为 W i W_i W i ,旋转角为 θ i \theta_i θ i ,则轴—角向量
ω i = θ i W i , W i ∈ R 3 , ∥ W i ∥ = 1.
\boldsymbol{\omega}_i = \theta_i\, W_i,\quad W_i \in \mathbb{R}^3,\ \lVert W_i\rVert = 1.
ω i = θ i W i , W i ∈ R 3 , ∥ W i ∥ = 1.
也可反过来由 ω i \boldsymbol{\omega}_i ω i 取出角度与轴:
θ i = ∥ ω i ∥ , W i = { ω i / ∥ ω i ∥ , ∥ ω i ∥ > 0 , 任意单位向量 , 否则 .
\theta_i = \lVert\boldsymbol{\omega}_i\rVert,\quad W_i = \begin{cases}
\boldsymbol{\omega}_i/\lVert\boldsymbol{\omega}_i\rVert, & \lVert\boldsymbol{\omega}_i\rVert>0,\\
\text{任意单位向量}, & \text{否则}.
\end{cases}
θ i = ∥ ω i ∥ , W i = { ω i / ∥ ω i ∥ , 任意单位向量 , ∥ ω i ∥ > 0 , 否则 .
例如:绕 x x x 轴旋转,有 W i = ( 1 , 0 , 0 ) W_i=(1,0,0) W i = ( 1 , 0 , 0 ) ,θ i \theta_i θ i 采用弧度制.
由罗德里格斯公式可得其旋转矩阵:
R ( θ i ) = I + sin θ i [ W i ] × + ( 1 − cos θ i ) [ W i ] × 2 .
R(\theta_i) = \mathbf{I} + \sin\theta_i\,[W_i]_\times + (1-\cos\theta_i)\,[W_i]_\times^{\,2}.
R ( θ i ) = I + sin θ i [ W i ] × + ( 1 − cos θ i ) [ W i ] × 2 .
4. 核心计算流程 4.1 正向运动学(FK) 我们可以把 FK 视为在一个骨骼链上,逐步叠加坐标系变换:
每个关节不仅有一个”位置”,它还定义了一个坐标系.
子关节的位置和方向,总是依附在父关节的坐标系里.
父关节一旦动了,它的整个坐标系也跟着动,子关节就在新的坐标系里继续旋转.
核心公式:
G i = G parent ( i ) ⋅ T i
G_i = G_{\text{parent}(i)} \cdot T_i
G i = G parent ( i ) ⋅ T i
G i G_i G i : 关于
i i i 的全局变换矩阵 (global transform).
G parent ( i ) G_{\text{parent}(i)} G parent ( i ) : 父关节的全局变换.
T i T_i T i : 关于
i i i 的本地变换矩阵 (local transform).
为避免与 T ( β , θ ) T(\boldsymbol{\beta},\boldsymbol{\theta}) T ( β , θ ) 混淆,本文仅在 FK 小节使用 T i T_i T i 表示”关节的本地变换”,与网格模板相关的量统一使用 T ˉ \bar{T} T ˉ 与 T ( β , θ ) T(\boldsymbol{\beta},\boldsymbol{\theta}) T ( β , θ ) 记号.
本地变换矩阵 T i T_i T i 每个关节有两个信息:
旋转 (姿态):由 ω i \boldsymbol{\omega}_i ω i (轴角向量)通过罗德里格斯公式变成旋转矩阵 R ( ω i ) R(\boldsymbol{\omega}_i) R ( ω i ) .
平移 (骨骼长度/位置):第 i i i 个关节在父关节坐标系中的位置 j i \boldsymbol{j}_i j i (常由绑定姿态/骨骼定义).
T i = [ R ( ω i ) j i 0 ⊤ 1 ]
T_i =
\begin{bmatrix}
R(\boldsymbol{\omega}_i) & \boldsymbol{j}_i \\
\mathbf{0}^\top & 1\\
\end{bmatrix}
T i = [ R ( ω i ) 0 ⊤ j i 1 ]
R ( ω i ) R(\boldsymbol{\omega}_i) R ( ω i ) :描述旋转.
j i \boldsymbol{j}_i j i :相对于父关节的偏移位置.
递推关系:
假设根节点 (骨盆) 的全局矩阵:
G root = [ R ( ω root ) t root 0 1 ]
G_{\text{root}} =
\begin{bmatrix}
R(\boldsymbol{\omega}_{\text{root}}) & t_{\text{root}}\\
0 & 1\\
\end{bmatrix}
G root = [ R ( ω root ) 0 t root 1 ]
那么,上臂的全局变换矩阵为:
G upper_arm = G root ⋅ T upper_arm
G_{\text{upper\_arm}} = G_{\text{root}} \cdot T_{\text{upper\_arm}}
G upper_arm = G root ⋅ T upper_arm
前臂的全局变换矩阵为:
G lower_arm = G upper_arm ⋅ T lower_arm
G_{\text{lower\_arm}} = G_{\text{upper\_arm}} \cdot T_{\text{lower\_arm}}
G lower_arm = G upper_arm ⋅ T lower_arm
手腕的全局变换矩阵为:
G wrist = G lower_arm ⋅ T wrist
G_{\text{wrist}} = G_{\text{lower\_arm}} \cdot T_{\text{wrist}}
G wrist = G lower_arm ⋅ T wrist
4.2 线性混合蒙皮(LBS) SMPL 的关键步骤之一.
可以把骨架(关节)想成木偶的”骨头”,把网格顶点想成木偶表面的”橡皮泥”.LBS 就是规定:当骨头动起来时,每个顶点该跟着哪些骨头,以多大比例一起动.
最核心的直觉是”加权平均的变换”:一个顶点同时由多个关节影响,每个关节给它一个变换,这些变换按照权重做线性混合,得到顶点的新位置.
符号约定:
i i i :顶点索引,j j j :关节索引(共 K K K 个关节,SMPL 通常 K = 24 K=24 K = 24 ).
w i j w_{ij} w ij :第 j j j 个关节对第 i i i 个顶点的影响权重,满足 w i j ≥ 0 w_{ij}\ge 0 w ij ≥ 0 且 ∑ j = 1 K w i j = 1 \sum_{j=1}^{K} w_{ij} = 1 ∑ j = 1 K w ij = 1 .
G j G_j G j :第 j j j 个关节的全局变换矩阵(4 × 4 4\times 4 4 × 4 ,包含旋转和平移).
v ˉ i \bar{v}_i v ˉ i :模板网格上的顶点("绑定姿态/模板姿态")坐标.
v i v_i v i :变形后的顶点坐标.
公式:
v i = ∑ j = 1 K w i j [ G j ( θ , J ) B j ( J ) − 1 ] v ˉ i
v_i = \sum_{j=1}^{K} w_{ij}\, \big[\, G_j(\boldsymbol{\theta}, \mathbf{J})\, B_j(\mathbf{J})^{-1} \,\big] \, \bar{v}_i
v i = j = 1 ∑ K w ij [ G j ( θ , J ) B j ( J ) − 1 ] v ˉ i
其中 B j B_j B j 是第 j j j 个关节在绑定姿态下的变换矩阵,J \mathbf{J} J 表示由 J ( β ) J(\boldsymbol{\beta}) J ( β ) 得到的关节位置集合.
实践中,蒙皮权重 W \mathcal{W} W 由数据学习得到;对每个顶点按关节归一(∑ j w i j = 1 \sum_j w_{ij}=1 ∑ j w ij = 1 )有助于数值稳定与体积保持.
变量释义小结:
K K K :关节数量(SMPL 里通常为 24 24 24 ).
w i j w_{ij} w ij :第 j j j 个关节对第 i i i 个顶点的影响权重(按顶点归一).
G j G_j G j :第 j j j 个关节的全局变换矩阵(由 FK 得到).
B j B_j B j :第 j j j 个关节在绑定姿态的全局变换矩阵.
v ˉ i \bar{v}_i v ˉ i :模板网格上的顶点坐标.
v i v_i v i :变形后的顶点坐标.
4.3 姿态修正 作用:给每个关节加入”补偿形变”,让模型的表面更符合真实人体.
SMPL 将姿态引起的非线性形变线性化为一组姿态基的加权和:
B P ( θ ) = ∑ n = 1 9 K ( R n ( θ ) − R n ( θ ∗ ) ) P n
B_P(\boldsymbol{\theta}) = \sum_{n=1}^{9K} \big( R_n(\boldsymbol{\theta}) - R_n(\boldsymbol{\theta}^*) \big)\, \mathbf{P}_n
B P ( θ ) = n = 1 ∑ 9 K ( R n ( θ ) − R n ( θ ∗ ) ) P n
其中 R n ( θ ) R_n(\boldsymbol{\theta}) R n ( θ ) 表示各关节的旋转矩阵按 3 × 3 3\times 3 3 × 3 展平后的第 n n n 个分量,θ ∗ \boldsymbol{\theta}^* θ ∗ 为参考姿态(如 T-pose),P n \mathbf{P}_n P n 是学习得到的姿态修正基.该项与形状无关,仅由姿态决定.
5. 完整模型公式 M ( β , θ ) = W ( T P ( β , θ ) , J ( β ) , θ , W )
M(\boldsymbol{\beta}, \boldsymbol{\theta}) = W\big( T_P(\boldsymbol{\beta}, \boldsymbol{\theta}),\; J(\boldsymbol{\beta}),\; \boldsymbol{\theta},\; \mathcal{W} \big)
M ( β , θ ) = W ( T P ( β , θ ) , J ( β ) , θ , W )
其中
T P ( β , θ ) = T ˉ + B S ( β ) + B P ( θ )
T_P(\boldsymbol{\beta}, \boldsymbol{\theta}) = \bar{T} + B_S(\boldsymbol{\beta}) + B_P(\boldsymbol{\theta})
T P ( β , θ ) = T ˉ + B S ( β ) + B P ( θ )
W \mathcal{W} W 为蒙皮权重矩阵(注意与函数
W ( ⋅ ) W(\cdot) W ( ⋅ ) 区分).
符号说明:
M ( β , θ ) M(\boldsymbol{\beta}, \boldsymbol{\theta}) M ( β , θ ) :给定形状与姿态后输出的网格顶点集合(通常记作 V ∈ R 3 N V \in \mathbb{R}^{3N} V ∈ R 3 N ).
T P ( β , θ ) T_P(\boldsymbol{\beta}, \boldsymbol{\theta}) T P ( β , θ ) :姿态与形状修正后的模板顶点,T P = T ˉ + B S ( β ) + B P ( θ ) T_P = \bar{T} + B_S(\boldsymbol{\beta}) + B_P(\boldsymbol{\theta}) T P = T ˉ + B S ( β ) + B P ( θ ) .
T ˉ \bar{T} T ˉ :模板网格(参考姿态/平均形状)的顶点集合.
B S ( β ) B_S(\boldsymbol{\beta}) B S ( β ) :由形状参数驱动的 shape blend shapes,常等价于 ∑ k β k S k \sum_k \beta_k S_k ∑ k β k S k 的线性组合.
B P ( θ ) B_P(\boldsymbol{\theta}) B P ( θ ) :由姿态参数驱动的 pose blend shapes,基于各关节 R i ( θ ) R_i(\boldsymbol{\theta}) R i ( θ ) 相对参考姿态的旋转偏差构造.
J ( β ) J(\boldsymbol{\beta}) J ( β ) :从 T ( β ) T(\boldsymbol{\beta}) T ( β ) 回归得到的关节位置集合(joint regressor 输出).
θ \boldsymbol{\theta} θ :姿态参数(每个关节的轴角向量),在 SMPL 经典设置下维度为 72 72 72 (24 × 3 24\times3 24 × 3 ).
W \mathcal{W} W :蒙皮权重矩阵(或按顶点组织的权重集合),其元素 w i j w_{ij} w ij 表示第 j j j 个关节对第 i i i 个顶点的影响,满足对每个顶点 ∑ j w i j = 1 \sum_j w_{ij}=1 ∑ j w ij = 1 .
W ( ⋅ ) W(\cdot) W ( ⋅ ) :线性蒙皮函数(LBS),将 T P T_P T P 与关节全局变换 G j ( θ , J ) G_j(\boldsymbol{\theta}, \mathbf{J}) G j ( θ , J ) ,绑定姿态 B j ( J ) B_j(\mathbf{J}) B j ( J ) 以及权重 W \mathcal{W} W 结合,输出姿态后的顶点.常见实现为 v i = ∑ j = 1 K w i j [ G j ( θ , J ) B j ( J ) − 1 ] v ˉ i v_i = \sum_{j=1}^{K} w_{ij}\,\big[\, G_j(\boldsymbol{\theta}, \mathbf{J})\, B_j(\mathbf{J})^{-1} \,\big] \, \bar{v}_i v i = ∑ j = 1 K w ij [ G j ( θ , J ) B j ( J ) − 1 ] v ˉ i (齐次坐标形式).
其中 J ( β ) J(\boldsymbol{\beta}) J ( β ) 常写成线性回归形式:
J ( β ) = J + J S β
J(\boldsymbol{\beta}) = \mathcal{J} + \mathcal{J}_S\, \boldsymbol{\beta}
J ( β ) = J + J S β
其中 J \mathcal{J} J 为平均关节点位置,J S \mathcal{J}_S J S 为学习得到的关节回归矩阵.
一句话直观总结:把”长相”和”动作”先分别算好(T P ( β , θ ) T_P(\boldsymbol{\beta}, \boldsymbol{\theta}) T P ( β , θ ) 与 J ( β ) J(\boldsymbol{\beta}) J ( β ) ),用骨架把动作展开成各关节的全局变换,再用皮肤权重 W \mathcal{W} W 将这些关节变换按比例混合到每个顶点上,得到最终的网格顶点 M ( β , θ ) M(\boldsymbol{\beta}, \boldsymbol{\theta}) M ( β , θ ) .
6. 参考文献
Loper, M., Mahmood, N., Romero, J., Pons-Moll, G., & Black, M. J. (2015). SMPL: A Skinned Multi-Person Linear Model. ACM Transactions on Graphics , 34(6), 1–16. ACM DL