【旧記事】VRoidをAvater3.0+フルトラ対応させる
【注意】
(2022/08/01)最新のVRCのIKにあわせた手順を公開しました!
まずは以下の記事をご確認ください!
ご近隣の皆様こんばんは、ご近所系Vtuberおじさんのがそさんです。
今回はVRCでのフルトラ対応にクセがあるVRoidモデルについて、私がどういう手順で対応させているか、という記録を残しておきたいと思います。
あくまで「私の環境で」「私の作成したモデルにあわせて」調整した内容になりますので、万人向けでない可能性もあります。ご容赦ください。
*2021/12/06 Blenderの作業について修正しました!
*2021/12/09 Blenderの作業についてさらに修正を加えました!
*2022/01/27
・既にVRMConverterのアップデートによりこの問題はblenderが不要となっております。やむを得ない事情によりどうしてもFBXで出力する必要のある方のみご参考にしていただければ幸いです。
・VRoid Studioのアップデートにより手順1-1.5の作業は不要となりました
ちなみに:これをやらないとどうなるの?
こうなったり
こうなったりします
必要なもの
この記事をご覧になっている方はすでにご存じかと思いますので、VRoid、Unity、VRCSDK、UniVRMについては割愛します。そのとき必要なものを使いましょう。
その他必要なものは以下のとおり。量が多めですが、心を折らないように
Blenderに移行する前に必要な作業を行うツール
・VRoidLegModifierForCluster
Blender(筆者のバージョンは2.93.1です)
Blenderアドオン
・cats-blender-plugin
・VRM Add-on for Blender(旧名:VRM_IMPORTER_for_Blender)
参考資料
・【VRChat用】フルボディトラッキング対応ボーン CC0
Unity上で設定する際にあるとすごい楽になるツール
・VRCAvatarEditor beta
・DynamicBoneInspector
・【VRC想定】VRoid向け手のAnimation 15種類+着席用Animation 2種類【CC0】
・Avatars3.0 Vroid Layers
手順1.VRM出力~Blenderインポートまでの下ごしらえ
1.VRMエクスポート
こちらは通常通り実施して問題ありません。
今回は適当にプリセットデータをつかってモデルを作りました。
1.5.VRoid正式版の衝突判定バグの修正
*VRoidでのバグfixがあり次第不要になります(報告済み)
>2022/01/27 VRoid Studioのアップデートにより修正が行われましたため、現在はこの問題は発生しません。よってこの作業は不要です。
2021/11/28現在の正式版VRoidでは「揺れもの設定で設定した衝突半径がエクスポートしたVRMに反映されない」問題があります。
これを無視してこの後の作業をすると、揺れものの配置によっては髪の毛が浮き上がって変な形になってしまう可能性があるので、以下の作業を行う必要があります。
▲正常な状態(VRoidStudioで撮影)
▲衝突半径が未反映の状態(Vmagicmirrorで撮影)
1.5-1)UniVRMでUnityにVRMをインポート
1.5-2)シーン上にインポートしたVRMのprefabを配置
1.5-3)ヒエラルキー上の「モデル名」>「secondary」にあるSpring Boneの設定でComment欄が「Hair」となっている項目の「Hit Radius」の値をVRoid Studio側の「衝突半径」と合わせる(ボーングループの順番はおそらくUnity側とStudio側で同じ)
>1.5-3の手順が面倒な場合は揺れもの設定でボーングループの重力を「0」にしてエクスポートし、Unity上でHit Radiusを全部「0」にすれば(VRC上では)最終的には問題ないはずです。
1.5-4)UniVRMで上記修正をおこなったprefabをエクスポート
ここでエクスポートしたVRMを使用します
2.足のボーンをモディファイアで修正する
これは以前よりよく言われていることでご存じの方も多いかと思いますが、VRoidからエクスポートしたVRMファイルは特に下半身のボーンの配置がVRC向けではないため、そのままコンバーターなどでVRC用に変換してアップロードすると足がねじれたりする現象が発生します。
これを回避するため「VRoidLegModifierForCluster」というツールでまず足の姿勢を修正します。
導入方法や利用方法は製作者の方の記事に記載がありますのでそちらを参照すると分かりやすいかと思います。
*ちなみにこれはもともと別のVRSNS「Claster」で一時的に発生していた問題を回避するためのツールだったんですが、発生原因と解決策がVRCのフルトラ問題と同じだったので流用できちゃった、ということだそうです。
はぇ~~
変換したファイルが出来上がったら下ごしらえ完了。ここからいったんBlenderでの作業になります。
手順2.Blenderでボーン他諸々を修正する
Blenderを初めて触る方はまず以下の通り下準備をお願いします。
1.Blenderをダウンロード/インストール
(2021/11/28現在のバージョンは2.93.6/未検証ですがたぶん今回使用するアドオンは問題なく利用可能かと思います/気になる方はここから過去のバージョンを確認できますのでそちらを参照しましょう)
2.アドオンの導入
・cats-blender-plugin
・VRM Add-on for Blender(旧名:VRM_IMPORTER_for_Blender)
>両方ともVRM Add-onに記載のある手順でダウンロードしたzipファイルを指定してあげれば問題なく導入できるはずです。
【注意】DLしたプラグインのzipファイルは解凍する必要はありません!
アドオンが導入出来たら作業開始です。
3-1)Blenderを起動➡最初に出てくるキューブを選択して削除
3-2)「File」➡「Import」➡「VRM」でモディファイアから保存したVRMをインポート
3-3)インポート後、下記画像の印のところをクリック
3-4)出てきたメニューから「CATS」を選択し「Fix Model」を選択
*この時何かエラーっぽい文言が赤い文字で出たりした場合はおちついてもう一度FixModelをおせば何とかなる気がします。
3-5)「Visemes」の項目を開き、上から順番に「Fcl_MTH_A」「Fcl_MTH_O」「Fcl_MTH_I」を選択し「Criate Visemes」
ここまでは決められたスイッチを押す作業なので手順を間違えなければそこまで手間ではなかったかと思います。
ここから先が少し手間なのでご容赦ください。
3-6)「オブジェクトモード」から「エディット(編集)モード」に切り替え
3-7)下図1のオレンジ色のボーンを図2のとおり編集する
(細かい数値の指定はありません。基本目分量で大丈夫ですが極端にいじるとたぶん破綻します)
▲図1
▲図2
2021/12/06訂正:ShoulderのZ軸はEndの値をHeadにコピペで大丈夫です
2021/12/09訂正:ChestのTail修正は不要…かもしれません(未検証)ただ、腰ねじれの原因がChestの長さにある可能性が高いので、手順としてはそのまま残します。
▲図6 Spineの「Tail」Chestの「Head」を選択していっしょにMoveで動かすと楽です。
2021/12/06訂正:SpineとChestの接合部は前後に動かすと背骨が折れます。上下にだけ動かしてください。
2021/12/08訂正:HipボーンがSpineに埋まるようHip側を手前に動かしてください。*下記図7参照
実施しない場合背骨が折れます。
おまけQ&A
Q:なぜこのようにボーンを弄るとフルトラ対応できるんでしょうか?
A:私もBlender素人なので原理はよくわかりません。
前述した参考資料のFBXモデルのボーンと見比べて、見よう見まねで同じ感じにした結果うまくいった、といった感じです。なので、不要な手順が含まれている可能性があります。ご容赦ください。
3-8)CATSのメニューから「Export Model」を選択
*VRoidでマテリアルを結合していない場合下記画像2枚目のような警告が出ますが、無視して「Continue to Export」で大丈夫です。
3-9)保存先のフォルダを選択し、ファイル名を入力して「Export FBX」
*画像赤枠の部分は必ず「モデルが向いている方向」を指定しましょう。
デフォルトであれば「-Y」が正しい向きになっているはずです。
これでBlenderでの作業は終了です。おつかれさまでした。
FBXデータをアバターにしたことがある方はたぶんこの後の説明は不要だと思います。
ただ、ここまでしっかりお読みになった方はおそらく今までVRMモデルをVRMConverterで変換して調整されていた方々だと思いますので、ここから先もしっかり書きます。
手順3.UnityでVRCにアップロードする
まずは準備から
VRCSDKをインポート済みのプロジェクトに、以下のアセットをインポートしてください。
・VRCAvatarEditor beta
・DynamicBoneInspector
・【VRC想定】VRoid向け手のAnimation 15種類+着席用Animation 2種類【CC0】
・Avatars3.0 Vroid Layers
準備ができたら作業開始です。
1.大元のVRMをインポート
テクスチャとマテリアルを取り出すためです。手順1-1.5で揺れもの調整のためにVRMをインポートしている場合はそれをそのまま流用しても構いません。
散らかるのを避けるため、テクスチャとマテリアル以外のデータはいったん削除したほうがいいです。
▲フォルダ分けは大事
2.手順2でエクスポートしたFBXをD&D
ここからまた少しFBXをいじります。
3-1)FBXの「Model」設定で「Read/Write Enabled」を有効「Blend Shape Normals」を「None」に変更し「Apply」
3-2)「Rig」設定で「Animation Type」を「Humanoid」に変更し「Apply」
3-3)「Rig」設定の中の「Configure...」ボタンを選択
この時シーンファイルの保存が促される場合はそのまま新しいシーンファイルとして保存しましょう
3-4)「Head」メニューの「Jaw」に割り当てられているボーンを削除
必要ない作業かもしれませんが邪魔なので…
髪の毛に揺れもの設定してないモデルはこの作業は不要です
3-5)「Body」メニューの「Left shoulder」「Right shoulder」をそれぞれ選択し、「Transform」メニューで「Position」のYの値を0.01上げる
所謂「なで肩回避」のおまじないです。デスクトップモードだと逆に怒り型ぎみになるかもしれないのでここはお好みで
3-6)「Apply」➡「Done」で変更を適用し保存
この操作をしたあとinspectorが画像のような状態になって何も表示できなくなった場合は、赤枠で囲ってある鍵マークのアイコンをクリックすれば元に戻ります。
3-7)「Material」設定でVRMから抽出したマテリアルをD&Dで適用➡「Apply」
自動でやる方法もありますが手動が一番安全です。
マテリアルのシェーダーはお好みで変更しましょう。今回はUntoonを利用しています。
これでFBXの編集は終了です。
4.編集したFBXをシーン上にD&D
5.ダイナミックボーン、コライダーを設定
コンバーターが自動でやってくれていた部分です。今回は自分でやります
①髪の毛の根源部分のボーンをまとめて選択
②「Add Component」から「DynamicBone」を選択
③DynamicBoneInspectorを導入していれば画像のように「RootにこのTransformを選択」と出ている筈なのでこれを選択
これで髪の毛のボーンにDynamicBoneが適用されました。
④このあたりの数値はお好みで調整してください。画像は私の好みの数値です
⑤重力設定です。いろいろと調整が手間なので今回は割愛
⑥このボーンと接触判定のあるコライダーの数
今回はhead、neck、chestにコライダーを仕込みます
⑦先ほどと同じ要領で今度はコライダーを設定する箇所を選択し
⑧「Add Component」からコライダーを選択
コライダー自体の調整はいろいろあって長くなるので割愛します。このあたりがよくわからない方は以下の記事がよくまとまっているかと思います。
6.アバター設定
ここまでくれば勝ったも同然です。頑張りましょう。
①ヒエラルキーの一番上の階層を選択
②「Add Component」から「VRC Avater Descriptor」を選択
③View Pointについてはいまさら言うべきところでもないので割愛。
SDK3触るのがはじめて、と言う方、SDK2と大して変わらないので身構えなくても大丈夫です。
④リップシンクは、ここまでの手続きを滞りなく行っていれば「Auto Detect!」を押すだけで自動的に最適なものが適用されます。
VRCAvaterEditorでハンドサイン等調整
詳しい使い方は下記配布ページにオンラインマニュアルのリンクがあるのでそこを参照しましょう
ハンドサインはこちらを使います(ご存じの通りデフォルトのものだと指が破綻しがちなので)
表情設定が終わったらAvaterDescriptorの下部が画像の通りになっているので、「Base」の項目に今回は下記を適用します
あとは通常通りVRCSDKのコントロールパネルからアップロードで完成です。お疲れさまでした!
おわりに
いかがでしたか?
いままでConverterだけでどうにかしていた方には長い道のりだったかもしれませんが、文書化すると長々しいだけで作業量はそんなにないです。2~3回同じことをやれば覚えられる手順だと思います。
なお、今回の記事で作成したアバターは「古山寅子」という名前でpublicアバターにしていますので、試したい方はVRCID「がそさん」(Twitter:@gasoko0150)までお声掛けください。
この記事が気に入ったらサポートをしてみませんか?