NVlabs/SOMA-X

SOMA: Unifying Parametric Human Body Models

SOMA‑X – 可微分人体与手部模型

简介 – SOMA‑X 是一个 Python 库,提供参数化人体和手部的统一可微分表示。它将多种现有的身份模型(MHR、SMPL‑X、MANO 等)映射到通用的拓扑结构和绑定(rig)上,使您能够通过单一管线对模型进行动画制作、重定向和蒙皮。

主要组件

  • SOMALayer – 具有三个细节级别(超低、低、中)的全身模型。
  • SOMAHandLayer – 左手/右手模型,同样具有三个 LOD 级别。
  • 内置的身份后端(原生 SOMA、MHR、Anny、GarmentMeasurements),并可选支持 SMPL 系列、MANO 等。
  • 用于姿态逆解、程序化绑定控制、平滑处理、USD/NPZ 输入输出以及几何辅助工具。
  • 使用 NVIDIA Warp 加速运行时蒙皮和拟合。

安装

pip install py-soma-x

首次运行该库时,它会自动从 NVIDIA Hugging Face 仓库下载所需的资源并在本地缓存。可选的后端可能需要额外的 pip 扩展包和单独的文件(例如,受许可的 SMPL 或 MANO 文件)。

快速入门示例

import torch
from soma import SOMALayer, SOMAHandLayer

# Full body
body = SOMALayer(identity_model_type="mhr", device="cpu")
poses = torch.zeros(1, 77, 3)               # 77 joints, axis‑angle
shape = torch.zeros(1, body.num_shape_components)
out = body(poses, shape)
vertices, joints = out.vertices, out.joints

# Hand
hand = SOMAHandLayer(hand_type="right", lod="mid", device="cpu")
hand_poses = torch.zeros(1, 25, 3)
hand_shape = torch.zeros(1, hand.num_shape_components)
hand_out = hand(hand_poses, hand_shape)
hand_vertices, hand_joints = hand_out.vertices, hand_out.joints

返回的对象包含网格顶点和关节位置,可直接用于下游渲染或物理模拟。

典型用例

  • 动画与重定向 – 在多个身体/手部模型间复用单一姿态序列。
  • 可微分拟合 – 将模型集成到优化循环中(例如,姿态估计、动作捕捉)。
  • 合成数据生成 – 采样多样化的身体形状和姿态,用于训练视觉或机器人模型。
  • 虚拟试穿与服装模拟 – 结合 GarmentMeasurements 用于服装管线。

相关 NVIDIA 项目

  • GEM‑X – 基于 SOMA 的视频姿态估计。
  • Kimodo – 使用 SOMA 作为基础角色的文本到动作生成。
  • ARDYMotionBricksGR00T Whole‑Body Control 等,均使用 SOMA‑X 数据。

文档与资源

许可证 – 库代码采用 Apache‑2.0 许可证。第三方模型文件保留其原始许可证。


以上所有信息均直接取自仓库的 README。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目