AIゲーム開発研究室

2026-09-19 13:07:00

第8回 TripoリグにMixamo Actionは使えるのか

AIゲーム開発研究室

3Dモデル制作ドキュメント


第8回

TripoリグにMixamo Actionは使えるのか

― 骨格構造の検証とリターゲット実験 ―


研究代表 大川 博
主任研究員 Arc(ChatGPT)


はじめに

前回までの検証によって、Tripoでは3Dモデルにリグを設定し、プリセットActionを適用できることを確認した。

また、AIアニメーション機能を使用して、テキストによる指示からオリジナルActionを生成する実験も行った。

しかし、実際に生成されたActionには問題があった。

「3回ジャンプして喜ぶ」と指示したActionでは、ジャンプしようとする動作は確認できたものの、足は地面から離れなかった。

「まっすぐ前に走る」と指示したActionでは、キャラクターは前進したものの、動作そのものは走行ではなく歩行に近いものとなった。

さらに、手の部分が最初から不自然にねじれたActionも確認された。

ゲーム制作では、キャラクターに多様なActionが必要になる。

Tripoに用意されたプリセットActionだけでは選択肢が限られ、AIによるオリジナルAction生成についても、今回の実験では要求した動作を安定して生成することができなかった。

そこで今回は、

Tripoで生成したリグをそのまま使用し、豊富なActionを持つMixamoからアニメーションだけを利用することができるのか

を検証することにした。


1 MixamoのActionをCモデルへ適用する

まず、本物のMixamoからダウンロードしたダンスActionを使用した。

これを、TripoでリギングしたCタイプのパンタへBlender上で適用する。

ボーン名には、

mixamorig:Hips

mixamorig:Spine

mixamorig:LeftArm

など、Mixamoと同じ形式の名称が使用されている。

そのため、当初はMixamo Actionをそのまま利用できる可能性があると考えた。

しかし、実際にActionを適用すると、パンタは正常な位置にとどまらず、空間内を大きく飛び回った。

【画像配置①】
Mixamo ActionをCモデルへ適用し、パンタが大きく移動している状態


2 Hipsの位置情報を調べる

Blenderのグラフエディターで mixamorig:Hips を確認すると、位置情報がXYZ各軸に記録されていた。

そこで、Hipsの位置XYZを一つずつ無効化して動作を確認した。

一軸だけを停止してもパンタは動き続け、動き方だけが変化した。

最終的にXYZすべての位置情報を無効化すると、パンタはその場に固定され、ダンスを行うようになった。

しかし、新たな問題が確認された。

パンタの身体が傾いている。

さらに、ダンス自体も完全に崩壊しているわけではないものの、Mixamo本来のダンスと比較すると不自然だった。

【画像配置②】
Hipsの位置XYZを無効化し、その場でダンスしているCモデル
身体の傾きが確認できる画像


3 Blender・Mixamo間の座標系を疑う

ここで、MixamoからBlenderへ読み込んだモデルのArmatureを確認した。

Mixamo側では、

Rotation X = 90°

Scale = 0.01

となっていた。

一方、Tripoから読み込んだCモデルのArmatureは、

Rotation = 0°

Scale = 1.0

である。

この違いがActionの異常の原因ではないかと考えた。

そこでMixamo側Armatureに、

Ctrl+A → 回転とスケール

を適用した。

これによってMixamo側Armatureも、

Rotation = 0°

Scale = 1.0

となった。

【画像配置③】
変換適用前のMixamo Armature
Rotation X=90°/Scale=0.01

【画像配置④】
Ctrl+A適用後
Rotation=0°/Scale=1.0


4 座標変換後のActionを再検証する

変換を適用したMixamo Armatureでは、Hipsの位置XYZを無効化すると、本来のダンスを正常に踊ることができた。

そこで、この状態のMixamo Actionを改めてCモデルへ適用した。

しかし結果は変わらなかった。

Cモデルでは位置情報を有効にすると空間を飛び回り、位置XYZを無効化するとその場で踊るものの、身体が傾き、動作にも違和感が残った。

したがって、

Mixamo側ArmatureのX軸90°回転やScale 0.01だけが原因ではない

ことが確認された。


5 Mixamo純正骨格とTripo骨格を比較する

そこで、問題をAction側ではなく、骨格そのものから調べることにした。

Mixamo純正ArmatureとTripo CモデルのArmatureを、Blender上でレスト位置にして比較した。

Mixamo純正骨格はTポーズを基準としている。

一方、Tripo CモデルはパンタのAポーズに合わせて生成された骨格である。

パンタは人間とは大きく異なる体型を持ち、胴体が大きく、腕と脚が短い。

しかし、違いは単なる体型やTポーズ・Aポーズだけではなかった。

【画像配置⑤】
Mixamo純正Armatureのレスト位置・正面

【画像配置⑥】
Tripo CモデルArmatureのレスト位置・正面

