2021/05/31

Vroidから3Dモデルを作成してUnityで動かす

WRITER: t.otake

はじめに:

pixivが提供しているVroidという3Dモデル作製サービスがあります。

こちらはPC版、モバイル版ともに提供されており、モデリングの知識が無くても簡単に3Dのキャラクターを作ることができます。

今回の解説ではモバイル版を使用します。IOS版 Android版 

こちらで作成したモデルをUnityに導入しFBXに変換、そこからAdobeのMixamoというサービスでアニメーションを付与して簡単な移動処理を導入するところまでまとめてみたいと思います。

サンプル:

こちらがサンプルになります。

Vroidで作成したキャラクターにMixamoのアニメーションを付与して動かしています。

環境:

今回はUnity(2018.4.3f1)で実装していきます。

導入:

上記でインストールしたモバイル版Vroidでモデルを作成し、

VroidHubで公開します。(Pixivアカウントが必要です)

 

公開されたモデルをVroidHubからダウンロードしてUnityで使用する準備をします。

(VroidとVroidHubで同一アカウントでログインしておく必要があります)

Unityでプロジェクトを作成します。

Vroidのモデル形式であるVRMを編集できるパッケージこちらからをダウンロードして、プロジェクトにインポートします。(2021/5/22現在の安定板はv0.66.0

インポートに成功したら、Assetsの下にフォルダを切ってその中にVroidHubからダウンロードしたVRMフォルダをドラッグして導入します。

以下のように作ったキャラクターのPrefabが追加されていることを確認します。

こちらの名前がわかりにくい状態なので、VroidVRMにリネームしておきます。

 

Unityのシーンに該当のPrefabと分かりやすいように床用のPlaneを設置します。

Mixamoからアニメーション導入:

ここから、MixamoというAdobeが提供しているFBXへのアニメーション付与のサービスを利用するため、一度こちらのVRMPrefabモデルをFBXに変換します。

UnityEditorのWindow>PackageManagerにて、FBXExporterをインポートします。
(現在最新版だとエラーが出ていたため、version 3.2.1を使用します)

FBXExporterを導入後、該当のVroidVRMを右クリックで選択し、FBXを作成します。

この時作成されたFBXモデルのmaterialが崩れる場合がありますが、

FBXのInspectorからmaterial>LocationをUse External Material(Legacy)に設定し、

展開されたmaterialの中でRendringModeがFadeになっていないものを見つけて修正します。

 

修正して二つのモデルを並べます。

問題なく表示されていれば、ここからMixamoのアニメーションを適応します。

Adobeのアカウントを作成し、MixamoにアクセスしてUploadCharacterを選択し、

先ほどFBXExporterで作成したキャラクターをインポートします。

モデルのテクスチャはpreviewで反映されていなくても大丈夫です。

キャラクターの読み込みが成功すれば、後は適応したいアニメーションを探してダウンロードしていく流れになります。アニメ適応時にモデルのpreviewを見てパラメータを調整することができるので、この際に動作の速度や腕のスペースが服に重なってしまっていないかなどを見て確認します。

また、Animation に移動量を付与したくない場合は、In placeにチェックを入れましょう。

以下は実際にArm Spaceが足りていなかったので調整した例になります。

 

調整が終われば、後はモデルpreview画面の上にあるdownloadを押します。

ダウンロード設定ではFormatをFBX for Unityに設定します。

それ以外の設定はとくに変えなくても大丈夫です。

今回は、アイドル(静止)>歩き>走り とジャンプの合計4つのアニメーションを導入しました。

基本動作の三つはBlendで遷移し、ジャンプのみTriggerで動作するように設定していきます。

Unityで動作設定:

FBXで作成したアニメーションは、Inspector>Rig>AnimationTypeをHumanoidに設定します。

そのままでもFBXモデルのアバターでは動作できますが、VRMの方に対応する為に変えます。

(FBX化したモデルでは髪や服の揺れが消えています)

VroidVRMに付与するAnimationControllerを用意します。

AnimationControllerを新規作成しEntryからBlendTreeを作成し、遷移を繋ぎます。
また、AnyStateからmixamo.fbx.Jumpのアニメーションクリップを繋ぎ、そちらもBlendTreeに繋げます。Jumpの遷移にはパラメータにTriggerのフラグを追加し、そちらをConditionに設定します。

BlendTreeの中身はパラメータSpeedで遷移する静止>歩き>走りの三つのClip登録になります。

それぞれ対応するmixamo.FBXのクリップを登録していきます。

こちらのアニメーションクリップの登録が終わったら、VroidVRMのキャラクターモデルにコンポーネントを追加・設定していきます。

・Animatorのcontrollerに先ほど作成したcontrollerの設定

・RigidBodyのMassを10に設定

・RigidBodyのFreezeRotationで回転軸のXZを固定

・CapsuleColliderをキャラクターの見た目と同じくらいの大きさに設定

また、今回のキャラクターはカメラを基準に移動するので、カメラにも回転動作をさせるスクリプトの設定が必要になります。

以下のコードをC# でPlayerCameraの名前で作成します。

CameraAxis>MainCameraを子に設定し、上記のようにInspectorを設定します。

最後に、以下のC#コードをVroidVRMのキャラクターにアタッチします。

こちらのPlayerMove.csは基本の移動処理、ダッシュ、ジャンプのアニメーション制御を行います。

上記のスクリプトをキャラクターに設定し、Unityの実行で動画のように動作テストが可能です。

Scene上にキャラクターがジャンプで乗れる程度のCubeなどを設定し、materialの色を変えたものを設定すると移動している動作が分かりやすくなります。

 


まとめ:

PC版VroidStudioでは以前から可能でしたが、Mobile版でも3DモデルのVRMダウンロードが可能になりました、使用に際しては規約がありますが、商用利用も可能です。

Unityでのアニメーション対応はモデルの差がある場合は適応が難しいですが、Mixamoを利用することで多くのアニメーションをテスト、導入することができます。

これらのサービスを組み合わせて利用することで、個人製作などでもクオリティの高い3Dモデルとアニメーションの使用が可能になってきていると思います。


参考・リンク一覧

※Vroid公式

※Mixamo公式

※VroidVRMのキャラクターの利用に関して注意する箇所

 

t.otake

t.otake

クライアントUnityエンジニア 最近は3Dモデルを動かして遊んでいます。