文章から3Dモーションを作って MMD モデルを動かす(HY-Motion 1.0 × Blender、RTX 5070)
- HY-Motion
- MMD
- Blender
- モーション生成
- RTX 5070
AI 動画モデル(Wan 2.2)で、イラストを数秒の動画にする遊びをしていました。絵柄や顔はかなり保たれるのですが、手に持った物が2つに分かれたり、思ったより動かなかったりと、細かいところを狙いどおりにできない のが悩みでした。
そこで方向を変えて、3D の MMD モデルを、AI で作ったモーションで動かす ことにしました。体の形はモデルが保証してくれるので崩れません。AI に任せるのは「どう動くか」だけです。
3日ほど試して、文章から作ったモーションでキャラクターが芝居をするところまでは来ました。やったことと、分かったことをまとめます。
環境:Windows 10 / RTX 5070(VRAM 12GB)/ Blender 5.2 + mmd_tools / HY-Motion 1.0
全体の流れ
文章(英語)
→ HY-Motion 1.0:人の動き(SMPL 22関節の回転+腰の移動)を生成
→ MMD のボーンに移し替え
→ Blender:髪・尻尾の物理、表情、ライト、カメラ
→ 1080×1920・30fps の縦動画
モデルには、ゼンレスゾーンゼロの ジェーン を使いました。模之屋(aplaybox)で配布されている公式の MMD モデルです。配布物の readme では、再配布・パーツの流用・18禁・商用利用が禁止されています。今回は個人の検証として動かしています。
HY-Motion 1.0 を 12GB で動かす
HY-Motion 1.0 は、テンセントが公開している 文章から3Dの人の動きを作るモデル です。モーションキャプチャーのデータで学習していて、出力は SMPL という人体モデルの関節の回転です。
重いのは文章の読み取りで、Qwen3-8B(16GB)と CLIP を使います。そのままでは 12GB に載りません。そこで、
- 文章の読み取り(Qwen3-8B と CLIP)は CPU の bf16 で回して、特徴量だけ作る
- 作った特徴量を渡して、動きを作る本体(DiT)だけ GPU に載せる
と分けました。
| モデル | 長さ | 生成時間 | VRAM ピーク |
|---|---|---|---|
| Lite | 4秒×2本 | 7.6秒 | 3.4GB |
| Full(1.0B) | 9.8秒×2本 | 15秒 | 8.0GB |
文章の読み取りは、モデルの読み込み込みで約2分かかります。同じ文で何度も作り直すので、特徴量は1文につき1回だけ作ってファイルに保存 するようにしました。
なお、ライセンスは Tencent Hunyuan Community License です。EU・英国・韓国では使えないことや、公開するときは機械生成だと明記することなどの条件があります。
MMD のボーンに移す
SMPL の関節の回転を、MMD の「上半身」「腕」「ひざ」などのボーンに割り当てます。ハマったのは次の点です。
- 座標の向き:SMPL は Y が上、Blender は Z が上。世界座標での回転を変換してから当てる
- ボーンごとの軸:MMD のボーンはローカル軸の向きがまちまち。回転はワールド軸で決め、
rest⁻¹ @ q @ rest(rest はボーンの休止姿勢の行列)でローカルに直す - 腕の休止姿勢:SMPL は T 字、MMD は腕を斜めに下ろした姿勢。腕だけ T 字との差を補正する
- 足 IK:MMD の足 IK が生きていると回転を上書きするので、ミュートする
- 腰の高さ:出力の
keypoints3dは動いた後の位置ではなく、休止姿勢での相対座標でした。そのまま割り算に使ったら歩幅が900倍になり、キャラクターが画面から消えました
ボーン名がそろっている MMD モデルなら、同じ移し替えがそのまま使えます。
それっぽく見せる:物理・表情・画作り
動きを当てただけだと、髪や尻尾が板のように固まって、頭と一緒に傾くだけです。
- 物理:mmd_tools で剛体を組み、焼き込み(ベイク)します。1コマ目に休止姿勢を置き、30コマの助走をとってからモーションを始めると、髪や尻尾が重力で自然に垂れた状態から動き出します
- 表情:まばたき(2〜4.5秒ごと)と、笑顔・ウィンク・びっくり・困り顔などをモーフで入れます。プロンプトと一緒に「何秒から何秒までどの表情か」を書いておきます
- 画作り:輪郭線、床と影、逆光、指の自然な曲げ、カメラの追従

モーションの良し悪しとは別に、床と影があるだけで「そこに立っている」感じが一気に出ます。
ARDY と比べた
NVIDIA の ARDY(リアルタイムで動きを作るモデル、Kimodo の後継)も同じ流れに載せて比べました。4つの小さな場面(遅刻・発見・贈り物・すねる)を、それぞれ動きの順番どおりに書いて作ります。
たとえば「発見」は、こんな文です。
A young woman looks around to her left and then to her right, suddenly notices something in front of her, jumps back slightly in surprise, then raises both hands and waves them happily above her head.


