ActionMesh - 動画からアニメーション付き3Dメッシュを生成するMeta AIのモデル
ActionMeshとは
Meta AI Researchが2025年1月に公開した、動画からアニメーション付き3Dメッシュを生成するモデル。従来の3D拡散モデルに時間軸を追加した「Temporal 3D Diffusion」というアーキテクチャで、フレームごとに同期した3D形状シーケンスを生成する。
出力形式
出力は3パターン。すべて.glb(glTFバイナリ)形式で、Blender・Unity・Unreal Engine・Three.jsなど主要な3Dツールで読み込める。
| 出力 | 形式 | 説明 |
|---|---|---|
| フレーム別メッシュ | mesh_000.glb, mesh_001.glb, … | 各タイムステップの静的メッシュ |
| アニメーション付きメッシュ | animated_mesh.glb | アニメーション埋め込み済み。Blender 3.5.1が変換に必要 |
| レンダリング動画 | .mp4 | プレビュー用 |
animated_mesh.glbはBlenderで開くとタイムラインにアニメーションが入った状態になる。ボーンベースのスキニングではなく、フレームごとの形状変化をモーフターゲットとして埋め込んでいると思われる。リターゲット(別キャラへの動き移植)は直接はできない。
テクスチャは含まれず、ジオメトリのみの出力。プロジェクトページに「テクスチャリングが可能」とあるが、これは出力メッシュに対して別途テクスチャを貼れるという意味。
入力の制約
入力は.mp4ファイルまたはPNG連番フォルダ。フレーム数は16〜31枚で、超過分は無視される。
30fpsの6秒動画(180フレーム)をそのまま入れると先頭31フレーム(約1秒分)しか使われない。対策として:
- ffmpegでfpsを落とした動画にする:
ffmpeg -i input.mp4 -vf "fps=3" output.mp4 - 均等にPNG連番を抽出してフォルダ指定する
後者のほうがどのフレームを使うか制御できる。
実行環境
NVIDIA GPU(CUDA必須)で、VRAM 32GB以上が必要。テスト済みGPUはA100・H100・H200。
| GPU | VRAM | 備考 |
|---|---|---|
| RTX 5090 | 32GB | ギリギリ。入力次第でOOMリスク |
| A100 80GB | 80GB | テスト済み環境。余裕あり |
| H100 | 80GB | ベンチマーク環境。通常115秒、fast 45秒 |
Apple Silicon(M4 Proなど)はCUDA非対応・PyTorch3D未対応のため動かない。量子化やMLX移植もまだ存在しない。
RunPodで試すならA100 80GBが安全。RTX 5090でVRAM 32GBギリギリを攻めるとOOMデバッグで時間を浪費する可能性がある。SSHでPod借りれば、セットアップからPNGフォルダ指定まで自由に操作できる。
AI動画生成との組み合わせ
Grokなどの動画生成AIで「単体キャラの周囲をカメラが回る動画」を生成し、それをActionMeshに入れれば画像1枚→3Dモデルのパイプラインが作れる。
静的な多視点復元モデル(TripoSR、InstantMeshなど)と比べた場合の利点:
- 動画内でキャラが動いていれば、髪やアクセサリーなど本体と分離しやすいパーツの帰属関係が時間的手がかりから推定しやすい
- 非対称なパーツ(サイドポニーなど)の形状推定に有利な可能性がある
ただしActionMeshのデモは人体全体やラクダなど大きく滑らかな形状が中心で、髪の毛のような薄い・細い構造がどこまで再現されるかは未知数。過度な期待はせず、おおまかな形状のベースを取得して、細部はBlenderで調整するという前提が現実的。
基本的な使い方
# セットアップ
git clone https://github.com/facebookresearch/actionmesh.git
cd actionmesh
pip install -r requirements.txt
pip install -e .
# 推論(動画入力)
python inference/video_to_animated_mesh.py --input video.mp4
# 高速モード(品質はやや落ちる)
python inference/video_to_animated_mesh.py --input video.mp4 --fast
# PNG連番フォルダ入力
python inference/video_to_animated_mesh.py --input frames_folder/