vrm-c / vrm-specification

vrm specification
235 stars 37 forks source link

[1.0] Expressions MorphTargetBind where initial morph value is not zero #315

Closed 0b5vr closed 3 years ago

0b5vr commented 3 years ago

279 の検討中に一件気になった箇所を共有します。

現状、MaterialColorBindおよびTextureTransformBindについて、初期状態に対して値を加算するという仕様になっていますが、 MorphTargetBindについても、 mesh.weights を考慮し初期状態に対して差分を加算するという仕様にするのが適切と思いました。

0b5vr commented 3 years ago

@ousttrue ごめんなさい、揚げ足取りのようで申し訳ないのですが、本件お目通しいただけますと幸いです。

ousttrue commented 3 years ago

これはやりたくないです。

すでに0に比べて実装するのが大変になってます。

@FMS-Cat

ousttrue commented 3 years ago

要するに bake してください 🙏

0b5vr commented 3 years ago

それはmesh.weights自体の利用を非推奨としたいという話でしょうか?

0b5vr commented 3 years ago

@ousttrue 上記どうでしょうか?mesh.weightsについてのVRMにとっての方針を確認したいです。

ousttrue commented 3 years ago

私見

なので、非推奨を明示するのを怠ってしまったと言うべきかもしれません。

ousttrue commented 3 years ago

@FMS-Cat

VRM実装は、下層の BlendShape(MorphTarget) を BlendShape(Expression) でラップしていて、直接操作しない(他の経路で変わらない)というのが前提となっております。特に書いてないですが。

初期値の概念が難しくなるのを懸念しております。 初期値が 0 でないとすれば、 awake, start で取得する(早すぎる、遅すぎる問題、async load(SpringBoneの初期化でISSUEがあります)、 enable, disable との関連)、シーンの値か、prefabの値か、vrmに格納されている値かなどの問題。

0b5vr commented 3 years ago

GLTFの実装方針としては難しくなりますね。 正直、実装としてはインポート時に焼き込む、もしくは対応しないという方針でも良いと思うのですが、 VRMの仕様としては他のExpressionsのBindに合わせて、初期値との差分を用いるとしたほうがクリーンかと思いました。

0b5vr commented 3 years ago

本件、donmccurdy先生にお伺いしましたが、Animationのweightは mesh.weights を上書きするようです。なので、やはりmorphTargetBindについては0を基準とするので良さそうな気がしてきました。 一方で、 mesh.weights の意図としては、モーフにweightをデフォルトで入れたいモデルもあり得るのではないかと回答をいただきました。

参考URL:

https://discord.com/channels/685241246557667386/686304808994340865/877935212619771975 https://discord.com/channels/685241246557667386/686304808994340865/877968124278865970