ImmediatePhysicsモードでのLinearLimitsの挙動について

長い紐のような揺れモノをPhysicsで制御したいと考えています。
キャラクターに付随しており、移動に引っ張られて少しだけ伸縮します。

通常のPhysics(メッシュのCollisionEnabledを「Query and Physics」に設定)では目的の挙動を実現できたのですが、
同じPhysicsアセットを適用した状態でImmediatePhysics(AnimBPでRigidBodyノードをWorldSpaceで使用)で動かすと、伸縮具合が大きく変わってしまいます。

PhysicsアセットのLinearLimitsを調整してみたのですが、Limitの値を変更してもほとんど挙動に変化が見られません。
この挙動の違いは意図的なものなのでしょうか?
また、通常のPhysicsと同様の挙動を再現するためにはどのパラメータを調整すればよいか等、アドバイスを頂けないでしょうか。

ThirdPersonテンプレートを元にしたサンプルプロジェクトを添付致します。
Playした直後は通常のPhysicsで動作しています。
キーボードの「1」キーを押すとImmediatePhysicsモードに切り替わり、大きく伸びるようになってしまいます。
ImmediatePhysicsモードで、Play直後と同様の挙動を実現することが目的となります。

よろしくお願い致します。
link text

ImmediateモードでのConstraintのLinear LImitsのLimit値ですが、0.1を境に大きく挙動が変わるようです。
0.09999 ではほんの僅かしか伸縮しませんが、0.1を超えると極端に伸びるようになります。
添付したサンプルプロジェクトでは10に設定していますが、100など極端な値を入れてもほとんど挙動が変わりません。

お世話になっております。
サンプルプロジェクトをご提供頂きありがとうございます、こちらでも確認することができました。

この挙動の違いは意図的なものなのでしょうか?

仰る通りLinearLimitsのLimit値は0.1以下の場合、たとえLCM_Limitedに設定していたとしてもLCM_LockedとしてJointには設定されます。これは現状意図的にClampを行っています(詳細はFLinearConstraint::UpdateLinearLimit_AssumesLockedをご確認下さい)。

また、通常のPhysicsと同様の挙動を再現するためにはどのパラメータを調整すればよいか等、アドバイスを頂けないでしょうか。

Limit値が1fで許容する2つのjoint間の距離の値であるため現状の10よりも小さくして頂き、更にLiner LimitのパラメータはSkeletal Meshの初期化でしか更新されないので、Collision Enableを変更された際にはLiner Limitを再更新するためにSetPhysicsAssetによってPhysicsを再設定することで同じ挙動を維持できるかと思います。
よろしくお願いします。

パッケージ後においても発生すること、既知の不具合として登録されており、直近での対応予定が無いこと、了解致しました。
ただ、エディタではほぼ120fpsで安定していても問題が発生するため、単純にフレームレートだけが条件では無さそうに思えます。

また、調整パラメータについては、
・inertia scale → 0.1~10.0で試すも、見た目にほとんど変化無し
・Parent Dominates → 有効化したところNan値によるensureが発生
という状況でした。

現状での安定動作は難しそうですので、今回はImmediateモードの使用は見送る方向で検討したいと思います。
調査して頂きありがとうございました。

ご確認ありがとうございます。

Limit値が0.1以下の場合の挙動については、Locked扱いとなっている旨、了解致しました。

>この挙動の違いは意図的なものなのでしょうか?

この質問についてですが、Limit値が0.1未満の状況についてではなく、同じPhysicsアセットを使用しているにも関わらず大きく挙動が異なることについてになります。
添付画像のような状況なのですが、御社環境では状況違いますでしょうか?

現状10となっているLimit値を0.2など、0.1以上かつ小さな値にしても、Immediateモードにおいてはこの状況がほぼ変化しません。

よろしくお願い致します。

