Open9

UE5.2とVRM4UでとりあえずVRMをキャラとして動かす

eaieai

やること

やらないこと

  • 詳しい仕組みの解説
    • わからないので

記事を公開する目的

  • 同じことをしたい同じような人向けの記録
  • 初心者がどのようなところでつまずいたかを公開して、わかる人がつまづきにくいドキュメントを書けるようにする

私について

  • ゲーム制作をしたことはない
  • Unityは玉転がしゲームのチュートリアルを終えたくらいは触った
  • Unreal Engineはさっきインストールした
    • Editorを触ったことはない
  • 3Dモデリングもよくわからない
    • ドーナツのチュートリアルくらいは終えた

環境

  • Windows 11
  • Unreal Engine 5.2.1
  • VRM4U_5_2_20230813
eaieai

VRMの用意

https://vrm.dev/

VRMの作成にはUnity Editorのプラグインとして動作するUniVRMを使うのがメジャーみたいです。

READMEのInstallationのところに記載がありますが、これを書いた時点でのVRChatがサポートしているUnityバージョンはUnity 2019.4.31f1であり、UniVRM v0.99.1までしか対応していないので、VRChat向けアバターをVRM出力しようとしてる人はバージョンに気をつけてください(一敗)

VRM形式にはv0とv1があります。UniVRMのUniVRMというパッケージで出力できる方がv0で、UniVRMのVRMというパッケージで出力できる方がv1です。意味わからん

VRM4Uはどちらも対応してるらしいですが、v1は試験的らしいのでv0のほうがいいかもしれません。わかりません。

VRM1.0βに順次対応中
※試験的な実装です
https://ruyo.github.io/VRM4U/

VRM出力する際、マテリアルが失われてもいいみたいです

手軽な方法、Unityわからない人向け
Unityにインポートし、そのままVRM出力すればOK。 Unity上でのプレビューが紫色でも問題ありません。UE側である程度設定されます。ただし揺れ骨は動作しません。
https://ruyo.github.io/VRM4U/04_vrchat/

今回私はVRM出力から試そうと思いましたが、なんかマテリアルがうまく行かなかったので最初からVRM付きで販売されている3Dモデルを用意しました。しかし、改めて見るとマテリアル気にしなくていいらしいのでみなさんはちゃんと読んでください

今回使うVRM付属3Dモデル:
https://booth.pm/ja/items/4035411

これがVRM v0かv1かはわかりません。そういうところだぞVRM

そうそう、将来的に配布を考えていて、アバター想定のモデルを使う場合は利用規約をよく読む必要があります。VN3ライセンスの場合はR 製品開発等のためのソフトウェアへの組み込みがゲーム制作に必要な項目だと思います

とにかくVRMファイルが用意できればいいです

eaieai

UE Editorの準備

Epic Game LauncherでUnreal Engne 5.2.1が起動できるようになっているところまでは自分でなんとかしてください

起動して、ゲームカテゴリからサードパーソンテンプレートでプロジェクトを作ります

レイトレーシングにチェックを入れるとシェーダーコンパイルにクソ時間がかかるので無視でいいと思います(一敗)

起動したらVRM4Uを入れるために一旦終了します

eaieai

VRM4Uの準備

https://ruyo.github.io/VRM4U/01_quick-start/

ドキュメントを読めば何も問題なく進められるはずです

適してそうなバージョン(今回はVRM4U_5_2_20230813.zip)をダウンロードして展開してPluginsをプロジェクトのところに入れて

起動して編集->プラグイン開いてチェック入れて

言われるがまま再起動して

起動したら終わり。

ちなみにアーカイバがおかしくて変なエラーが出ることがあるらしいです。7zipではうまくいきました

https://github.com/ruyo/VRM4U/issues/302

eaieai

VRMのインポート

https://ruyo.github.io/VRM4U/01_quick-start/#vrmモデルをインポートする

下にコンテンツドロワーってのがあるのでクリックしたらファイル一覧があります。Unityにもあるようなやつです。

ここらへんは適当なチュートリアルで無限に説明があると思うので各自調べてください。

ここにVRMファイルをドロップするとインポートできるんですが、その場にたくさんファイルが出てくるのでとりあえずVRMフォルダを作っておくといいです(一敗)

インポートオプションは特に弄る必要ははないですが、Material TypeをSubsurface ProfileかMToon LitにしておくとUEっぽくなります。あとからでも変えられます

https://ruyo.github.io/VRM4U/51_ue5/#詳細マテリアルの設定

今回はSubsurface Profileにしました

