-
Notifications
You must be signed in to change notification settings - Fork 424
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[exporter][blendshape][bake] 基準メッシュバグ #2466
Conversation
BlendShapeを上げた状態を基準にbakeすることができない。 blendshapeが一個進むごとに基準meshが変わる動きになりうる!
#2465 の挙動について理解はするのですが、この修正によって意図しない挙動となるパターンもあるかと思います。
ということです。 この PullRequest 以外の解決方法としては「Pose Freeze で BlendShape がベイクされる挙動をやめる」があるかなと思います。
しかしそれはそれでデメリットはもちろんあります。 この問題は UniVRM 仕様としての決めの問題なので、自分としてはどちらがいいのかという意見は持ちませんが、どちらを是とするのかは決めていただければと思います。 |
Pose Freeze と Morph Freeze を別のオプションにしようと思います。 |
var meshFreeze = ToggleIsModified("FreezeMesh", ref MeshUtility.FreezeMesh); | ||
var meshFreezeKeepRotation = ToggleIsModified("FreezeMeshKeeprotation", ref MeshUtility.FreezeMeshKeepRotation); | ||
var meshFreezeUseCurrentWeight = ToggleIsModified("FreezeMeshCurrentBlendShapeWeight", ref MeshUtility.FreezeMeshCurrentBlendShapeWeight); | ||
return meshFreeze || meshFreezeKeepRotation || meshFreezeUseCurrentWeight; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BlendShapeRotationScaling が 3つに分離。
- FreezeMesh
- suboption: FreezeMeshKeeprotation(回転を残す正規化)
- suboption: FreezeMeshCurrentBlendShapeWeight(blendShape bake)
FreezeMeshKeeprotation は実装していたけど外出ししていなかった(
bakeのバグが難航していたため)
@@ -120,7 +120,7 @@ Transform[] dstBones | |||
return newBoneWeights; | |||
} | |||
|
|||
public static Mesh NormalizeSkinnedMesh(SkinnedMeshRenderer src) | |||
public static Mesh NormalizeSkinnedMesh(SkinnedMeshRenderer src, bool bakeCurrentBlendShape) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bakeCurrentBlendShape を追加して、
MeshFreeze 時に BlendShape を焼くか否かを明示するようにしました。
ここに引数を伝達するために呼び出し側に波及しています。
@@ -237,7 +257,7 @@ private static void BakeBlendShapes(SkinnedMeshRenderer src, Mesh mesh) | |||
throw new Exception("different vertex count"); | |||
} | |||
|
|||
src.SetBlendShapeWeight(i, backcup[i]); | |||
src.SetBlendShapeWeight(i, blendShapeBase == null ? 0 : blendShapeBase[i]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bake するときは base 状態に復帰し、
bake しないときは 0 にクリアする。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
場所によって bake
と freeze
の名称が五分五分で使われているのが気になりました。
使い分けがあるなら大丈夫です。
bake はテクスチャー用語ぽい。 |
https://docs.unity3d.com/ja/2023.2/ScriptReference/SkinnedMeshRenderer.BakeMesh.html |
fixed #2465
blendshapeを変化させた状態で bake したときに、
最初に 0 クリアすることで base mesh が意図したものではなく、
すべて 0 のもになる。
かつ、ループが進むごとに変化状態に復帰する bug。
0.x
,1.0
で発動