HY-Motion は1文の中の順番をかなり守ってくれました。ARDY は場面ごとにプロンプトを時刻で切り替えても、前半の静かな動きに引っ張られて、後半の動きがなかなか出ません。ほかの場面でも、走ったあと立ち尽くす、手を合わせたまま、腕組みのまま、といった具合でした。
ARDY は文章の読み取りに Llama 3 系のモデル(15GB)を使い、C++ 拡張のビルドも必要で、動かすまでの手間も大きめです。今回は HY-Motion を主力 にしました。
狙った動きに近づける
HY-Motion でも、1文だけでは「前半はただ立っているだけ」「うつむくはずが深いお辞儀になる」といったズレが出ます。そこで、生成のループを自分で書き直しました。
HY-Motion はフローマッチングという方式で、ノイズから50ステップかけて動きを作ります。中間の状態(潜在)が、正規化された モーションそのもの(腰の位置・各関節の回転・位置)になっているので、途中で手を入れやすいのです。公式の生成と同じループを手で回して(同じシード・同じ文で結果が一致することを確認)、次の機能を足しました。
- 時刻ごとのプロンプト切り替え:0〜2.5秒はこの文、2.5秒からはこの文、というように、コマごとに別の文の結果を0.5秒かけて混ぜる
- 区間の作り直し:気に入らない区間だけ作り直し、ほかの区間は毎ステップ元に戻す。前後はそのままつながる
- 決めポーズの固定:指定した時刻に、別に用意したポーズを挟む。生成の前半80%だけ、そのポーズへ引き寄せる
決めポーズは、Blender でモデルに直接ポーズを付けて書き出す方法と、AI で描いた全身イラストから Meta の SAM 3D Body で姿勢を推定する方法の両方を作りました。どちらも決めた時刻にそのポーズが出ます。ただ、イラスト経由のほうは動きのガタつきが増えて、見た目は今ひとつでした。
確認には、Blender で描画する前に 棒人間の早見表 を出しています。正面と横からの姿勢を並べ、足すべり(skate)・ガタつき(jitter)・浮き(float)を数値で出します。描画は1本数分かかるので、まずこれで良さそうなシードを選びます。

一番効いたのは「モデルの得意な書き方」
いろいろ作り込みましたが、結局いちばん効いたのはプロンプトの書き方でした。
はじめは、贈り物の場面を「A young woman … shyly … as if offering a small gift」のように、感情や物 を入れて書いていました。でも HY-Motion の README には、感情や物、見た目の説明には対応していないと書かれています。学習データ(モーションキャプチャーの説明文)に合わせて、「A person + 手足と頭の動きだけ」 で書き直しました。
0.0秒〜 A person stands with both hands behind the back and shifts weight from one foot to the other.
2.5秒〜 A person stands with both hands behind the back and lowers the head to look down.
4.5秒〜 A person takes one step forward and extends both arms forward with palms up.
6.5秒〜 A person holds both arms forward and tilts the head to the right.


4つのシードすべてで狙いどおりの流れになり、深いお辞儀も浅いうつむきに収まりました。ガタつきの値も下がっています。さらに、3秒・1動作 に切った短いカットは、とても安定しました。
「照れながら」のような気持ちは、モーションではなく 表情・カメラ・物理 の側で足す、と役割を分けるのが良さそうです。
後処理で足すべりを止める
生成したモーションは、立っているはずの足がわずかに滑ることがあります。そこで、numpy だけで後処理を書きました。
- 回転を少しだけ平滑化する(ガタつきを抑える)
- 足首が低い位置でほぼ止まっているコマを「接地中」とみなし、その間は 足の位置と向き を固定する
- 固定した足に届くように、股関節→ひざ→足首を2関節 IK で解き直す
足首の位置だけ固定するとつま先が滑ったので、向きも止めています。足すべりの値は、ある贈り物のモーションで 0.016 → 0.000、別のものでは 0.047 → 0.019 まで減りました(残りは実際に一歩踏み出している分です)。
やってみて分かったこと
- 12GB でも、文章の読み取りを CPU に逃がせば HY-Motion(Full)は動く
- 動きの崩れが許されない用途では、動画 AI より「3D モデル+AI モーション」のほうが扱いやすい
- モーション生成 AI には、学習データに合った書き方がある。感情や物を書くより、手足の動きだけを書く ほうが狙いどおりになる
- 長い1本より、短いカットを作ってつなぐほうが安定する
- かわいさ・感情は、表情・物理・カメラで足す
今は、短いカットを作ってつなぐ仕組みを試しているところです。ショート動画として出せるところまで来たら、また書きます。
この記事をシェア