見出し画像

VRoid製VRMをIK2.0フルトラッキングに対応させる

ご近隣の皆様こんばんは。ご近所系VTuberおじさんのがそさんです。
今回はVRoid製VRMモデルをIK2.0フルトラッキングに対応させるための手順を解説します。

【注意事項!必ずお読みください】
*これは2023/7/01現在での手順です。VRChat、VRoid双方のアップデートにより対応方法が変化する可能性があります(確認でき次第追記します)
*本記事の手順を実施することによりレガシーIKでの動作に不具合が生じる恐れがあります。あらかじめご了承ください。
*本項で紹介するツールおよび手順について一切の動作保証いたしかねますこと、あらかじめご了承ください。
*各ツールの製作者に本項についての質問や相談を行うことは、各ツール製作者の負担となります。絶対にお控えください。


更新履歴

2022/08/08 【Blenderでの作業をどうしても回避したい人へ】という項目を追加しました。
2022/08/08 注意事項を改定しました
2023/01/10 なで肩修正の手順を最新の仕様に合わせて更新しました。また、参照する別記事の情報を追記しました。
2023/03/02 VRoid Studioのアップデートに伴い注釈を追記しました。
2023/05/14 一部記述の整理、アイトラッキングに関する作業の追記、一部参照記事の差し替えを行いました。
2023/07/01 一部記述の整理を行いました。
2023/12/25 現状のIKの仕様に合わせ、手順の見直しと更新を実施しました

必要なもの

Unity・VRCSDKについては前回の記事同様実施時の最新のものをご利用ください。

Blenderおよびアドオンについても上記の記事と同様です。Blenderのバージョンは最新でも問題ないとは思いますが検証はしていないのでその点ご容赦ください。
Blender(筆者のバージョンは2.93.1です)
Blenderアドオン
cats-blender-plugin
VRM Add-on for Blender(旧名:VRM_IMPORTER_for_Blender)
上記アドオンの導入方法はそれぞれのリンク先に記載があるのでそちらを参照ください。くれぐれも手順を確認せずにzipを解凍しないように。

【注意】VRM Add-on for Blenderのバージョンについて

2023/12/14現在、上記アドオンのバージョン2.16.0以降を利用している場合、このあと解説している作業の一部に問題が発生します。
導入の際はリリースページから2.15.26以前のバージョンをご導入ください。
やむを得ず最新版のものを利用する必要がある場合は、以降の解説に登場する「マテリアルをVRMから拝借する場合」をご確認ください。

Unityのプラグインや用意しておくと便利なアイテムもほぼ変わりませんが、Dynamicbone関連のプラグインについては不要になりました。
VRCAvatarEditor beta
【VRC想定】VRoid向け手のAnimation 15種類+着席用Animation 2種類【CC0】
Avatars3.0 Vroid Layers

手順1.Blenrerへのインポート~ボーン修正前の準備

1.VRMモデルの用意

通常通りVRoidStudioからエクスポートしたVRMモデルを用意します。

画像1
▲今回はこんな感じの子を用意します

なお、今回の話とはすこし逸れますが、髪の毛の揺れもの設定についてはこの時点で確認しておく必要があります。適切な値などがわからない場合は、以下の記事を参考にしてください。

【注意】エクスポートするVRMバージョンについて

VRoid Studio正式版v1.20.0よりVRM1.0でのエクスポートが可能になりました。
いちおうVRM-AddonはVRM1.0にも対応はしているようですが、今回の手順では未検証のため予期せぬエラーが発生する場合があります。いったんVRM0.0廃止まではVRM0.0でのエクスポートを実行したほうが無難かと思います。(このあとの作業工程的にもVRMのバージョンを上げるメリットはありません)

2.VRMのBlenderへのインポート~自動修正

前述の項で説明したアドオン導入済のBlenderに、エクスポートしたVRMをインポートします。

画像2
▲最初に出てくるキューブは事前に選択して消しておきましょう

インポート後、下図赤線部のボタンを押してください。

▲小さいボタンなのでわかりづらいかもしれません

出てきたメニューから「CATS」を選択

Fix Modelを実行する前に「Fix Model」右のスパナマークを押して

