当前位置: 首页 > news >正文

一天认识一种模型方法--3D人体建模 SMPL

SMPL

SMPL (Skinned Multi-Person Linear Model) 是一个“万能人体生成器”。它非常强大,因为你只需要给它两组参数,它就能生成一个具有特定体型 (Shape)姿态 (Pose) 的、带有关节的、完整的 3D 人体网格(mesh)。

这两组参数就是:

  1. 体型参数 β (Beta): 一组数字,控制着这个人的高矮胖瘦、身体比例等。可以理解为“捏人”时的体型滑块。
  2. 姿态参数 θ (Theta): 一组数字,控制着人体20多个关节点(如手肘、膝盖等)的旋转角度,决定了这个人是站着、坐着、还是在跑步。

整个过程可以分为两大步:

  1. 塑造个性化模板:根据体型和姿态参数,在一个基础模型上进行微调,得到一个“准备好”被摆姿势的身体模型。
  2. 骨骼蒙皮:像提线木偶一样,驱动这个身体模型的“骨骼”到目标姿态,然后让“皮肤”(也就是mesh)跟着骨骼一起运动。

1. 塑造个性化模板

 

这个公式对应上面说的第一大步。它计算出要建模的人的3D人体模型(此时还没有各种动作,只是标准状态下的外表的建模),这个模型已经具备了目标的体型和姿态修正,但所有关节还处在“标准姿势”(Template Pose,T-Pose)下。

  • T: 这是一个基础模板模型 (Template)。你可以把它想象成一个最标准、最平均的男性或女性 T-Pose 模型,它是所有变化的起点。它包含了数千个顶点(vertices)的坐标。
  • Bs(β): 这是Shape Blend Shape
    • 它是一个函数,输入体型参数 β,输出一个 3D 的形变量。
    • 这个形变量会加到基础模板 T 上,来实现高矮胖瘦的变化。比如,如果 β 的某个值很大,可能 Bs(β) 就会让模型的肚子部分向外凸出一些。
  • Bp(θ): 这是Pose Blend Shape
    • 这是一个非常巧妙的修正项。当你单纯地旋转骨骼时,关节处(比如手肘、肩膀)的皮肤会不自然地扭曲或凹陷(被称为“糖果纸”效应)。
    • Bp(θ) 就是为了修正这个问题。它会根据最终的目标姿态 θ,在关节处预先添加一些微小的、符合肌肉运动规律的形变。比如,当你要弯曲手臂时,它会在这里加上一个二头肌鼓起的形状。

2. 骨骼蒙皮(Linear Blend Skinning)

  • M(β,θ): 这就是我们想要的最终模型,一个特定体型、特定姿态的 3D 人体网格。

  • lbs(⋅): 代表线性混合蒙皮 (Linear Blend Skinning, LBS) 函数。这是计算机图形学中一个经典算法,用来将皮肤(网格顶点)附着到骨骼上。

  • T(β,θ): 这是上一步算出来的个性化 T-Pose 模型。

  • J(β): 根据体型参数 β 计算出的骨骼关节点(Joints)在 T-Pose 下的位置。胖的人骨架会宽一些。

  • θ: 目标姿态参数,它定义了每个关节应该如何旋转。

  • W: 蒙皮权重 (Blend Weights)。这是一个非常重要的矩阵,它定义了每一个顶点受每一个关节影响的程度。例如,对于小臂上的一个顶点,它主要受手肘和手腕关节的影响,几乎不受膝盖关节的影响。

