Closed 0b5vr closed 3 years ago
@ousttrue ごめんなさい、揚げ足取りのようで申し訳ないのですが、本件お目通しいただけますと幸いです。
これはやりたくないです。
ランタイムロードはともかく、アセットロードでトラブルの元になりそうです。
Unity で、シーンのインスタンスではなく prefab に対して blendShape の初期値を設定してアセットして保存できるかどうかわからないことと、できたとしてもユーザーにとってシーンの変更か、アセットの変更かの区別が付きにくく、 また、保存されるタイミングが不明瞭になるなど、アセットのライフサイクル上のトラブルを抱え込む。blender 等のインポーター・エクスポーターでも困るのではないでしょうか。
すでに0に比べて実装するのが大変になってます。
@FMS-Cat
要するに bake してください 🙏
それはmesh.weights自体の利用を非推奨としたいという話でしょうか?
@ousttrue 上記どうでしょうか?mesh.weightsについてのVRMにとっての方針を確認したいです。
私見
mesh.weights
の存在自体をすっかり忘れていたなので、非推奨を明示するのを怠ってしまったと言うべきかもしれません。
glTFMesh.weights
のシリアライズはあるが、アクセスは無い(使ってない)@FMS-Cat
VRM実装は、下層の BlendShape(MorphTarget) を BlendShape(Expression) でラップしていて、直接操作しない(他の経路で変わらない)というのが前提となっております。特に書いてないですが。
初期値の概念が難しくなるのを懸念しております。
初期値が 0 でないとすれば、 awake
, start
で取得する(早すぎる、遅すぎる問題、async load(SpringBoneの初期化でISSUEがあります)、 enable, disable との関連)、シーンの値か、prefabの値か、vrmに格納されている値かなどの問題。
GLTFの実装方針としては難しくなりますね。 正直、実装としてはインポート時に焼き込む、もしくは対応しないという方針でも良いと思うのですが、 VRMの仕様としては他のExpressionsのBindに合わせて、初期値との差分を用いるとしたほうがクリーンかと思いました。
本件、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
279 の検討中に一件気になった箇所を共有します。
現状、MaterialColorBindおよびTextureTransformBindについて、初期状態に対して値を加算するという仕様になっていますが、 MorphTargetBindについても、
mesh.weights
を考慮し初期状態に対して差分を加算するという仕様にするのが適切と思いました。