vrm-c / vrm-specification

vrm specification
235 stars 37 forks source link

VRMSpringBoneのCenterの初期値はVRMローカルの方が良い #470

Open mendosu opened 4 months ago

mendosu commented 4 months ago

VRMSpringBoneのCenterは特に指定がなければ ワールド原点座標になりますが、 今までアバターの運用上、VRMローカルに指定できるオブジェクトを作成して指定する部位の方が圧倒的に多くなっています。

Centerになにも指定していない場合、移動時に 前髪が捲れたり頭にめり込む、胸がへこんで胴体にめり込む、スカートがめり込み腰を貫通する、など揺れ物を適用するほとんどの部位でコライダを回り込み破綻する原因になっています。

これらのアバターユーザーが避けたがる挙動はVRMローカル原点にrootを作ってCenter指定することでほとんどが解決可能です。

逆に移動時になびいてほしい部位はそのままワールド基準に揺れることが望まれますが、上記のVRMローカル基準で揺れて欲しい場合に比べると非常に限定的なものとなっています。

よって、VRMローカルをCenterの標準とし、サブオプションとして is World となるほうがよりコライダーの数を節約したアバターの製作をしやすい環境になります。

0b5vr commented 4 months ago

既存の仕様の変更について、デフォルト値の変更は破壊的変更となるため、これを行うことはしません。

アバターの設定をUniVRM上で行っているのであれば、UniVRMに対して、すべてのSpringBoneのCenterを一括で変更できる機能等を提供することはできると思いますが、いかがでしょうか?

mendosu commented 4 months ago

現在、VRMのルートオブジェクトををCenterに指定ができません

mnds00

VRMのルートオブジェクト(上図で言うとSDmnds00)をCenterに指定した場合、エクスポート時には外れてnoneになっています。 VRMのルートオブジェクトをCenterに指定したままエクスポートできるようになる、 またはそれに準ずる機能があればなと思います。

現状、ルートオブジェクトの子にCenter指定用のオブジェクトを新たに作成してから、それを指定しなければならず、知識の少ないユーザーには難しく、慣れたユーザーでも人によってその方法が多岐にわたります、これはアバターの個性や表現とは関係の無い無駄なバリエーションと言えます。

0b5vr commented 4 months ago

報告ありがとうございます。いただいた挙動は、UniVRM側でも未確認の挙動となりますので、VRMコンソーシアムで調査をさせていただきます。

取り急ぎ、UniVRM側にIssueを作らせていただきました。UniVRMのバージョン情報等分かれば、こちらで報告頂けますとたいへん助かります。 https://github.com/vrm-c/UniVRM/issues/2314

mendosu commented 4 months ago

現状のSpringboneの挙動は2018年あたりのバーチャルキャスト初期であれば、挙動に対して気にすることはありませんでした。その後コントローラーによる座標移動が実装され、clusterなどのワールドを走り回るアプリが登場しましたが、VRMSpringboneの動作について検証やアップデートがされてないように感じます。