vrm-specification
vrm-specification copied to clipboard
Add IPD property to extensions.VRMC_vrm.lookAt
ヒューマノイドの目は距離の近い物体を注視するときは寄り目になる挙動が望ましい。
しかし現行の VRM は両目の向く角度が同じになる挙動である。
これは現状の LookAt システムのキャラクタ属性情報の不足ゆえキャラクタの瞳孔間距離距離を勝手に推測せざるをえず、それは汎用には適用できないからである。
そこで extensions.VRMC_vrm.lookAt に ipd つまりキャラクタの瞳孔間距離のパラメタを追加し、これを実現する。
口頭で議論を行いました。 ipd で実現する方針で仕様を追記します。
こちらの提案なのですが、挙動に関して想定漏れがありました。
VRM の LookAt 定義は Bone と Expression の2つによって実現されますが、Expression を使う場合に「より目」の挙動を実現するには、ipd の定義だけでは定義不足だという点がわかりました。
この提案の「より目にする」と言うのは要は「左右の目それぞれ別の方向を向けるようにする」ということだと思います。
この際、Bone の定義は左右の目それぞれに Bone があるので、実現ができます。
しかし Expression の定義は左右の目を同時に1変数で動かすことしかできないため、前提として実現ができません。
これをどうにかするには LOOK_(UP|DOWN|LEFT|RIGHT) の4種類ではなく LOOK_(UP|DOWN|LEFT|RIGHT)_(LEFT|RIGHT) の8種類が必要だということになってしまいます。
必要性があるならば増やすのもやむを得ないとは思いますが、問題は後方互換性をとるのがとても複雑になるということです。
まとめると以下の選択肢のうちどれかを取る必要があると思います。 この点、再度議論に差し戻していただけないでしょうか。
- 提案を取り下げる
- 提案はそのままで、IPD のパラメタは Bone の LookAt にのみ適用され、Expression の場合は無視する
- 提案に加えて Expression に追加の定義をし、Expression でも適用できるようにする(が、後方互換性が複雑)
- 他にいい定義があれば……
vrm-1.0 ではちょっと先送りして様子を見る。
UniVRMのコンポーネントは先行して実装を入れておく。
LookAt コンポーネントとして、SetYawPitch(yawL, pitchL, yawR, pitchR) のような4引数版を実装する。
EyeBone がある場合は注視点に対して、Eyeボーン位置を基準に左目・右目独立して yaw, pitch を計算し4引数版を使う。
Expression による LookAt の場合はとりあえず据え置き。
需要があったら、ExpressionPreset.Custom + (Left|Right)Eye(Up|Down|Left|Right) で動くようにする。(その場合、ipdは6.5cm)等の固定値で。
さらに需要があれば、JsonSchema への ipd 値の追加をする。
ひとまず v1.0 のマイルストーンから外します。