【画像配置⑦】
Tripo CモデルArmatureのレスト位置・側面


6 Bone Rollを比較する

Blenderの編集モードで、両方のArmatureのBone Rollを確認した。

最初に mixamorig:Hips を比較した。

Mixamo純正骨格では、

Roll = 0°

だった。

一方、Tripo Cモデルでは、

Roll = −90°

となっていた。

【画像配置⑧】
Tripo Cモデル Hips:Roll −90°

【画像配置⑨】
Mixamo純正 Hips:Roll 0°

次に mixamorig:Spine を確認した。

Tripo Cモデルでは、

Roll = −99°

Mixamo純正骨格では、

Roll = 0°

だった。

さらに mixamorig:LeftArm を確認すると、

Tripo Cモデルでは、

Roll = 29°

Mixamo純正骨格では、

Roll = −180°

だった。


7 同じボーン名でも同じ骨格ではない

今回確認した結果をまとめると、次のようになる。

ボーン Tripo Cモデル Mixamo純正
Hips −90°
Spine −99°
LeftArm 29° −180°

この結果は重要である。

TripoのArmatureには mixamorig: というMixamoと同じ形式のボーン名が使用されている。

しかし、

ボーン名が同じであることと、骨格のローカル座標系が同じであることは別である。

Actionでは、各ボーンの基準姿勢に対する回転情報が使用される。

そのため、同じActionデータを与えても、ボーンの基準方向やローカル軸が異なれば、最終的な姿勢も異なる。

Mixamo ActionをCモデルへ直接適用した際に、

「一応踊っているが、身体が傾き、動作が不自然になる」

という現象が起きた理由として、この骨格の違いが大きく関係していると考えられる。

【画像配置⑩】
Tripo Cモデル Spine:Roll −99°

【画像配置⑪】
Mixamo純正 Spine:Roll 0°

【画像配置⑫】
Tripo Cモデル LeftArm:Roll 29°

【画像配置⑬】
Mixamo純正 LeftArm:Roll −180°


8 Actionを直接適用せず、動作を転送する

Mixamo Actionを直接適用する方法では正常に動作しない。

そこで次に、

Mixamo純正骨格を中継して、実際の動作をTripo骨格へ転送する

方法を試した。

Blenderのボーンコンストレイント、

Copy Rotation

を使用する。

まずCモデルの mixamorig:LeftArm にCopy Rotationを設定した。

ターゲットにはMixamo純正Armatureを指定し、転送元ボーンとして、

mixamorig:LeftArm

を指定した。

座標空間は、

ターゲット:ローカル空間

オーナー:ローカル空間

とした。

Mixamo純正ArmatureへダンスActionを設定すると、CモデルのLeftArmもその動きに追従した。

Copy Rotationの影響を、

1.000 → 0.000

にするとLeftArmは停止し、

0.000 → 1.000

へ戻すと再び動いた。

これによって、

Mixamo骨格からTripo骨格へ動作を転送できる

ことを確認した。

【画像配置⑭】
Cモデル LeftArmへCopy Rotationを設定した画面


9 左右の腕とHipsへ動作を転送する

同じ方法を、

mixamorig:RightArm

mixamorig:LeftForeArm

mixamorig:RightForeArm

へ設定した。

すべて正常に動作した。

さらに全身の基準となる、

mixamorig:Hips

にもCopy Rotationを設定した。

HipsもMixamo側の動きに追従した。

ここまでの実験によって、

Mixamo ActionそのものをTripo骨格へ直接適用するのではなく、Mixamo純正骨格の動きをCopy Rotationで転送すれば、Tripo骨格を動かせる

ことが確認された。

【画像配置⑮】
左右上腕・前腕・HipsへCopy Rotationを設定し、パンタが動いている状態


10 全身へのCopy Rotationを自動設定する

しかし、全身のボーンへ一つずつCopy Rotationを設定する方法は現実的ではない。

そこでBlenderのPythonスクリプトを使用した。

処理内容は単純である。

Tripo側Armatureのボーン名を調べ、Mixamo側Armatureに同じ名前のボーンが存在した場合、そのボーンへ自動的にCopy Rotationを設定する。

すでに手作業で設定済みのボーンについては、重複してコンストレイントを追加しないようにした。

これによって、同名ボーンへ一括してリターゲット設定を行った。

【画像配置⑯】
Blender Scripting画面
Copy Rotationを一括設定するPythonスクリプト


11 全身リターゲットの結果

スクリプト実行後、Cモデルの全身がMixamo側のActionに追従するようになった。

Mixamo Actionを直接Cモデルへ適用した場合と比較すると、動作は大幅に改善された。

つまり、

TripoリグへMixamoの動作をリターゲットすること自体は可能

である。

しかし、問題は完全には解決しなかった。

パンタの身体には、依然として傾きが残っていた。

