vrm-specification
vrm-specification copied to clipboard
VRMSpringBoneのCenterの初期値はVRMローカルの方が良い
VRMSpringBoneのCenterは特に指定がなければ ワールド原点座標になりますが、 今までアバターの運用上、VRMローカルに指定できるオブジェクトを作成して指定する部位の方が圧倒的に多くなっています。
Centerになにも指定していない場合、移動時に 前髪が捲れたり頭にめり込む、胸がへこんで胴体にめり込む、スカートがめり込み腰を貫通する、など揺れ物を適用するほとんどの部位でコライダを回り込み破綻する原因になっています。
これらのアバターユーザーが避けたがる挙動はVRMローカル原点にrootを作ってCenter指定することでほとんどが解決可能です。
逆に移動時になびいてほしい部位はそのままワールド基準に揺れることが望まれますが、上記のVRMローカル基準で揺れて欲しい場合に比べると非常に限定的なものとなっています。
よって、VRMローカルをCenterの標準とし、サブオプションとして is World となるほうがよりコライダーの数を節約したアバターの製作をしやすい環境になります。
既存の仕様の変更について、デフォルト値の変更は破壊的変更となるため、これを行うことはしません。
アバターの設定をUniVRM上で行っているのであれば、UniVRMに対して、すべてのSpringBoneのCenterを一括で変更できる機能等を提供することはできると思いますが、いかがでしょうか?
現在、VRMのルートオブジェクトををCenterに指定ができません
VRMのルートオブジェクト(上図で言うとSDmnds00)をCenterに指定した場合、エクスポート時には外れてnoneになっています。 VRMのルートオブジェクトをCenterに指定したままエクスポートできるようになる、 またはそれに準ずる機能があればなと思います。
現状、ルートオブジェクトの子にCenter指定用のオブジェクトを新たに作成してから、それを指定しなければならず、知識の少ないユーザーには難しく、慣れたユーザーでも人によってその方法が多岐にわたります、これはアバターの個性や表現とは関係の無い無駄なバリエーションと言えます。
報告ありがとうございます。いただいた挙動は、UniVRM側でも未確認の挙動となりますので、VRMコンソーシアムで調査をさせていただきます。
取り急ぎ、UniVRM側にIssueを作らせていただきました。UniVRMのバージョン情報等分かれば、こちらで報告頂けますとたいへん助かります。 https://github.com/vrm-c/UniVRM/issues/2314
現状のSpringboneの挙動は2018年あたりのバーチャルキャスト初期であれば、挙動に対して気にすることはありませんでした。その後コントローラーによる座標移動が実装され、clusterなどのワールドを走り回るアプリが登場しましたが、VRMSpringboneの動作について検証やアップデートがされてないように感じます。
本件について、vrm.dev内にcenterの設定方法について解説したドキュメントを公開しました。 https://vrm.dev/univrm1/vrm1_tutorial/springbone/center/
現状のSpringboneの挙動は2018年あたりのバーチャルキャスト初期であれば、挙動に対して気にすることはありませんでした。その後コントローラーによる座標移動が実装され、clusterなどのワールドを走り回るアプリが登場しましたが、VRMSpringboneの動作について検証やアップデートがされてないように感じます。
centerの挙動については、VRMの仕様として定められているものであり、この挙動を変更することは破壊的変更となります。実装やバージョン間での挙動の違いが発生し、ユーザに混乱を与えるため、受容できません。