Simulation Updates Component Transform Issue

For skeletal meshes using Simulation Updates Component Transform it doesn’t appear to take into account the root bones offset. If the root bone is not rotated with the world and set to 0,0,0 in the skeletal mesh than when the simulation component transform happens it treats it like it is and gives it the wrong component transform. It should be offsetting the component transform by the root bones offset as well.

You can see the issue by taking the basic FPS arms which have an offset root bone, setting them to simulate in blueprint and then setting them to not simulate afterwards, they will snap to an offset of the root component instead of remaining in the correct location (stopping simulation makes it use the component transform that has been updated incorrectly).

Could also be checked by attaching the arms to anything while simulating using world location. They will attach with the extra offset of the root bone.

Hi mordentral,

Apologies if I’m not understanding the issue correctly, but with Simulation Updates Component Transform (SUCT) enabled, disabling physics is expected to make the component follow the root. Is that not what you’re seeing.

Can you clarify the issue for me?

It does, but it treats the root as if it had zero rotation and zero translation. So if the root is rotated or offset from local space zero then the object snaps to the roots offset when it ceases simulation.

IE: It will be in one place resting during simulation, stop simulation and it snaps to a different rotation and location due to the root offset / rotation.

The function that updates the component transform during simulation doesn’t take into account root local transform.

Hi mordentral,

I have been looking into this with one of our engineers and it appears we made some changes for 4.14 in this regard. I tested my example project in 4.14 with drastically different results after disabling simulation.

I was wondering if you could create a copy of your project in 4.14 (on github) and see if the issue is resolved?

I don’t know if you’re using a code project, but here is the diff for SkeletalMeshComponent.cpp if you’d like to implement the fix into 4.13. The line numbers might be different as many changes were made between 4.13 and this submission.

Or wait for 4.14

Diff

That appears to be far cleaner and it works as expected. The problem is gone using that transform code instead of what 4.13 has implemented.

I’ll use the new function body and look forward to it being natively correct in 4.14.

Thanks

Long ago, so here goes nothing.
This is happening again in 5.4.1