皆様いかがおすごしでしょうか。歌乃です。

最近またUEを触り始めましたが、色々変わっていて正直手探り状態です(´・ω・`)

今回は UE5 に VRoid Studio で作ったキャラを取り込んだ際の顛末です。
以下のような読者を対象にしてます。

  • UEの基本操作がわかり、BluePrintで簡単な処理を作れる。またはBPのサンプルを触ったことがある。
  • VRMを用意できる(VRoidStudioで作成、または他のアプリで作成、またはフリーで利用可能なものを持っている)。
  • スケルトンやボーン、リグ、メッシュなど3Dアニメーションに関わる用語や仕組みがある程度わかる。

さて、UEのサンプルには近未来的なマネキン(サンプルキャラクタ)が用意されていますが、せっかくならオリジナルのキャラクタを動かしてみたいという欲望が湧くとおもいます。少なくとも私は湧きます(゚∀゚)



最初に Secondlife で利用しているキャラを持ち込むことを考えましたが、キャラクタデータを作成したのは自分でもライセンス的にグレーゾーンなので断念。

次に考えたのが VRoid Studio です。
それというのもUE公式のニュース欄にPixivから11月6日付けで VRoid SDK for UE なるものがリリースされたとアナウンスされているのを見かけたからです。

VRoid StudioはPixivが公開している3Dキャラクター作成ソフトウェアです。Steamでも公開されており、ありがたいことに無料で利用できます。作成した3Dキャラクターは商用利用可能です。以前に BeatSaber 用のアバターを作るために使用していました。

VRoid SDK for UE はVRoid Hub(web上に作成したVRoid アバターのデータをアップできるサービス)から任意のアバターデータをランタイムでロードして利用できるというもの。

SDKの利用には利用者登録が必要と言う点や VRoid Hub との連携は個人的に必要としていないので SDK は見送りました。が、SDK関連の記事を読んでるうちに VRM4U という素晴らしいユーティリティに出会いました。

VRM4U は UnrealEngineで動作する、VRMファイルのインポート用プラグインです。VRMファイルはVRアプリケーション向けのモデルデータフォーマットで、前述のVRoid Studio で作成したアバターもVRM形式で出力することが出来ます。

ということで早速試してみました。

現時点で最新版のUEは5.3.2です。以下の作業はUE5.3.2上でおこなっています。バージョンの違いによって動作が変わる可能性にご注意ください。

前準備としてVRM4UをUEにインストールする必要があります。

UEを起動して新規のプロジェクトを作成します。ゲームテンプレートのサードパーソンを選択してください。タイプはBP(BluePrint)を選びます。プロジェクト名は適当でOKです。今回は「VRoidTest」にしました。

新規プロジェクトの作成

新規プロジェクト作成後、一旦UEを終了させて、UEのバージョンに合ったVRM4UをGithubからDLして、UEのプラグインフォルダーに放り込んだあと、UEを起動して先ほどのプロジェクトを起動します。

編集メニューからプラグインブラウザを開き「vrm」で検索すればVRM4Uが(正常にインストールされていれば)表示されます。

VRM4Uプラグイン

チェックを入れて、Pluginを有効化します。プラグインの有効化にはUEの再起動が必要なので再起動します。

インストールの手順は公式サイトに丁寧に掲載されていますので自信のない方はそちらを参照してください。



コンテンツブラウザを開いて、All > コンテンツ > Charactersフォルダーを選択し、その中に新しいフォルダーを作ります。フォルダー名はお好きなものをつけてください。キャラクタ名などがおすすめです。ここでは「Utano」にしました。

Utanoフォルダーを開いて、その中に外部(Windowsならエクスプローラー)からVRMファイルをドラッグ&ドロップします。

VRM4Uのインポート画面が立ち上がってくるので、Import します(設定は特に変更しません)。

VRM4Uのインポート画面

Inport が正常に終了すれば、フォルダー内に各Asset(アニメーションやスケルトン、マテリアルなど)が展開されます。

展開されたAsset



サードパーソンプロジェクトにはMannequinというサンプルキャラクターデータが用意されています。
男性形がManny、女性形がQuinnとなりますが、どちらもSK_Mannequinというスケルトンを利用しています。

サンプルマネキン

そして取り込んだVRMのスケルトンとサンプルマネキンのスケルトンではボーンの数などに違いがあり、そのままでは流用できません

そこでUEでは「IKリターゲッタ」というボーンの違いを吸収できる仕組みが用意されています。



コンテンツブラウザでVRMを展開したファルダを開き、検索欄に「RTG」と入力すればVRM4Uが生成してくれたIKリターゲッタが表示されます。

IKリターゲッタ

このIKリターゲッタを編集します。

IKリターゲッタを編集

IKリターゲッタの詳細タブには「ソース」と「ターゲット」があり、ソース(参照元のスケルトン)には「IK_Mannequin」を、ターゲットには「IK_取り込んだVRMファイル名_Mannequin」を設定します。

IKリターゲッタの詳細

この時点でプレビューにはMannequinメッシュとVRMで取り込んだキャラクターメッシュが表示されてます。

詳細タブのPreviewSettingでTargetMeshOffsetを指定するとプレビューキャラの立ち位置を変更できます。ソースキャラと重なってポーズが見にくい場合は、ここを変更して立ち位置を変えてください。

TargetMeshScaleを設定するとプレビューキャラの大きさを変更できます。ソースキャラに近い大きさに設定することでポーズを確認しやすくなります。

プレビューキャラの立ちポーズがソースキャラと違う(TポーズとAポーズなど)場合は、VRM4Uがポーズセットを用意してくれているので、そこから近いポーズを選択できます。

ボーンリストの上にある「作成」から「ポーズアセットからインポート」を選択します。

ポーズアセットからインポート

有効なポーズアセットが表示されるので「VRoid」で絞り込みます。「POSE_Vroid_Simple」というアセットを選択し、右下のリストから好みのポーズ(Aポーズなど)を選択して「新しいリターゲティングポーズをインポート」を押します。

新しいリターゲティングポーズをインポート

ソースキャラとターゲットキャラのポーズがおおよそ同じになったところで、右下にある「アセットブラウザ」から適当なアニメーション(MM_walk_Fwdなど)をプレビューしてみましょう。

アニメーションプレビュー

取り込んだVRMキャラクタ(VRoidスケルトン)がソースキャラクタ(IK_Mannequinスケルトン)に追随してアニメーションするのが確認できると思います。

多分ここでプレビューした動きはソースキャラの動きと若干ずれていると思います。これに関しては元々スケルトンの構造が違うので仕方がないのですが、ターゲットキャラのポーズをある程度リターゲティングポーズ(ソース元の初期ポーズ)に近づけることで解消できます。

ターゲットキャラのポーズを修正するには、エディター左上のリターゲティングモードの「︙」から「リターゲティングポーズを編集」を選択し、編集モードを有効にします。

リターゲティングポーズを編集

その後、左側のボーンツリーから変更したいボーンを選択し、ポーズを修正(ソースキャラクタのポーズに近づくように)していきます。

ポーズを修正

どんなに近づけても完全に同じような動きにはなりません。ある程度で妥協しましょう。(´・ω・`)

