😺

WebカメラからAIがモーションを作ってくれるPlask モーションデータをUE5で使用する

2022/01/19に公開
3

VideoからAIが解析してMotionデータを作成してくれるサービス「Plask」

VideoからAIが解析してMotionデータを作成してくれるサービス「Plask」

https://80.lv/articles/plask-a-new-free-tool-for-extracting-3d-motion-from-videos/

Plaskで作成したモーションデータをUE5のMannequinで使えるようにします。

https://twitter.com/posita33/status/1483746174599598083

ProjectをGitHubに公開しました。

UE5のProjectをGitHubに公開しました。
よかったら使ってください。
https://github.com/posita33/PlaskToUE5

Plaskにサインアップする

Plaskは無料で使用できます。
Plaskを使用するためにSignUpします。

https://plask.ai/

Googleアカウントかメールアドレスでサインアップできます。

この後にアカウント名を決めるウィンドウで、アカウント名を設定します。

PlaskでWebカメラからモーション動画を撮影する

トップページの[Get Started]をクリックします。

右上の[カメラアイコンを]クリックします。

灰色になっている箇所にWebカメラの映像が写ります。
Webカメラの選択は、右上の[Camera]から選択します。
Webカメラの設定できたら、「録画ボタン(赤丸)」をクリックします。

録画を終了するには再び「録画ボタン(赤丸)」をクリックします。
録画が完了するとプレビューが表示されるます。
一番下のタイムラインでアニメーションにしたい範囲を指定します。
範囲が指定できたら、「Extract Motion」をクリックします。

Motionの抽出が始まります。大体の完了時間が表示されます。

Motionの抽出が終わると、Motion名を設定するダイアログが表示されます。
Motion名を設定して、[OK]ボタンをクリックします。

Plaskでスマホ動画からモーションデータを抽出する

動画からモーションデータを抽出する手順

動画からのモーションデータ抽出はPlask公式チャンネルの動画を参考にしました。
ありがとうございます!
https://www.youtube.com/watch?v=pzpbS5G71MU

[Library]の[+]ボタンをクリックします。

モーションを抽出する動画を選択します。
幅の長い方を横と判断するので、横長動画を選択してください。

抽出を確認するダイアログが表示されるので、[Confirm]ボタンをクリックします。

Webカメラの時と同様です。
抽出する範囲を選択し、[Extract Motion]ボタンをクリックします。

Motion名を設定して、[OK]ボタンをクリックします。

抽出にかかる時間が表示されます。

Libraryパネルに設定したMotion名が追加されました。

PlaskのMannequinに撮影したアニメーションを反映する

Motionの抽出すると最初の画面に移動します。
左側の「Library」から「Mannequin_glb」をViewportにDrag&Dropします。

さきほど設定したMotion名を「Mannequin_glb」にDrag&Dropします。

「Mannequin_glb」に入った「Motion名」をViewportの真ん中のMannequinにDrag&Dropします。

タイムラインの再生ボタンをクリックすると、Motionが再生されます。

PlaskのモーションデータをFBXにExportする

「Mannequin_glb」内のMotion名を右クリック > Export

表の設定をして、[Export]ボタンをクリックします。

Property Value
Motion bindPose
Format FBX

Exportまでかかる時間が表示されます。

Exportが完了するとFBXがダウンロードされます。
名前を「SK_PlaskMannequin.fbx」に設定します。

次に、Motion名を設定したMotionをExportします。
「Mannequin_glb」内のMotion名を右クリック > Export

表の設定をして、[Export]ボタンをクリックします。

Property Value
Motion (設定したモーション名)
Format FBX

名前を「SK_PlaskMannequin_(Motion名).fbx」に設定します。

Plaskのマニュアル

他にもPlask上でできることがあるので、時間を見つけて試してみます。
https://plasticmask.notion.site/User-guide-ac4bba1b75384c309e7a24e6542454ba

YouTubeチャンネルにチュートリアル動画が上がっています。
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UClHOCrckvQEcrkqH4A7PA5A

UE5でMannequinにPlaskのMotionをImportする

UE5にPlaskからExportしたMotionをImportします。

UE5のProjectを作成する

UE5 EAでプロジェクトを作成します。
「SK_Mannequin」を使用するので、「ThirdPerson」テンプレートを選択します。

プロジェクトが作成されたら「Plask」のMotionインポート用のフォルダを作成します。

BasePoseとなるFBX「SK_PlaskMannequin.fbx」をImportする

まずは、BasePoseとなるFBX「SK_PlaskMannequin.fbx」をImportします。
作成した「Meshes」フォルダにImportします。

設定を変えずに[Import]ボタンをクリックします

BasePoseとなるMeshとSkeltonがImportされました。

Plaskで作成したMotionをImportする

Plaskで作成したMotion「SK_PlaskMannequin_(Motion名).fbx」を「Animations」フォルダにImportします。

[Import Mesh]のチェックを外します。

[Skelton]に「SK_PlaskMannequin_Skelton」を設定します。

[Import Rotation]のXに[90.0]を設定します。
設定を忘れても、あとで直し方を解説します。

MotionがImportされました。
ダブルクリックして開くと、Plaskで作成したMotionが再生されます。

Import RotaionのX:0.0でImportした場合

FBX Importの際に[Import Rotation]の設定しない場合の対処法です。

ImportするとMotionのMannequinが寝っ転がった状態でアニメーションします。

左側の設定から、[Import Rotation]のXに[90.0]を設定します。
[Reimport Animation]ボタンをクリックします。