画像3

Keep End Bones」を有効化

画像4

Keep Upper Chest」を無効化

▲現在のVRChatはUpper Chestを削除する必要はありませんが、VRoidのボーン構造上Upper Chestを残すと修正が難しいので消します。

Fix Model」を押して自動修正を実行しましょう。

3.リップシンク生成

CATSのメニューから「Visemes」を展開

Viseme AA」「Viseme OH」「Viseme CH」それぞれに下図のいずれかのシェイプキーを設定

▲VRoidStudioで口の幅を小さくしている場合
▲VRoidStudioで口の幅を大きくしている場合

シェイプキー設定後「Create Visemes」を選択しシェイプキー生成

4.アイトラッキング用ボーン追加

アイトラッキング用のボーン追加を実行します。
アイトラッキングのメニューを展開し「Blink Left」「Blink Right」「Lowrid Left」「Lowrid Right」のプルダウンに下図の通りシェイプキーを当てはめて「Creare Eye Tracking」を押せば実行完了です。
*モデルによっては上記作業実行後エラー文が表示される場合がありますが現状無視しても問題が発生することはありませんでした。もしエラー発生したモデルでVRC上でアイトラッキングに問題があった場合は、別途Twitter(@gasoko0150)までご連絡ください。

これで準備は完了です。

余談:現在発生しているVRoid製モデルのIK2.0フルトラッキングでの問題と原因、対処方法による処理の違いについて

2023/12/14更新】IK2.0のアップデートに伴い仕様が変わりましたので解説を修正しました。

【注】
本項目の内容はドキュメント等に記載されているものではなく、あくまで挙動に基づく推測である旨、ご承知おきください。

VRoidはもともと胸を張るような姿勢になっており、Hipボーンに比べHeadボーンが後ろに位置しており、ChestUpperChestのボーンは後ろに向かって斜めに傾斜がついた状態で配置されています。
また、NeckボーンはHeadボーンよりも後ろに配置されており、前に向かって斜めに傾斜していることが確認できております。
VRChatではHeadからHipまでのボーンの奥行の座標をそろえることが是とされているため、上記のような構造の場合、それぞれ問題が発生します。

【Lock-Hipでフルトラにした場合】

Chestは反ったままUpperChestが急激に姿勢を補正し、現実の人体ではありえない位置から曲がってしまうような状態になります。男性モデルなどでIK2.0適用後胸が陥没したりする場合、原因は概ねこのせいです。

【Lock-Head/Lock-Bothでフルトラにした場合】

HeadがNeckの座標に合わせるように移動するため必要以上に顎を引くような姿勢になります。モデルの体型などによっては、首が伸びたり外れたりしているような見た目になります。

手順2.Hip~Neckのボーン修正

1.ボーン修正準備

右ペインの「Armature」を選択し、左上のプルダウンメニューから「Edit(編集)モード」を選択します

画像7

2.基準値のコピー

Neckボーンを選択した後「ボーンプロパティ(右下の骨のマーク)」を選択し、TailのY軸の値をコピーします。Z軸ではないので注意。

画像8

3.修正対象ボーンの数値変更

コピーした値をNeakボーンのHead(ややこしい)、ChestボーンのTailのY軸にペーストして上書きします。

画像9
▲赤枠の値をコピーした値に上書き

ChestボーンのHead、SpineボーンのTailおよびHead、それぞれのYの値を0(Hipの奥行座標と同値)にします。

▲Chestボーン
▲Spineボーン

これで背骨のボーン修正は完了です。

手順3.FBXエクスポート

1.CATSのメニューから「Export Model」を選択します

画像16

2.エクスポート時以下の注意事項が出る場合は「Continue to Export」を選択します

画像17

3.エクスポートメニューにてパスモードを「コピー」に、前方を「-Yを前方」に変更、ファイル名を記入してエクスポートしてください。
これでBlenderでの作業は以上です。

画像18

手順4.Unityへのインポート~FBX設定

1.環境構築

必要なアセット、プラグインを事前に導入したUnityプロジェクトに、エクスポートしたFBXをドラッグアンドドロップでインポートします。
*現状のVRCSDKの場合、VCCを使用した環境構築が必要です!
VCCの導入手順等に関して、詳しくは以下の記事を参照してください。

