bdunderscore / modular-avatar

Other
476 stars 61 forks source link

Transform系変更のUndo/RedoがSync Bones in Edit Modeによって壊れる #839

Closed Sayamame-beans closed 3 weeks ago

Sayamame-beans commented 4 months ago

(恐らく衣装/アバターのボーンのScaleが一致していない場合(衣装だけUnity上でArmatureのScaleが100など)や、Rotationが揃っていない場合などに起きていそうな感じがあります。)

Sync Bones in Edit Modeが有効のとき、衣装ボーンに対するTransform系変更処理(MAだとMove IndependentlyやMA Merge ArmatureによるボーンPos/Scale変更など)に対しUndo/Redoを行うと、衣装の位置がズレたり回転したりといった現象が複数回/複数人で観測されています。 再現の一貫性が微妙なのですが、ローカル座標系などの取り扱いに問題がありそう…?

例えばMerge Armatureでは場合、アバター=>オブジェクトの片方向追従が有効の状態で、衣装ボーン(HipsやSpineなど)の位置を動かしたり、回転させたりしたものをUndoすると正しくUndoされなかったりします。 衣装のArmature Scaleが100,100,100の場合にHipsボーンを動かし、Undoすると、Undo時にHipsのScaleが100,100,100に変更されたり…(元のHipsは1,1,1) 位置の場合はそれで、回転をUndoしようとした場合は回転自体はUndoされず、ただただScaleがおかしくなるように見えます。

(このような現象は"位置を~リセット"の実行によるTransform変更に対してのUndo/Redoでも発生する場合があります。)

この現象は、Undoを続けていって最終的に当該コンポーネントの付与がUndoされてコンポーネントが無くなったタイミングなどに正しいTransformに戻ります。 逆に言えば、コンポーネントの付与がUndo出来ない状態であると、Undoによる復元が不可能になる可能性があり、これは非破壊性の観点で大きな問題があります。その衣装以外に変更した箇所があった場合、その進捗を捨てて保存せずに再起動するか、その衣装GameObjectを消して入れ直すことになり得ます。

ref: https://misskey.niri.la/notes/9svrt461q6 https://misskey.niri.la/notes/9slz3776gn https://misskey.niri.la/notes/9su6g9c5jg

env: Unity 2022.3.6f1 NDMF 1.4.0 MA 1.9.12

Sayamame-beans commented 2 months ago

衣装の位置がズレたり回転したり

発生例の1つとして アバターのRotationが(0, 0, 0)、かつ、衣装(Armature)のRotationが(-90, 0, 0)の時、衣装ボーン位置調整後Undoで衣装の位置が回転しました。