UniVRM icon indicating copy to clipboard operation
UniVRM copied to clipboard

スケールを変更するとSpringBoneが正しく動作していない?

Open TakafumiYuasaHL opened this issue 8 months ago • 1 comments

環境情報

  • UniVRM version: 0.124.2
  • Unity version: Unity-6000.0.40f1
  • OS: Windows 11

バグについて

  • バグの内容 モデルのScaleを変更すると、SpringBoneが正しく動作していないように見えます。 分かりやすいのは、Scaleを極端に小さくした時に意図しない状態になっていそうです。

  • ConsoleLog 特になし

  • スクリーンショット

Image

  • 再現方法 モデルのScale値を変更する。

  • その他 試しに、Runtime/Components/SpringBone/VRM10SpringBoneJoint.csへ以下を追記すると、一見するとそれっぽく動作しているように見えますが、Startで行っているため、

  1. 実行中のスケール変化には対応できない
  2. そもそもこの対応で良いのか?

といった事がわかっておりません。

private void Start()
{
    float avrgScale = (transform.lossyScale.x + transform.lossyScale.y + transform.lossyScale.z) / 3f;
    m_stiffnessForce *= avrgScale;
    m_gravityPower *= avrgScale;
    m_jointRadius *= avrgScale;
}

TakafumiYuasaHL avatar May 01 '25 03:05 TakafumiYuasaHL

https://vrm.dev/api/springbone/vrm1/IVrm10SpringBoneRuntime/

に関連情報があります。 以下の関数でスケール変更後などに最初期化ができます。

vrm.Runtime.Springbone.ReconstructSpringBone();

また以下の関数で目的が達成できるかもしれません。

Vrm10Instance vrm;
vrm.Runtime.Springbone.SetModelLevel(vrm.transform, new {
  SupportsScalingAtRuntime = true, // <-- スケールの挙動変更。角速度を維持するようにロジックが変わる
});

ousttrue avatar May 12 '25 07:05 ousttrue