画像19
▲事前に新規フォルダを作成しておくと楽です

2.テクスチャ―およびマテリアルの生成

インポートしたFBXを選択した後、inspectorの「Materials」タブの「Extract Textures」を選択しテクスチャを出力します。

画像20
▲出力先のフォルダ指定が要求されるので、新しいフォルダを作成し分かりやすい名前を付けておきましょう。

テクスチャ―の出力が完了したら、今度は「Extract Materials」でマテリアルを出力します。

画像21
▲同じく出力先のフォルダ指定が要求されるので、新しいフォルダを作成し分かりやすい名前を付けておきましょう。

出力されたマテリアルはすべてStandardシェーダーマテリアルカラーが薄いグレーになっているので修正します。

画像22
例)MToonを使用する場合

*使用するシェーダーによって調整箇所は異なります。シェーダーごとの調整箇所の違いについては割愛いたします。
liltoonについては
なるとさんがFANBOXで詳しく解説しているのでご参考にどうぞ
*衣装や髪の毛の色などをマテリアルカラーで調整している場合は、このタイミングで調整しなおしてください。

【マテリアルをVRMから拝借する場合】

VRM Add-on for Blenderの問題などによりFBXからテクスチャを取り出せない場合は、大元のVRMファイルからマテリアルを拝借するかたちで適用していきます。
通常の手順でVRMファイルをUnityにインポートしたのち、FBXファイルの「Materials」タブを選択し、該当箇所に必要なマテリアルをドラッグアンドドロップしてください。

▲黄色で示している鍵マークをクリックすればInspectorが切り替わらなくなるので作業しやすくなります(作業終了後解除を忘れずに)

すべてのマテリアルのD&Dが完了したら「Apply」を押してマテリアルを適用しましょう。

3.FBXの設定変更

FBXファイルの「Model」タブで「Read/Write Enabled」を有効化し「Blend Shape Normals」を「None」にします。

▲変更後は右下の「Apply」ボタンを忘れずに押しましょう

FBXファイルの「Rig」タブで「Animation Type」を「Humanoid」に変更します。

その後「Avatar Definition」の「Configure」ボタンををしてRigの詳細設定に移動します。

Mapping」タブで適切でないボーンの適用状態がないか確認し修正します。

▲「Upper Chest」は空欄で大丈夫です。VRoid Studioでの体型調整によっては「Chest」が空欄になっている場合があるので、その場合は左のツリーからD&Dで挿入してあげましょう
▲髪の毛に揺れもの設定がある場合は何かしらの髪の毛のボーンが「Jaw」に設定されている場合があるので「None」に変更しておきましょう。

上記の作業が完了したら一度「Apply」を押しましょう。

Muscle&Settings」タブでなで肩調整を行います。

▲肩の上下にかかわる設定はそれぞれ「Left Arm」「Right Arm」のツリーにあります
▲「Shoulder Down-Up」の下限値を「0」~「-5」あたりで設定するとおおむね解消されます。最終的な数値は体型や好みで調整しましょう。

ここまでの作業が済んだら「Apply」>「Done」を選択してRig設定を終了しましょう。

▲「Apply」を忘れて「Done」を押しても「Applyするかどうか」を聞かれるので、焦らず「Apply」を押せば大丈夫です
▲「Done」を押した後Inspectorの表示が切り替わらない場合はInspectorがロックされているので、右上の小さい南京錠のアイコンを押してロックを解除しましょう

上記でFBXの修正は完了です。

*フルトラ設定「Lock-Head/Locke-Both」を利用する人向けの作業1

胸トラッカーの利用等でフルトラ設定を「Lock-Head/Locke-Both」にする必要のある方は、FBXのRig設定にて、追加で以下の作業を実行してください。

Chestボーン、Neckボーンの「Rotation」のXの値を0にする

Right Arm,Left Armの「Upper Arm」の「Rotation」のYの値を0にする


手順5.アバターセッティング~アップロード

*2023/05/14追記

1.scene配置

