vrm-c / vrm-specification

vrm specification
243 stars 37 forks source link

VRMC_springBone_extended_collider-1.0はドラフト仕様ですか? #469

Closed FujiSunflower closed 5 months ago

FujiSunflower commented 6 months ago

VRMC_springBone_extended_collider-1.0は検討中の草案でしょうか? それともmasterブランチにマージされているのでいずれ追加するのは決定済みでしょうか? https://github.com/vrm-c/vrm-specification/blob/master/specification/VRMC_springBone_extended_collider-1.0/README.ja.md

追加が決定済みだった場合、アプリケーション開発者での差異への対処が必要となるかなと思います。 https://vrm.dev/vrm/vrm_about/

VR でのアバター表現が急速に盛り上がるなか、こういった状況が続くとアプリケーション開発者にとっても、3D モデルクリエイターにとっても二度手間三度手間になってしまいます。 この状況を改善するために

「人型のキャラクターやアバター」において
細かいモデルデータの差違を吸収・統一し
アプリケーション側の取り扱いを簡単にする

「VRM」は、このような特徴のある「プラットフォーム非依存の 3D アバターファイルフォーマット」を提案する ものです。

0b5vr commented 5 months ago

VRMC_springBone_extended_collider-1.0 は、現在VRMコンソーシアム内で検討中のdraft仕様です。

本拡張は、既存のSpringBoneの挙動を拡張するものであり、SpringBoneに対して表現力を高めつつ、後方互換性・前方互換性はなるべく保つ形で策定しています。 前方互換性について、詳しくは仕様内のImplementation Noteを参照してください。

アプリケーション開発者は、モデルのSpringBoneをランタイムで制御するような実装を行っていない限り、将来的なUniVRMのバージョンアップで対応が可能な範疇の変更となると思います。

FujiSunflower commented 5 months ago

issueがあまり複雑になると困るので気になる箇所を一点だけ書かせて頂きますと、フォールバックのコライダーという考え方です。ドキュメントの読み違えかもしれないですが、VRMC_springBone_extended_colliderに対応していないアプリの場合は書き出し時にフォールバックとして追加された標準のSphere Colliderを読み込むように感じました。Inside Sphere ColliderはVRM 1系での標準のSphere Colliderと真逆の挙動をします。Inside Sphere Colliderの書き出し時にフォールバックとして標準のSphere Colliderが追加されるのなら、アプリによってはVRM作者の想定と真逆の挙動になるかなと思います。フォールバックではなく対応していないアプリでは拡張は無視されるというのが自然かなと思いました。 ちなみに、真逆の挙動になるのでは?という疑問が「アプリケーション開発者での差異への対処が必要となるかなと思います。」という考えに繋がっています。

Implenentation Note: plane コライダーを定義する際、 VRMC_springBone_extended_collider に対応しない環境においてフォールバックのコライダーでも平面コライダーに近い挙動を実現できるよう、半径を十分に大きくした球コライダーとするなどの回避策を検討してください。

Implementation Note: 内部コライダーとなる球・カプセルコライダーを定義する際、 VRMC_springBone_extended_collider に対応しない環境においてフォールバックのコライダーが影響を及ぼさないよう、位置を原点から遠く離した球コライダーとするなどの回避策を検討してください。

FujiSunflower commented 5 months ago

検討中のdraft仕様という返答は頂いたのでCloseしておきます。

0b5vr commented 5 months ago

VRMC_springBone_extended_colliderに対応していないアプリの場合は書き出し時にフォールバックとして追加された標準のSphere Colliderを読み込むように感じました。Inside Sphere ColliderはVRM 1系での標準のSphere Colliderと真逆の挙動をします。Inside Sphere Colliderの書き出し時にフォールバックとして標準のSphere Colliderが追加されるのなら、アプリによってはVRM作者の想定と真逆の挙動になるかなと思います。フォールバックではなく対応していないアプリでは拡張は無視されるというのが自然かなと思いました。

当該Implementation Noteにあります通り、フォールバックのSphere Colliderは揺れものに対して影響を及ぼさないように原点から遠く離した球コライダーとすることを推奨しています。本当はフォールバック環境においてコライダーを追加しないような挙動ができれば一番良いのですが、それが実現できないため、コライダーを原点から遠く離すことによってコライダーがない状態を擬似的に再現しようとしています。

具体的な例を仕様内glTF Schema Updatesの冒頭のJSON例に記載しています。 この例では、インサイドコライダーに対するフォールバックを半径が0・位置が(0, -10000, 0)となるSphere Colliderとして定義し、擬似的にフォールバック環境でのコライダーを無効化しています。