【VR開発】キャラクターライブ制作への道③~VRMモデルを躍らせてみる~

VR/AR/Vtuber

どうも、重平です。

今回は、VRMモデルの金髪ちゃんにダンスモーションを当てて躍らせてみようと思います。

では始めていきましょう!

前回の記事↓

【VR開発】キャラクターライブ制作への道②~VRMモデルの衣装を変えてみる~
どうも、重平です。今回は、前回制作したVRMモデルの金髪ちゃんの衣装を変えてみようと思います。ぶっちゃけライブを制作するだけなら衣装替えは必要ない気もしますが、そのうちモデルは同じでも楽曲に合わせて衣装だけ変えたくなるかもしれませんからね。...

作業環境

・Unity6(6000.0.31f1)

・UniVRM(1.0ver)

ダンスモーションの入手

さて、金髪ちゃんを躍らせるために、まずはダンスモーション(アニメーション)を入手しなければなりません。そこで今回は、Unity公式が配布している「ユニティちゃん」のダンスモーションをお借りすることにしました。素人の私がダンスモーションを一から制作するのは大変ですから、モーションデータを含めて完成されたプロジェクトが無償で配布されているのは本当にありがたいです。

ユニティちゃんライブステージ! -Candy Rock Star- - ダウンロード - UNITY-CHAN! OFFICIAL WEBSITE

上記リンクからユニティちゃんのライブステージプロジェクトをダウンロードし、zipファイルを解凍したら自分のUnityプロジェクトにインポート。その後、「MocapC86」というモーションデータを拝借しました。

金髪ちゃんにダンスモーションをアタッチ

ダンスモーションが入手できたので、さっそく金髪ちゃんにアタッチしていきましょう。

ヒエラルキーから金髪ちゃんを選択し、インスペクターのAnimatorコンポーネントのControllerに「MocapC86」を設定します。また、この時「Apply Root Motion」項目にチェックを付けておきます。

この状態で再生したのがこちら。綺麗に踊ってくれました!

なぜ綺麗に踊れているのか?

さて、無事に金髪ちゃんは踊ってくれたものの、私はここで少し疑問が湧きました。「なぜ、ただモーションデータを入れただけなのに綺麗に踊れているのか?」と。

この疑問を解決すべく、私はアマゾンの奥深く…もとい、広大なネットの海へと漕ぎ出したのであった…。

結論:Humanoid Avatarの設定が一致していたから

結論を言うと、ダンスモーションが破綻せず再生された理由は、ユニティちゃんと金髪ちゃんの「Humanoidリグ」と「互換性のあるAvatar構成」がしっかり揃っていたからでした。

ユニティちゃんのモデルデータを確認してみると、画像1のように、Rig項目のAnimation Typeに「Humanoid」が設定されています。また、画像2のように、ユニティちゃんのAvatar情報ではBone情報がマッピングされています。。

・画像1:ユニティちゃんのAnimation TypeがHumanoid。

・画像2:ユニティちゃんのAvatar情報。各ターゲットにBoneがマッピングされている。

次に、自作モデルの金髪ちゃんのデータを確認してみると、インスペクターのAnimatorコンポーネントのAvatarに「Humanoid」が設定されていることがわかります。また、金髪ちゃんのモデルをVRMからFBXに変換後にAvatar情報を確認すると、こちらでもBone情報がマッピングされていることがわかります。
※VRMは配布向けのファイル形式で内部の編集には向かないため、今回のように中身を確認したい場合はFBXなど別のファイル形式に変換する必要があります。

・画像3:金髪ちゃんのAvatarがHumanoid。

・画像4:金髪ちゃんのAvatar情報。VRMをFBXに変換して内容を確認。Boneの名称はユニティちゃんと異なるが、Humanoid Avatar側とのマッピングが一致している。

上記のように、「Animation Typeが「Humanoid」で一致している」、「Boneの名称は異なっていてもHumanoid Avatarが必要とする“標準的なボーン構造”に正しくマッピングされている」ため、複雑な設定をせずとも金髪ちゃんにダンスモーションを適用できたんですね。

補足1:Humanoid Avatarとは?

「Humanoid Avatar」とは、一言で言うと「Unityが提供する人型アバターに特化した仕組み」のことです。

Unityは人型アバターの「足」「腰」「手」などの構造を共通化しているため、再生側のAvatar(今回はVRoidモデル)がこの構造に準拠していれば、異なるモデル間でもモーションデータを共通で使える仕組みになっているのです。

上記のような特性があるため、Humanoid Avatarは人型のキャラクターに共通の動きをつけたい場合や、複数のキャラに共通のモーションを適用したい場合などにとても便利です。
一つ一つのアバターやモーションデータに対して細かな設定をすることなく、自動的にモーションが体に合うように最適化してくれるなんて本当にありがたい機能ですね。

補足2:Apply Root Motionとは?

最後に、「Apply Root Motion」についても少しだけ触れておこうと思います。
「Apply Root Motion」は、ざっくり言うと「ダンスモーションなどの移動情報(Rootの位置変化)を実際のTransformに反映する機能」です。例えば、キャラクターに「歩く」モーションを適用した場合、Apply Root Motionのオン/オフで以下のような違いがでます。

・Apply Root Motion オフ:歩くモーションは再生されているが、キャラが初期位置から動かない(ランニングマシンの上で歩いているような感じ)。
・Apply Root Motion オン:普通に歩いているイメージでキャラが移動する(一歩進むごとにTransform値が更新されるため、キャラの位置が動いて歩いているように見える)。

Apply Root Motionをオフにしている場合、アニメーション内に含まれる“Rootの移動情報”がTransformに反映されないため、キャラは動いているように見えても実際の座標はその場に留まります。
なので、キャラクターにモーションデータを設定したけどなんかおかしいな?と感じた時は、Apply Root Motionのオン/オフを確認してみると解決するかもしれません。
そこまで複雑な設定ではありませんが、意外と細かいところの設定が重要になったりするので、Unityの設定は奥が深いです。

まとめ

今回は、金髪ちゃんにユニティちゃんのダンスモーションを当てて躍らせてみました。

人型のアバターであれば、異なるアバター同士でも簡単にモーションデータを使いまわせるように設計されているだなんて、Unityは本当に便利でありがたいですね。Humanoid Avatarについて調べたのはいい勉強になりました。とはいえ、まだまだAvatarやApply Root Motionなど内部的な仕組みについて理解する必要があると思うので、これからも学習に取り組んでいきたいと思います。

それではまた次回。

お借りしたもの

ユニティちゃんライブステージ! -Candy Rock Star-

参考サイト

【Unity】Humanoidでアニメーションを使い回せる?

【初心者向け】UnityのApply Root Motionって何?

Unity Documentation 「ヒューマノイドアバター」

⇐前回の記事                            次の記事⇒

コメント

タイトルとURLをコピーしました