scene上に手順4の設定が完了したFBXをドラッグ&ドロップします。

2.アバター設定用コンポーネントの追加

scene上のモデルを選択し、インスペクタータブで「Add Component」を選択、検索窓に「vrc」と入力すると最上部に「VRC Avatar Descriptor」が出てくるのでこれを選択してください。
*「Body」や「Armature」ではなく、Hierarchy最上部のところを選択するように注意!下図のピンクで示している箇所がちゃんとFBXのファイル名と同じになっているか確認してください

3.視点調整

両目の間あたりに球が表示されるように「View Position」の座標を調整します。

▲グレーの球が眉間を少し突き破る~両目の焦点あたりの間くらいの位置取りが望ましいです

4.リップシンク設定

リップシンクはここまでの手順が正しく実行されていれば「Auto Detect!」を押すだけで正しいシェイプキーが設定されます。

▲「Auto Detect!」選択前
▲「Auto Detect!」選択後

5.アイトラッキング設定

アイトラッキングを設定します。

▲「Eye Look」メニューを展開し「Enable」を選択

【要注意】アイトラッキング用ボーンについて

この後の作業で目のボーンを選択しますが、Blenderの作業により
・もともとの目のボーン(Eye_L、Eye_R
・アイトラッキング用の目のボーン(LeftEye、RightEye
の2種類が存在しています。
もともとの目のボーンを参照するとアイトラッキングがめちゃくちゃになるので、目のボーンを選択するときは必ず「アイトラッキング用の目のボーン(LeftEye、RightEye)」を選択してください!

▲「Left Eye Bone」の項目の「◎」を選択し、ポップアップ中の「LeftEye」を選択
「Right Eye Bone」も同様の手順で「RightEye」を選択
▲scene上のプレビューを見ながら数値を入力してください
編集後右側の「Preview」が「Return」になっていた場合は「Return」を選択してプレビューモードを終了しておきましょう。

6.まばたきの設定

目とじのブレンドシェイプで瞬きを設定する場合は以下の手順で設定してください。

▲「Eyelid Type」のプルダウンで「Blendshapes」を選択
▲「Eyelids Mesh」右の「◎」を選択し、ポップアップ上の「Body」を選択
▲「Blendshapes States」を展開し、それぞれのプルダウンで上図のように設定
Eyelook同様緑色の「Return」が表示されていたらそれを選択しプレビューモードを終了しましょう

*フルトラ設定「Lock-Head/Locke-Both」を利用する人向けの作業2

念のため、FBXのRig設定で実施した数値調整をscene上でも実行してください。

▲調整すべき場所、数値はRig設定の時と同様です。

7.ハンドサイン、表情設定

VRMConverterと異なり表情やハンドサインの設定は行われていないので、手動で実装していきます。一見大変なようですがここで作った表情設定は今後同じパラメーターで問題なければ同じ手順で作ったアバターにも使いまわすことが可能なので、頑張りましょう。
ハンドサインの設定にはがとーしょこらさん製作の以下ツールを使用します。

詳細な手順は以下の記事で解説しています。

8.揺れもの設定

揺れ物設定が必要な場合は以下の記事を参照してください。

ここまでできればあとはいつも通りアップロードして完了です。
お疲れさまでした。

Blenderでの作業をどうしても回避したい人へ

【注意!】現状、手順2の作業はBlenderなしでは実現不可能です。
手順1の修正作業のみで問題ない方に限り、以下の手順を実施してください。
【使用するツール】
VRMUpperChestRemover
*ダウンロード時Windowsセキュリティが警告を発する場合があります。
無視する、許可する等で回避する必要がございます。
なお、本ツールそのものは安全なものではございますが、当該操作は自己責任でご実施ください。

【使用手順】
1.VRoidStudioからエクスポートしたVRMを上記ツールにドラッグ&ドロップ

画像24

2.「【元のファイル名】_mod.vrm」というVRMファイルが同じフォルダ内に出力されるので、このファイルをUntyにインポート&VRMConverterで変換し通常の手順でアップロード

画像25

上記の作業をすることで下記画像左側と同等の結果が得られます。

画像26


この記事が気に入ったらサポートをしてみませんか?