見出し画像

MotionGPT で作ったモーションを任意の 3D モデルに割り当てて動かす

MotionGPT でモーションを生成し、Blender 上で 3D モデルに適用して動かしてみた。


モーション生成

概要

テキストからモーションを生成する技術。
行動を表すテキストを再現するようなモーションが得られる。

A person is walking forwards, but stumbles and steps back, then carries on forward.
日本語訳:その人は前に歩いていたが、つまずいて一歩後ろに下がり、その後また前に進み続けた。

https://motion-gpt.github.io/
生成されたモーション(動画はコチラ

様々な手法

Motion Diffusion Model や text-to-motion 等様々な手法があり、Awesome-Video-Diffusion リポジトリに手法がまとまっている。
基本的には拡散モデルを用いている例が多いが中にはモーションマッチング等も存在する。
いくつか動かしたが、自身の Mac 環境で最も簡易に動いた MotionGPT を今回は利用する。

MotionGPT

LLM を用いた手法。
入力したモーションに対する説明(Motion-to-Text)や QA、モーションの生成(Text-to-Motion)が可能。

モーションをトークンとして取り扱っている。

https://motion-gpt.github.io/

MotionGPT でモーション生成

以降、環境は全て Mac Studio 2023(Apple M2 Ultra)上で行っている。

セットアップ

README に記載の通り進める。

実行

生成したいモーションを表すテキストを準備する。
今回は「前方に進んだが躓いて転ぶ」モーションを生成してみる。
モデルへのテキスト例を Few-shot に GPT-4 くんに依頼する。

You:
Text2Motionモデルを使ってモーションデータを生成しています。
「前方に進んだが躓いて転ぶ」モーションを生成したいです。
モデルへの入力例は下記のようなテキストになっており、例を参考に入力テキストを生成してください。

Please create a motion that represents the power of the figure takes a few slighly hurried steps without raising their arms, it looks they are about to start running but haven't quite yet begun. to create a better world for all.

I need a motion that represents the power of a man steps forward, then picks something up with his right hand, then with his right hand, brings them close together, and sets them back down in the same order. to create progress. Can you generate it for me?

Describe the movements of a person walking down a flight of stairs in person walks up then takes a large step to their left and then goes back onto the same path they were on.

---

ChatGPT:
To generate a motion that includes the action of someone moving forward, stumbling, and then falling, you can formulate your input text for the Text2Motion model like this:

"I need a motion that depicts a person advancing quickly forward. As they move, they suddenly stumble on an obstacle and lose their balance. The sequence should capture them trying to regain stability but ultimately falling down. The motion should realistically show the struggle and the fall, emphasizing the suddenness and impact of the stumble."

This description clearly outlines the desired motion sequence, focusing on the initial fast movement, the stumble, and the consequent fall. This detailed input should help the Text2Motion model generate a realistic animation of the sequence.

I need a motion that depicts a person advancing quickly forward. As they move, they suddenly stumble on an obstacle and lose their balance. The sequence should capture them trying to regain stability but ultimately falling down. The motion should realistically show the struggle and the fall, emphasizing the suddenness and impact of the stumble.」が得られたので、こちらをモデルへの入力テキストにする。
実行方法も README に記載の通り。

python demo.py --cfg ./configs/config_h3d_stage3.yaml --example 作ったモーションテキスト.txt

実行すると results ディレクトリ以下に .npy ファイルが生成される。
.npy はモーションを表す Numpy の配列になっており、Motion Diffusion Model 等も同様の形式で吐かれる。

.bvh に変換

得られた .npy を Blender で読み込むために変換が必要。
いくつか方法はあるが、今回は下記の Issue を参考に .bvh に変換する。

Blender に読み込んでみる。

Blender で表示

転べてはいない(恐らくデータセットに転倒データがない)が躓いている感じはある。

3D モデルにモーションを適用

対象 3D モデル

今回は Mixamo から拾ってきた適当なモデルにモーションを適用する。

Mixamo > Characters > Steve

Simple-Retarget-Tool-Blender

リターゲティングは Simple-Retarget-Tool-Blender を利用した。
ポチポチでリターゲティングができるので便利。

適用した結果

モーションをモデルに適用できた。

3D モデルへの適用

この記事が気に入ったらサポートをしてみませんか?