納得いくまでリターゲティングポーズを修正したら、エディターを閉じます。



リターゲティングの準備ができたので、実際のアセット(アニメーションやそれらに関連するファイル)を取り込んだVRMモデルのスケルトン用に再構成していきます。

お手軽なのはABP(アニメーションブループリント)ファイルからのリターゲティングです。ABPを選ぶとABPで参照しているアニメーションをすべて変換してくれるので、一つづつ変換する手間が省けます。

変換を実行する前に、VRMキャラクタ用に作ったフォルダの下に新しいフォルダーを「Animations」などの名前で作っておきましょう。

コンテンツブラウザから「Characters」>「Mannequins」>「Animations」と開いていくと、「ABP_Manny」と「ABP_Quinn」の2つのABPがあります。Mannyが男性型、Quinnが女性型のアニメーションなので取り込んだVRMモデルの性別でどちらかを選ぶといいでしょう。

ABPファイルを右クリックし「アニメーションアセットのリターゲティング」から「アニメーションアセット / ブループリントを複製してリターゲティング」を選びます。

リターゲット設定ダイアログが表示されるので「IKリターゲッタ」に先ほど編集していたVRMモデルのIKリターゲッタを選択します。

IKリターゲッタ

プレビューにソースとターゲットが表示されます。ターゲットのポーズがTのままでもサムネが更新されていないだけで、リターゲッタはちゃんと編集が反映されているので安心してください

リターゲットを実行する前に、出力されるファイル名がわかりやすくなるように「サフィックス」にわかりやすい名前をつけておきましょう。「_モデル名」なんかがおすすめです。

ファイルの出力先を「参照」ボタンで変更します。先ほどVRMモデル用のフォルダに作った「Animations」フォルダを選択しておきましょう。

ABPファイルが参照しているファイルのすべてを再帰的に処理してもらうために「参照されるアセットを再マップ」にチェックを入れておきます。

以上の準備ができたら右下の「リターゲット」ボタンを押します。

特に完了メッセージ等は出ませんが、先ほどのAnimationsフォルダー内に変換されたABPやアニメーションファイルができていれば成功です。



VRMモデルを使用したアニメーションアセットが出来たので、それらをサンプルプロジェクトのMannequinモデルと差し替えていきます。

コンテンツブラウザから「ThirdPerson」>「BluePrints」フォルダを開き「BP_ThirdPersonCharacter」を編集します。

BP_ThirdPersonCharacter

BP_ThirdPersonCharacter をエディターで開くと複雑そうなBP画面が出ますが、そちらは無視して右側の「Animation」と「メッシュ」の設定を変更します。

「Anim Class」に先ほど出力されたVRMモデル用のABPファイルを設定します。※先ほど出力時に設定したサフィックスで検索すると素早く見つけられます。

「Skeletal Mesh Asset」にはVRM4Uで取り込まれたスケルタルメッシュファイルを設定します。

以上の設定が終わったら、左上のコンパイルからBPをコンパイルしましょう。



コンパイルが終わったら、BPエディターを閉じてThirdPersonMapレベル(サンプルプロジェクトのデフォルトレベル)を実行してみましょう。

VRMの取り込みとリターゲティングが成功していれば、VRMモデルが表示され、きちんとアニメーション(歩いたりジャンプしたり)してくれるはずです。

実行結果




今回はここまで、次回(がもしあれば)取り込みでうまくいかなかった部分の修正に関して記事にしたいと思います (゚∀゚)。
続き > https://www.mayonakanouta.com/blog/unreal-engine-002



Post If you feel like it, I would be happy if you could post it.