【画像配置⑰】
全身Copy Rotation設定後、Mixamo Actionに追従するパンタ


12 HipsとSpineを検証する

身体の傾きがHipsによって発生している可能性を考え、HipsのCopy Rotationの影響を、

1.000 → 0.000

へ変更した。

しかし、傾きは改善するどころか悪化した。

同様にSpineのCopy Rotationを無効化した場合も、姿勢はさらに悪化した。

したがって、身体の傾きは単純にHipsまたはSpineの一つのボーンが原因となっているわけではない。

Mixamo純正骨格とTripo骨格では、レスト姿勢、Bone Roll、各ボーンのローカル軸などが異なっている。

全身を完全に一致させるには、さらに骨格間の基準姿勢を補正する処理が必要になると考えられる。


13 技術的には可能。しかし実制作には適さない

今回の実験によって、

Mixamo ActionをTripoリグへ直接適用する方法では正常な動作にならない

ことが確認された。

一方、

Mixamo純正骨格を中継し、Copy Rotationによって動作をリターゲットする

方法では、動作を転送することができた。

つまり、

技術的には可能である。

しかし、そのためには、

Mixamo純正骨格を用意し、

Actionを設定し、

Tripo骨格との対応を作り、

全身へリターゲット設定を行い、

さらに骨格差による姿勢の補正を行う必要がある。

ゲーム制作の実用工程として考えた場合、この方法を採用する合理性は低い。


14 TripoのオリジナルActionも実用には至らなかった

ここで、今回の問題をMixamoとの互換性だけに限定して考えることはできない。

前回の実験では、Tripo自身のAIアニメーション機能も検証している。

しかし、

「3回ジャンプして喜ぶ」

という指示では、ジャンプ動作を行おうとはするものの、足が地面から離れなかった。

また、

「まっすぐ前に走る」

という指示では、キャラクターは前進したが、実際の動作は走行ではなく歩行だった。

さらに、手が不自然にねじれたActionも生成された。

ゲーム用Actionでは、

歩く

走る

ジャンプする

着地する

喜ぶ

攻撃する

など、動作の違いそのものがゲームの機能に直結する。

「走る」と指示して歩くのであれば、ゲーム用の走行Actionとして使用することはできない。

したがって今回の検証では、

TripoのAIによるオリジナルAction生成も、ゲーム制作に使用できる段階には至っていない

と判断した。


15 Tripoでリグを設定する意味はあるのか

ここまでの結果をまとめる。

Tripoではリグを生成できる。

Tripo内のプリセットActionを適用することもできる。

しかし、ゲーム制作に必要なActionの種類を考えると、Tripo内に用意されたActionだけを使用する方法では選択肢が不足する。

AIによるオリジナルAction生成についても、今回の実験では要求した動作を安定して生成できなかった。

そこでMixamoの豊富なActionを使用しようとすると、今度はTripoリグとの互換性の問題が発生する。

直接適用では正常に動作せず、リターゲットと追加補正が必要になる。

そうなると、

Tripoでリグを生成し、そのリグを維持するために複雑な変換処理を追加する意味がない。


16 今回の結論

今回の検証では、Tripoのリギング機能そのものが動作しないわけではない。

リグは生成できる。

Tripo内のActionを使用してキャラクターを動かすこともできる。

しかし、本研究の目的は、

「キャラクターを動かすことができるか」

だけではない。

実際のゲーム制作に使用できるかどうかである。

今回の実験では、

Tripoに用意されたActionだけでは選択肢が不足する。

AIによるオリジナルAction生成も、要求した動作を安定して生成できない。

Mixamo ActionをTripoリグへ直接適用すると正常に動作しない。

リターゲットすれば動作転送は可能だが、追加設定と補正が必要になる。

という結果になった。

したがって、本研究では、

TripoによるリギングおよびAction制作を、ゲーム制作工程から外す。

Tripoの役割は、

3Dモデル生成

高精細モデル生成

ポリゴン削減・軽量化

までとする。

そして、

リギングおよびActionについてはMixamoを使用する。

今回の検証結果から、

Tripoでリグを設定する必要はない

と判断した。


17 次回の検証

次回は、リグを持たないCタイプのパンタをMixamoへアップロードする。

そこで、

MixamoによるAuto Rig

を行い、

MixamoのActionを設定する。

その後Blenderへ読み込み、モデル・リグ・Actionが正常に動作することを確認する。

MixamoによるAuto RigとAction設定は、すでに確立された一般的な制作方法であり、今回のTripoリグのような詳細な検証を行うこと自体が目的ではない。

しかし今回、

TripoのリグとActionをゲーム制作工程から外す

という結論に至った以上、その代替工程としてMixamoを採用できることを実際に確認し、制作ワークフローとして記録しておく必要がある。

次回は、

Tripoで3Dモデルを制作し、MixamoでリグとActionを設定する

 

という新しい制作工程を検証する。