見出し画像

VRM1.0アバターの揺れ物メモ(2023年12月19日)*追記(12月26日)

この記事では、主に1.0系のSpringBoneについて0.x系との違いを間違いやすい点を確認していきます。細かい手順については言及しません。
0系との比較によってセットアップでの混乱を減らすことができれば幸いです。
この記事を書くにあたっての環境は次の通りです。
Unity2021.3.2f1   UniVRM0.116.0


準備:0.x系からのコンバート

 一つ一つSpringBoneをセットアップしていると日が暮れてしまうので今回は0系からのコンバートをします。

0系アバターをプロジェクト内で選択した状態

 Unityに0系のVRMを取り込んだらInspectorにあるMigrate to Vrm1の横のチェックボックスにチェックを入れてApplyをクリックします。

コンバート後

 コンバートが終わったらHierarchyにアバターをドラッグアンドドロップします。

0系と1系SpringBoneの具体的な違い

 0系ではすべてセカンダリの中にありましたが、1系ではまったく別の場所に存在しています。

VRMinstance内にあるSpringBone

 Hierarchy内のアバターの一番親オブジェクトを選択、inspectorVRMinstanceというコンポーネントがあります。
この中のSpringBoneを展開するとColliderGroups、Springsが出てきます。
このSpringsを展開するとずらっと大量に出てきます。

この大量の項目は一つ一つがスプリングボーンの一つの房となっています。

・0系VRM Spring Boneコンポーネントとの比較

0系と1系のコンバート時の比較

 ここで気をつけないといけないのが、上図のように0系でskirtと名前を付けて複数の房を一括管理しているものが全部バラバラになっています、次に細かく一つの房について見てみましょう。

・一本の房についての比較

一房のスプリングボーン

 上図で0系ではRootBonesに一つ根元になるボーンを登録しておけばそれに繋がっているボーンは全自動でしたが、1系では一房を構成するボーン全てを登録します。

 上図の1系で登録されているボーンの横には(VRM10 SpringBone Joint)と書いてあります。
 次はこれについて見ていきます。

・1系からの新コンポーネントVRM10 SpringBone Jointについて

VRM10 Spring Bone Jointの入ったボーンのInspector

 0系で複数の房一括で設定していた各パラメーターがCenter以外すべてここに在ります。
一つの房を構成する全てのボーンそれぞれ細かく設定できる、という訳ですが、逆に言うと全て設定されている必要があります。0系の一括設定で満足できなかった方は気が済むまで細かく綿密に設定することができます。
 角度制限が出来るようになったとかそういったパラメータの種類は増えていませんので、今まで困ってなかった人にとっては物凄く面倒になったデメリットの方が目立つかもしれません。

ColliderGroups

コライダーグループは一旦全部登録して、さらにSpringsにある房全てにそれぞれ個別に設定していく必要があります。ここは特に戸惑うことは無いと思います、違うのはカプセルコライダーが増えたくらいです。
設定が終わってVRMデータを出力した後、そのデータから調整を行う場合
次のようになります。

出力前
出力後

管理しやすいようにコライダーグループを複数名前をつけていても、すべて一つのオブジェクトに統合されます。
ちなみに0系からコンバートしたデータは出力後の状態になっています。

統合されてしまったコライダーグループElement0~3それぞれのプロパティ

内部的にはしっかりと設定が反映されていますが、後から調整をするときは必ずプロパティを開いて一体なんのコライダーグループだったのか確認する必要があります。正直ずらっと同じ名前のオブジェクトが並んでるのに全部中身が違うという状況はイライラします。
見やすい正しい設定方法が他にあるのかもしれません。
知っている方は教えていただけると助かります。
回避するには、エクスポート前の状態を常に保存しておきましょう。


追記:0系→1系変換時の揺れ物の不具合(2023年12月26日追記)

現在、枝分かれしたスプリングボーンの変換でうまく行かない場合があります。
0系のスプリングボーンのrootbone一つから複数に枝分かれしている場合に
二つ目以降の房の根元を親に持つboneにjointが入っていません。
(さらに途中から枝分かれしている場合については未検証)
下の図は実際にjointが抜けるboneの例と、コンバート時に不具合を減らすための0系のスプリングボーンの設定例です。
1系運用する場合は動かなくなるboneにjointを追加してSpringsの正しい位置に登録してあげると従来通りの挙動になると思います。

変換時jointが入っていないbone例 と 変換前での解決策例


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