Traces fail on perpoly SkeletalMesh using MasterPoseComponent

hello,

I have a modular character composed of Head and Body meshes. the head is the ‘main’ mesh and the body is another component that uses the head as its MasterPoseComponent to sync animations (I set this on my character’s BeginPlay function in cpp)

I’m trying to perform Traces against the character, for which I’ve set the meshes to collide per poly (which I absolutely need for what I’m doing).

The problem is the traces only work against the animated pose of the head, but completely fail to hit the animated pose of the body (and can only trace at the position of the default unanimated A-Pose of the character).

I did some investigation and narrowed it down to the use of a second mesh component with MasterPoseComponent. Using the same body mesh as a separate SkeletalMeshActor with animation traces properly.


Here’s the visual proof, with debug lines that show the trace and debug sphere/diamond to show the trace hits.

Trace against my character, correctly hitting the head mesh (hit is a bit inside the neck because of animation but its there)

Trace against my character, completely going through the hand and failing to hit:

Trace against my character, hitting the arm where it would be if it were in the default unanimated A-Pose:

Trace against a SkeletalMeshActor with only the body mesh, correctly hitting the hand in its animated position:


The only related post I found is [this][5], and I can’t even see this property called ‘Skip Simulating Bones’ to even try.

My traces come from cpp code, and I’m using LineTraceSingleByChannel. but I also tried SweepSingleByChannel, LineTraceMultiByChannel and skelMeshComp->LineTraceComponent, and the results are always the same.

The evidence is there, I’m calling it a bug.

This is in 4.11 preview4 and preview5 btw.

Can I has fix please?


cheers,

Chosker

I did some further investigation and narrowed it down even more to the MasterPoseComponent.

I’m at a point where, if at BeginPlay I call SetMasterPoseComponent then the traces fail, and if I don’t call it then the traces work.

but of course I need to set the MasterPoseComponent, otherwise the animations are out of sync between the head and body.

some more evidence:

so, can I has fix please?


cheers,

Chosker

Hey Chosker,

Thanks for submitting this. I had a hunch about what was causing this and I was right. The collision mesh is not updating on animations inherited using “Set Master Pose Component”. This seems to apply to both per-poly and physics asset collision. So this is not isolated to traces.

I’ve entered UE-27081 to have this issue resolved.

I do have a temporary workaround for you that can work in the interim. Use one physics asset that provides collision for the entire body and apply it to the Master Component, then disable collision on the slave component. I realize that’s not a great fix if you plan on selectively adding armor, clothes, etc. It should help you get some of the results you’re looking for now.

Note: Just realized my workaround doesn’t work great for your situation with per-poly collision, but if anybody else runs into this issue using physics assets, this is possible workaround

-.

hello , thanks for the input

Like you say, your workaround will not help me. I’m hoping your entry includes the info about per-poly collision so it’s not overlooked when someone attempts to fix the issue :slight_smile:

  • Chosker

Hey Chosker,

It does include both cases (per-poly and phys asset).

-.

Hi,

I can’t seem to trace against SkeletalMeshComponents at all in 4.12

should I make a new post or is this related?

cheers,

Chosker

Hi,

I made some further tests and isolated the problem.

I can properly trace against SkeletalMeshActors but not against my Character (using the same mesh). the trace is called but the actor it gets is nullptr

this only happens if I make the trace aiming for a second mesh that uses MasterPoseComponent. if I trace against the “main” mesh of the character, the trace works

also if I comment out the line of code that calls SetMasterPoseComponent, the trace works

unlike the original issue, I do not get any hits at all (in the original issue I was able to trace against the “shape” the character would have at the A-pose)

could someone look into this please? should I make a new post or continue here?

cheers,

Chosker

[edit] added more detials

Hey Chosker,

This sounds like a new addition to the issue. There isn’t much action to be done on this since a fix to UE-27081 would resolve both issues. I’ve added this info to the report. Thanks for following up.

-.

Hi,

I would’ve expected such a basic feature to be fixed in a hotfix. Sadly, as of 4.12.4 it isn’t fixed.

can this be bumped for 4.13?

thanks

Hi Chosker,

I’ve added a comment to the bug to see if it can be bumped up, but it is currently backlogged with a Priority of 3/Normal (0 being the highest). I’d also like to note that Hotfixes are for Critical/Blocker/Crash bugs only. Sometimes if functionality has regressed (i.e. it worked in the previous engine version), it will make it to a hotfix. However, that is not the case here.

-.

thanks for the update

even if not fully working, the functionality used to be better (before the tracing was hitting the mesh where it would be if non-animated, now it’s not hitting anything at all). can’t this be passed as a regression?

I talked with one of our engineers about this and got a reaction of “complex traces on a skeletal mesh is EXTREMELY expensive”, which may have played into the backlogging of the bug.

Either way, one of our engineers is going to take a look and see about a fix. I’ll update you with any changes.

well that’s hardly an excuse to deem a bug less of an importance. it´s a supported feature and it works, except when used in combination with another supported feature (MasterPoseComponent)

I hope it gets fixed soon. thanks for the update

I just ran into this issue on an extremely time-sensitive project. Unfortunately the workaround doesn’t work for me because I need to know which component I have hit (the master component or one of the multiple child components). Is there any other workaround?

Just a heads up, I did find a workaround: I created an anim blueprint for my slave components that just copies the pose from the master component. Instead of using master pose component I just assign this animation blueprint to my slave components.

Wow, thanks very much for posting your solution DamirH, works great. I see that the issues tracker now has this problem as “Won’t Fix” so at least we have a way round the issue with your solution.

[DO NOT USE THIS ! ! ! ! ]
Here’s a picture of the solution for those who may stumble on this post in the future, just create a standard AnimBP using your pawns’ , with the following nodes in the Anim Graph (and edit the master component mesh to whatever mesh you have using your main AnimBP).:

wait what?

Epic: why the Wont Fix?

I haven’t tried the workaround but ‘Copy Pose From Mesh’ every frame seems like it could have a performance impact?

Hi Chosker,

There is now a public note on the jira. The workaround that DamirH is proposing is a legitimate solution, if you’re wondering.

-.

Actually after three days of nightmarish problems with this (after I thought it worked perfectly) I’ve just discovered that my picture above causes the engine to consistently crash (to the point where unless you delete the .uasset file you can’t load your project anymore) with array out of bounds errors in the logs.

I tried in a new empty TPP project on 4.13 (in case it was my 4.12.5 based main project) and the same crashes occur.

If you replace the Try Get Player Owner node with get player at index 0 then it does work and doesn’t crash, but then of course it doesn’t work in multiplayer.

Is there a correct method for multiplayer in which to copy pose?

Thanks.

O.O

thanks for the update and the time spent on this, Daniel Skipper

I’d actually need a solution that works in multiplayer. Epic maybe?