这个公式揭示了 lbs 函数内部是如何对某一个顶点进行操作的。

  • vc: 代表个性化模板 T(β,θ) 上的任意一个顶点(在 Canonical Pose 下)。

  • vo: 代表这个顶点在经过姿态变换后,在最终模型 M 里的新位置(在 Observation Space 下)。

  • G: 这是一个为顶点 vc量身定制的、最终的混合变换矩阵。

  • wk: 对于我们正在计算的这个顶点 vc,它受到第 k 个关节的影响权重。这个值是从权重矩阵 W 中查出来的。

  • Gk(θ,jk): 这是第 k 个关节(骨骼)自身的全局变换矩阵(包含旋转和平移)。它由姿态参数 θ 和关节初始位置 jk 决定。

  • ∑_{k=1}^Kw_kG_k : 这就是 LBS 的核心!一个顶点的最终变换 G,不是由某一个关节决定的,而是由影响它的 K 个关节的变换 Gk 进行加权平均得到的。


SMPL-X

SMPL-X 由 SMPL 发展而来,在模型中加入了更多面部顶点、表情参数φ以及表情混合形状函数Be:


文章转载自:

http://5c6XYFTK.xpqyf.cn
http://RMwMb8fe.xpqyf.cn
http://QTwdOz9P.xpqyf.cn
http://ygEHQ0q6.xpqyf.cn
http://elb74EEc.xpqyf.cn
http://yCCOh95a.xpqyf.cn
http://87OHzaBt.xpqyf.cn
http://qpZFZL8e.xpqyf.cn
http://ZFDhhnYX.xpqyf.cn
http://YTFRXC5x.xpqyf.cn
http://GdTVk4oD.xpqyf.cn
http://BVpOMODW.xpqyf.cn
http://Hnyl3oXe.xpqyf.cn
http://UAwuS661.xpqyf.cn
http://uB8vOxiX.xpqyf.cn
http://0mcKyhuL.xpqyf.cn
http://JTl6znqh.xpqyf.cn
http://i0dtZs2M.xpqyf.cn
http://CvB5GbfN.xpqyf.cn
http://TeZmjYXa.xpqyf.cn
http://c1EluskG.xpqyf.cn
http://9K8HMTVn.xpqyf.cn
http://A262iNJk.xpqyf.cn
http://6CDYZxoJ.xpqyf.cn
http://mPeHgjEv.xpqyf.cn
http://KhvtZPIM.xpqyf.cn
http://8ZpVXSaW.xpqyf.cn
http://YrAqGlcX.xpqyf.cn
http://BM5nYrH1.xpqyf.cn
http://p4tT8q4X.xpqyf.cn
http://www.dtcms.com/a/388274.html

相关文章:

  • World Labs 的核心技术介绍:生成持久、可导航的 3D 世界
  • websocket如何推送最新日志
  • 使用Docker部署bewCloud轻量级Web云存储服务
  • web Service介绍
  • Web 架构中的共享存储:NFS 部署与用户压缩
  • RuoYi整合ZLM4j+WVP
  • @CrossOrigin的作用
  • Tree-shaking【前端优化】
  • Scikit-learn Python机器学习 - 分类算法 - 随机森林
  • 深入浅出Java中的Happens-Before原则!
  • centos7更换yum源
  • [特殊字符] 认识用户手册用户手册(也称用户指南、产品手册)是通过对产品功能的清
  • Codex 在 VS Code/Cursor 的插件基础配置
  • 前端Web案例-登录退出
  • Redis学习------------缓存优化
  • openfeigin 跨服务调用流程 源码阅读
  • 运动手环心率监测:原理、可靠性与市场顶尖之选全解析​​
  • 端到端智驾测试技术论文阅读
  • Frank-Wolfe算法:深入解析与前沿应用
  • GPT-5-Codex CLI保姆级教程:获取API Key配置与openai codex安装详解
  • 代码优化测试
  • 深度学习基础:PyTorch张量创建与操作详解
  • 7 大文献综述生成工具 2025 实测推荐
  • 红黑树 详解
  • 第十六章 Arm C1-Premium核心调试系统深度解析
  • Python压缩数据文件读写完全指南:从基础到高并发实战
  • HTTP/1.0 与 HTTP/2.0 的主要区别
  • 颜群JVM【02】JVM运行时的内存区域
  • 自定义Grafana错误率面板No Data问题排查
  • 深入剖析C++内存模型:超越原子性的多线程编程基石