申し訳ありません、画像まで添付頂きありがとうございます。
その現象自体は頂いていたサンプルで確認できていて、キーボードの「1」キーを押したタイミングでCollision切り替え時にCollision情報は更新されているもののLinearLimitsの情報は更新されていなかったため、Collision切替のタイミングでPhysicsの再設定を行うことで再度LinearLimitsの情報をPhysXに再設定することでPhysicsとImmidiateモードで同じ動作を得られていました。

しかし先程確認した際に、最初からSkeletalMeshがQuery Onlyに設定されたケースや、EditorでキャラクターやPhysicsEditorを開いた状態の場合に(恐らく別で開いているEditor上でのSceneの影響を受けて)まだこの差分が発生することを確認しております。こちら再度確認致しますのでもう暫くお待ち下さい。
よろしくお願いします。

こちらでは、SetPhysicsAssetでの再初期化を行っても結果は変わらないようです。

ただ、条件は特定出来ていないのですが、極稀に「1」キーを押しても挙動が変わらないケースがありました。
その状況になると、ゲームを再実行するまでは何度押しても同じ挙動のままになります。
(LevelBP上ではSetCollisionEnabled, SetPhysicsAssetまで実行されていることになっていました)
この状況は、SetPhysicsAssetの有無に関わらず、かなり低頻度で起きているようで、むしろSetCollisionEnabledが動作していないように見えます。
通常のPhysicsとImmediateが同じ動作をした状況というのがコレが発生した時ではないかと思うのですが、そちらでは再現性がある状態でしょうか?

サンプルでは状況が分かりやすいようにこのような形を取っていますが、動的にモードを切り替える事が目的ではありませんので、何らかの手順を踏むことでImmediateモードでLinearLimitsを反映した状態で動作出来るのであれば、ひとまず大丈夫です。

引き続きよろしくお願い致します。

もう少し繰り返してみました。

SetPhysicsAsset自体は状況には関係無さそうです。
やはり、ほとんどのケースでLinearLimitsが反映されないような挙動になりますが、極稀に通常のPhysicsと同様の挙動を取ります。
同様の状況で繰り返しても不定期に発生するため、規則性は分かっていません。

また、これをWindowsでパッケージしてみたところ、通常のPhysicsとImmediateモードで同等の挙動を取るようになりました。
どうやらエディタ上だけで発生する問題のようです。

ご連絡頂きありがとうございます。こちらでもその規則性が今一つ把握できておりませんが、一先ずパッケージでは問題が無さそうであるということは切り分けとして重要なポイントになるかと思います。
こちらで引き続きこの原因を調査致します、お手数おかけしますがよろしくお願いします。

お世話になっております。
まずEditorで安定していなかった件ですが、元々AnimationのDeltaTimeが安定しない場合にRigidBodyのシミュレーションがおかしくなるという問題が既知の不具合(UE-52509:非公開)がありました。そしてこちらは申し訳ございませんが直近で対応を行う予定が今のところありません。
パッケージにおいて安定しているように見えていた件についてですが、フレームレートを下げて頂く("t.MaxFPS 30"など)と分かりやすいですが問題としては残っていることが分かりました。

そしてこちらも申し訳ございませんが現状完全に一致させるような方法が無いため、パラメータを調整頂く方向で対応をご検討頂けますと幸いです。現状調整に効果があるパラメータは以下の通りです。

・慣性スケールの調整
BodyInstance(Skeletal Mesh Component)のinertia scaleを大きくする
・子から親への作用伝搬を抑止
PhysicsAssetの各Bodyが持つParent Dominatesを有効にする

ご不便をお掛けし申し訳ございませんが、よろしくお願いします。

パッケージ後においても発生すること、既知の不具合として登録されており、直近での対応予定が無いこと、了解致しました。
ただ、エディタではほぼ120fpsで安定していても問題が発生するため、単純にフレームレートだけが条件では無さそうに思えます。

また、調整パラメータについては、
・inertia scale → 0.1~10.0で試すも、見た目にほとんど変化無し
・Parent Dominates → 有効化したところNan値によるensureが発生
という状況でした。

現状での安定動作は難しそうですので、今回はImmediateモードの使用は見送る方向で検討したいと思います。
調査して頂きありがとうございました。