NVlabs/SOMA-X

SOMA: Unifying Parametric Human Body Models

SOMA‑X – 微分可能な人体・手モデル

概要 – SOMA‑Xは、パラメトリックな人体および手の統一された微分可能な表現を提供するPythonライブラリです。既存の多様なアイデンティティモデル(MHR、SMPL‑X、MANOなど)を共通のトポロジーとリグにマッピングし、単一のパイプラインでモデルのアニメーション、リターゲティング、スキニングを行うことを可能にします。

主要コンポーネント

  • SOMALayer – 3つの詳細レベル(エクストラロー、ロー、ミッド)を持つ全身モデル。
  • SOMAHandLayer – 左手/右手モデル、同じ3つのLOD。
  • 組み込みのアイデンティティバックエンド(ネイティブSOMA、MHR、Anny、GarmentMeasurements)に加え、SMPLファミリー、MANOなどのオプションサポート。
  • ポーズ逆変換、プロシージャルリグ制御、スムージング、USD/NPZ I/O、ジオメトリヘルパーなどのユーティリティ。
  • 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から直接引用されています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト