0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AniGen を Apple Silicon Mac で動かし、1枚の画像からリグ付き3Dモデルを作る

0
Last updated at Posted at 2026-07-11

AniGen を Apple Silicon Mac で動かし、1枚の画像からリグ付き3Dモデルを作る

こんにちは、皆さん。

1枚のイラストから、動かせる3Dキャラクターまで自動で作れたら便利ですよね。ただ、3Dの形だけでなく、骨格と「どの骨でどこが動くか」まで作る必要があります。

さて、今日は AniGen の Apple Silicon 対応版を M1 Max の Mac で動かし、2枚の画像からリグ付き3Dモデルを生成できるか検証しました。

先に結果を書くと、単純なマスコット画像は成功しましたが、細い手足や衣服のある人物イラストは失敗しました。固定条件での完走は2枚中1枚です。

今回検証する内容

AniGen は、1枚の画像から次の3要素をまとめて生成するモデルです。

  • mesh: 3Dモデルの表面形状
  • skeleton: モデルを動かすための骨格
  • skinning weight: 各頂点がどの骨にどれだけ追従するかを表す値

今回は AniGen-mac を使い、Apple の GPU を PyTorch から使うための仕組みである MPS 上で、次を確認しました。

  • mesh.glbskeleton.glb、背景除去後の画像を生成できるか
  • GLB に mesh、skin、joint、JOINTS_0WEIGHTS_0 が入っているか
  • 単純なマスコットと、複雑な人物イラストで結果がどう変わるか
  • 失敗がパイプラインのどこで起きたか

対象の lab: kiarina/labs/2026/07/11/anigen-mac

検証環境の再現

Apple Silicon Mac、macOS 26 以降、Full Xcode 26 以降、miseuv、Node.js、Google Chrome、FFmpeg が必要です。初回はソース、Python 環境、学習済み weight などで約24 GBを使います。

git clone --depth 1 --filter=blob:none --sparse \
  https://github.com/kiarina/labs.git
cd labs
git sparse-checkout set .gitignore .mise/tasks Makefile mise.toml 2026/07/11/anigen-mac
mise -C 2026/07/11/anigen-mac run

初回実行では依存関係と Metal 拡張をビルドし、Hugging Face から学習済み weight を取得します。完了済みの結果は再利用されます。推論をやり直す場合は ANIGEN_FORCE=1 を付けます。

使用したモデルとライセンス

使用条件は次のとおりです。

  • AniGen-mac commit: 4ff0baa
  • weight: VAST-AI/AniGen
  • SS Flow: ss_flow_duet
  • SLat Flow: slat_flow_auto
  • seed: 42
  • simplify ratio: 0.95
  • texture size: 1024
  • bake mode: fast

Hugging Face のモデルリポジトリは MIT License と表示されています。AniGen 自体のソースコードも MIT License です。

ただし、リポジトリ内の全依存物が一律に MIT という意味ではありません。THIRD_PARTY_LICENSES.md では、FlexiCubes は Apache-2.0、CUDA 用 CUBVH の一部は非商用・研究用途限定とされています。今回の Mac 推論は CUBVH ではなく Metal 用の mtlbvh などを使い、AniGen の README でも CUBVH は学習用で推論には不要と説明されています。実際に利用・配布する場合は、生成物の用途を含め、使用する依存物と最新版の条件を個別に確認してください。

AniGen の仕組み

処理の流れを短くすると、次の3段階です。

  1. 入力画像から背景を除き、画像の特徴を読み取る
  2. Sparse Structure で大まかな3D構造を作り、Structured Latent で形状・骨格・skinningを詳しく生成する
  3. FlexiCubes で内部の数値場から三角形の表面を取り出し、GLBへ書き出す

Sparse Structure は「粗い3Dの設計図」、Structured Latent は「細部を持った内部表現」と考えるとわかりやすいです。FlexiCubes は、その内部表現から実際に表示できる三角形 mesh を作る処理です。