MotionのMannequinが立った状態で再生されるようになります。
[Save]ボタンをクリックします。

UnityのYUpのモデルやMotionをインポートした対処法が役に立ちました。
PlaskはUEのMannequinが使われていますが、中身はUnityで使用されるように作られています。

すべて保存する

ここで一度すべて保存しましょう。

UE5でMannequinにPlaskのAnimationをリターゲットする

Plaskで作成したMotionやBasePoseのFBXがImportできたので、PlaskのMotionをUE5のMannequinで動くようにしましょう。

PlaskのMannequinはMixamoに似ている

UnrealEngineのSK_MannequinとPlaskのMannequinのSkeltonのTree構造を比較しました。
Plask側はUnityの「Unity Humanoid Avatar」ですぐに動きそうな構造をしています。
https://virtualcast.jp/wiki/unity/humanoid/introduction

MixamoのアニメーションをUnrealEngineで動かす方法が一番近いと判断しました。

MixamoからUE5(UE4)へアニメーションをリターゲットして使用する方法」を参考にさせていただきました。
ありがとうございます!

https://zenn.dev/daichi_gamedev/books/unreal-engine-5/viewer/mixamo-to-ue

UnrealEngine5の教科書」素晴らしいです。
現在ZennでBookを作成する際に、参考にさせていただいてます。
https://zenn.dev/daichi_gamedev/books/unreal-engine-5

SK_PlaskMannequinのRigをSetUpする

リターゲットできるように、異なるSkelton通しを対応させる設定します。

「SK_PlaskMannequin」を開いて、「Retarget Manager」を開きます。

[Set up Rig]カテゴリーの[Slect Rig]に[Humanoid Rig]を設定します。

Targetを図のような対応になるように設定します。

設定できたら、[Show Advanced]ボタンをクリックします。

Targetを図のような対応になるように設定します。
右手はとくに間違えやすいので、よく確認しながら設定しましょう。

[Save]ボタンからMapping情報を保存しておくと、[Load]ボタンから同じ設定を読み込むことができます。

SK_MannequinのSet up Rigを設定する

「SK_Mannequin」側のSet up Rigを設定します。
「SK_Mannequin」を開きます。

「Retarget Manager」を開き、[Set up Rig]カテゴリーの[Slect Rig]に[Humanoid Rig]を設定します。
こちらは自動的に設定されますので、変更しません。

SK_MannequinのBasePaseをTPoseにする

「SK_Mannequin」と「SK_PlaskMannequin」でBasePoseが異なります。
このままリターゲットを行うと、Motionが壊れてしまいます。

AnswerHubで「SK_Mannequin」をT-PoseにしたMotionFBXをダウンロードできるようにしてくれていました。
https://answers.unrealengine.com/questions/289404/t-pose-for-ue4-new-mannequin.html

ダウンロードした「T_Pose_UE4_Mannequin.FBX」を「Animations」フォルダにImportします。

[Skelton]に[UE4_Mannequin_Skelton]を設定します。

[Import]をクリックします。

「T_Pose_UE4_Mannequin」を右クリックし、Create > Create PoseAssetを選択します。

「T_Pose_UE4_Mannequin」を選択して、[Apply]ボタンをクリックします。

「Retarget Manager」の[Set up Rig]カテゴリーの [Modify]ボタンをクリックし、「T_Pose_UE4_Mannequin_PoseAsset」を選択します。

[Import]ボタンをクリックします。

ViewportのSK_MannequinがT-Poseになります。
もう一度[Modify]ボタンをクリックし、[Use CurrentPose]を選択します。
これで「SK_Mannequin」のBasePoseがA-PoseからT-Poseになり、「SK_PlaskMannequin」と同じT-Poseになりました。

すべて保存する

ここで一度プロジェクトをすべて保存しましょう。

Plaskのアニメーションをリターゲットする

「SK_Mannequin」のアニメーションであればどれでもいいのですが、
「T_Pose_UE4_Mannequin」を右クリックし、[Retarget Anim Assets] > [Duplicate Anim Assets and Retarget]を選択します。

「SK_PlaskMannequin」を選択し、[Retarget]ボタンをクリックします。

Plaskで作成したMotionを右クリックし、[Retarget Anim Assets] > [Duplicate Anim Assets and Retarget]を選択します。

「UE4_Mannequin_Skelton」を選択し、[Retarget]ボタンをクリックします。

「Contents」フォルダ直下に、SK_MannequinにリターゲットされたPlaskのMotionが作成されます。

これで、Plaskで作成したMotionがSK_Mannequinのような汎用的なモデルでも使用できます。

まとめ

PlaskからMotionを作成するのに必要な機材は「PCとWebカメラ」です。
高精度と言う訳ではありませんが、手ごろな機材でこれだけの精度を出せるのがスゴイです。

手軽だからこそ、いままであったらいいなと思っていたことができます。

  • 意識合わせ
  • 静止画のポーズ付け

Motionのコンテ代わりに使えるのが大きいのではないでしょうか。

人工知能と仲良くならないと!

Discussion

オオバ@ohbashunsukeオオバ@ohbashunsuke

すごく参考になりました!ありがとうございます!

かなり細かいところなんですが、
👇こちらのサムネの inportimportかと思います!

ポジTAポジTA

バグ報告ありがとうございます!
早速画像修正しました。

いつも前向きなツイートと見やすいショート動画楽しく拝見させていただいてます。