山程ファイルが出てきました。よかったですね


これから、これらが何かを理解させられることになる

ファイルの中からスケルタルメッシュというもの掴んで上のビューポートにドロップするとお人形さんが出てきます。


Fキーでフォーカスできます

この時点では入れただけなので操作キャラはまだ謎の人です


並ぶとアバターの小ささが際立つ

eaieai

リターゲットの概要

さて、モデルは導入できましたが実はアニメーションがありません。このままだとTポーズのままスライド移動することになります。

デフォルトキャラ(マネキンのQuinnさん。男性っぽい形のMannyさんもいる)の動きをコピーできたらとりあえず良さそうです。

他のキャラのアニメーションを使えるようにすることをアニメーションリターゲットと言います

https://docs.unrealengine.com/4.27/ja/AnimatingObjects/SkeletalMeshAnimation/AnimationRetargeting/

アニメーション リターゲット とは、同じ スケルトン アセットを共有するが比率が非常に異なる可能性があるキャラクター間でアニメーションを再利用する機能です。リターゲットを行うと、形の異なるキャラクターからアニメーションを使用した時、アニメートされたスケルトンがそれぞれの比率を失ったり、無用に変形されることを防ぐことができます。 アニメーション リターゲットを使うと、異なる スケルトン アセット を使用するキャラクター間でも、類似のボーン階層を共有し、リグ と呼ばれる共有アセットを使用していればアニメーションを共有することもできます。リグは、あるスケルトンから別のスケルトンにアニメーション データを渡すためのものです。
https://docs.unrealengine.com/4.27/ja/AnimatingObjects/SkeletalMeshAnimation/AnimationRetargeting/

意味がわかりませんね。このあと嫌でもわかります。

ここで少し言葉の整理をしておきます。たぶん問題ないと思いますが、初心者が噛み砕いた説明なんてどうせ間違ってるのであまり信用しないで自分でも調べてください

  • ポリゴン: 3つ以上の頂点を集めて作った1つの面。基本的に1ポリゴンの頂点は3つ(三角)か4つ(四角)
  • メッシュ: ポリゴンのあつまり。形だけで、色や動きの情報はない
  • ボーン: メッシュを動かすための骨となるデータ1つのこと
  • スケルトン: ボーンのあつまり。たぶんUEにおいてはキャラクター1つについてるボーン全部のこと?
  • スケルタルメッシュ: スケルトンの入ったメッシュ

コンテンツブラウザからスケルタルメッシュをダブルクリックすると開けるので、自分のインポートしたキャラがどのような構造をしているのか見てみるといいです

ボーンの表示は キャラクター->ボーン-> すべての階層 でできます


スケルタルメッシュ。昨今のキャラクターは非常に多くのメッシュとボーンで構成されている

それで、今回インポートしたVRMとUnreal Engineデフォルトのマネキンはスケルトンの構造が違います。
アニメーションリターゲットをしたいなら、まずは構造を合わせる必要があります。


違うスケルトンでアニメーションを無理やり使うと、こうなる

eaieai

リターゲットの実践

https://ruyo.github.io/VRM4U/03_gray/

実はVRM4Uにはリアルタイムリターゲットという機能があり、難しいことしなくても動きをパクれるのですが、多分このテンプレのキャラに対しては使えないので、いったんないものとします。つまり難しいことをします

https://ruyo.github.io/VRM4U/03_gray/#エディタでリターゲットするue5標準機能
(エディタでリターゲットする の項目)

UE5のリターゲットでは、リターゲット元と先のモデル それぞれに対応するIK_Rigアセットが必要です。
https://ruyo.github.io/VRM4U/03_gray/

必要らしいです。大変そうですね。

IK_Rigの自動生成
VRM4Uは インポート時に、以下3タイプのIK_Rigを生成します。

タイプ 用途
1. UE5のChainName基準 これを使えばOK。UE5標準。テンプレートのIK_Rigとペアで利用する
2. VRMのHumanoidBone基準 1がうまく動作しない場合の予備。背骨はChain、他は骨同士で対応
3. UE4マネキンの骨名基準 さらに予備。骨同士で対応

https://ruyo.github.io/VRM4U/03_gray/

作ってくれるらしいです。嬉しいですね。

インポートしたときに作成される_Mannequin, _MannequinBone, _VrmHumanoidがそれぞれ1,3,2に対応しています。

eaieai

WIP

なんかいろいろいじってたらいい感じになりました

しかしここにいくまでにスケルトンやコントロールリグの編集が必要だったので果たしてこれが最初にやるべきことなのか不明