CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Ready Player Meのキャラクタモデルに複数のアニメーションを割り当てて、Babylon.js で再生する方法

先日Babylon.js のGUI Editorを試した頃から、何かのゲームっぽいものを一通り作成しようと思い、キャラクタを動かすタイプのゲーム開発を進めています。

今回は、キャラクタに複数のアニメーションを割り当ててBabylon.js で表示する方法を解説します。

使用した環境

・Blender 2.9.3

1. Babylon.jsで再生可能な、アニメーション付きのキャラクター3DCGモデルを作るには

他の方法でもよいのですが、一例としてこちらに書かれている手順でやるのがおすすめです。

doc.babylonjs.com

このドキュメントでは、AdobeのMixamoというサービスを使ってキャラクタアニメーションをつける方法を紹介しています。

今回はReady Player Meを使ってキャラクターを生成しMixamoでアニメーションを割り当てました。

2. 具体的な手順

2.1 Ready Player Meを使ってキャラクターモデルを生成

readyplayer.me

Ready Player Meを使うと、人型キャラクターアバターを自分の写真から簡単に生成できます。 (写真がなくても生成できます)

まず、トップページの「Create Avatar」をクリックして、自分のメールアドレスを登録します。

Top page of Ready Player Me

すると自分のメールアドレスに認証コードが届くのでこれでサインインします。

サインインすると、先ほどの「Create Avatar」のボタンが「Enter Hub」に変わるので、「Enter Hub」をクリックします。

Login top page of Ready Player Me

次に表示されたページで、「My Avatar」 > 「Create New Avatar + 」をクリックすると新しいアバターを作成することができます。

作成されたアバターは My Avatarのページに表示されます。この中でダウンロードしたいアバターを右クリックして、"Download avatar .glb"を選び、glb形式でダウンロードします。

My avatar lists on Ready Player Me

2.2 Blenderを使ってglbをfbxとして出力

AdobeのMixamoがglb非対応なのでfbxに変換します。なぜかテクスチャ情報がなくなってしまったのですが、Mixamoで使うには問題ないのでこのまま進めます。

ちなみに、私の環境だけかもしれませんが、以前書いたこちらの方法を使ってもダメでした。

www.crossroad-tech.com

2.3 Adobe Mixamoを使ってfbxにアニメーションを割り当て

Mixamoとはこちらです。AdobeIDとアニメーションを割り当てたいfbxモデルがあれば無料で使えます。

https://www.mixamo.com/#/

Mixamoの使い方については、例えばこちらにまとまっています。

signyamo.blog

自分の3DCGモデルに複数のアニメーションを割り当てたい場合、running、idle、walkingなどを割り当てるたびに右上のDownloadを選択して、running.fbx、idle.fbx、walking.fbxを個別に取得します。

ちなみに、runningとwalkingなど、移動に関するアニメーションは、画面上でInPlaceを選択してから出力します。

Mixamo animation with InPlace

これを選択しないと、アニメーションをループ再生させるたびにキャラクターの位置が開始時に戻ります。

A walking animation without inplace option on Mixamo

そのため、Babylon.js Editorでキー操作で移動するとき、常に初期位置に戻ってしまい移動ができなくなります。

2.4 Blenderでアニメーション付きfbxを読み込み、NLAで元々のglb形式のキャラクタに割り当て

2.1でReady Player Meから生成したglb形式の3DCGモデル、2.3でMixamoから生成したfbx形式の3DCGモデルをBlenderにインポートします。

全てインポートしたらfbx形式のモデルの階層構造を開き、Animation以下の名称をわかりやすいものに変更します。
(例:walking.fbxをインポートした結果の場合、walkingと変更)

変更したらそのfbxを全て削除してもOKです。理由はよくわかりませんがインポートしたfbxを消してもアニメーション情報はBlender上に残っているためです。

全て名称変更、削除が完了したら、[1]アニメーションをつけたいモデルを選択して、画面下で[2]メニューを開き、[3] NLAを選択します。

How to open NLA on Blender 2.93

NLA (NonLinear Animation) を使うと、1つの3DCGモデルに複数のアニメーションを割り当てることができます。

Ready Player Meで生成した3DCGモデルにはアニメーションが何も入っていないので、まずはNLAの画面から、Add > Include Selected Objectsを選択します。次に、Add > Add Action Stripを選ぶと、先ほど追加したアニメーションデータが候補に並ぶので1つずつ追加します。

一通り追加するとこのようになります。(ここでは別の検証のため、boneをInFrontオプションで手前に表示していますが、アニメーション割り当て作業には不要です)

Aligned animation on Blender2.93

ここまでできたら、BlenderのCollectionの中にキャラクタのデータが入っていることを確認し、File > Export > glb 、Active Collectionを選択してglbで出力します。

3. Babylon.js Sandboxで確認してみる

Babylon.js Sandboxとは、3DCGモデルをBabylon.jsの環境で確認できるサイトです。

Babylon.js Sandbox - View glTF, glb, obj and babylon files

3DCGモデルをアップロードするだけで表示を確認、glbの編集やexportなどもできます。

先ほど生成した3DCGモデルをアップロードしてみました。右下に付与したアニメーションが示され、ここを変更することで異なるアニメーションが再生できることが確認できます。

Attached animation glb data on Babylon.js Sandbox

4. おわりに

思ったより長くなったので、Babylon.js Editorで読み込んでキャラクタを動かす方法などは次回記載します。