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。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案