AniGen の特徴は、形状を作った後に別モデルで骨を付けるのではなく、Shape、Skeleton、Skin の3つを同じ空間上の S³ Fields として一緒に扱う点です。これにより、形と骨格の整合した asset を直接作ることを狙っています。

検証結果

MacBook Pro(Apple M1 Max、64 GB)で実行しました。

入力 結果 時間 mesh抽出時の形状 最終成果物
miineko1 成功 751秒 358,370 vertices / 716,820 faces 9,854 vertices / 14,427 triangles / 10 joints
miineko2 失敗 879秒 1,866,415 vertices / 0 faces なし

成功したマスコット画像

入力画像、背景除去後、生成mesh、skeletonの比較

mesh.glbskeleton.glb は GLB 2.0 として読み込めました。rigged mesh には1 mesh、1 skin、10 jointsがあり、skinningに必要な JOINTS_0WEIGHTS_0 も含まれていました。animation clipは入っていません。

入力に見えない背面は前面より単純ですが、正面の形と色は概ね反映されています。生成結果を一周して確認できるターンテーブル動画も用意しました。これはカメラを回した確認用動画で、骨を動かしたanimationではありません。

失敗した人物イラスト

入力画像と失敗位置の比較

画像のsamplingは完了しましたが、FlexiCubes が頂点を作った後、三角形の面が0になりました。そのため、後段のmesh簡略化処理が Input mesh for decimation must be all triangles で停止し、GLBは生成されませんでした。同じ seed の再試行でも0 facesが再現しています。

表面が最初から存在しなかったのかを調べるため、FlexiCubes の直前と直後を計測しました。

scalar values:           16,974,593
finite values:           16,974,592
negative values:            821,173
positive values:         16,153,420
surface cubes:            1,470,942
surface edge references:  7,657,618
output vertices:           1,866,415
output faces:                      0

正と負の値があり、約147万個の表面候補も見つかっています。つまり「表面の手掛かりがなかった」のではなく、候補から三角形を決める段階ですべての面が失われました。

失敗の考察

確認できた事実は、約1,678万個の cube を処理したケースで、表面候補と頂点は作られたのに面が0になったことです。また、一部の試行では MPS の command-buffer error も記録されました。

ここからは推測ですが、大規模なindexingを行う FlexiCubes の処理が MPS 上で正しく完了せず、case判定または三角形化の段階で破綻した可能性があります。未修正の AniGen-mac では大きなboolean maskのindexingで範囲外エラーになったため、labでは有効なindexへ明示変換する小さなpatchを当てています。このpatchで1枚目は完走しましたが、2枚目の0-face問題までは解消できませんでした。

2枚目は、1枚目より細い手足、髪、衣服、曲げた脚を含みます。この複雑さが大規模な中間データにつながった可能性はありますが、入力が直接の原因だと断定できるだけの比較数はありません。

検証環境

machine: MacBook Pro (Apple M1 Max, 64 GB)
OS: macOS 26.5.1, arm64
Xcode: 26.6
Metal compiler: 32023.883
Python: 3.10.18
PyTorch: 2.12.0 (MPS available)
NumPy: 1.26.4
Pillow: 12.3.0

checkpointだけで約20 GBあり、初回準備は軽くありません。また、今回は外部motionの適用、骨を動かしたときのskinning品質、別モデルやparameterの比較までは行っていません。

検証後の感想

1枚の画像から、形だけではなく骨格とskinningまで入ったGLBをMac上で作れたのは面白い結果でした。成功例はそのまま3D viewerで確認でき、プロトタイプの素材作りには使えそうです。

一方で、2枚中1枚の成功なので、まだ「画像を渡せば安定してassetになる」とは言えません。失敗が十数分後に起き、初回に約24 GB必要な点も、気軽なツールとしては重いです。次は、画像のリサイズや切り抜き、別のFlow variantで中間データ量と成功率がどう変わるかを試したいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?