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 extras 및 개별 모델 파일(예: 라이선스된 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를 기반 캐릭터로 사용하는 텍스트-투-모션 생성.
  • ARDY, MotionBricks, GR00T Whole‑Body Control 등 모두 SOMA‑X 데이터를 소비합니다.

문서 및 리소스

라이선스 – 라이브러리 코드는 Apache‑2.0. 서드파티 모델 파일은 원래 라이선스를 유지합니다.


위 모든 정보는 저장소의 README에서 직접 가져왔습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트