Are there any issues with setting a negative scale to a mesh?

Something like a scale of 1,-1,1. I have a skeletal mesh I’d like to mirror but I don’t know if that’s a game design “don’t” or not. Thanks.

Yes, there is!
If you try to use Hierarchical Instanced Static Mesh Component then it will show your mesh as inverted (you will see only inside part of the mesh, not outside). Weird thing…

Hey Guys,

Negative scaling on ISMs is not supported.

Reason being is that meshes with negative scales require a different cull mode which would require an additional draw call.

Alex, please can I ask for a little more detail for my understanding?

I have a car door actor which contains a skeletal mesh, some collision meshes, an animation and some code. Inside the parent car actor I have two copies of this, one with a negative y-scale. I did this deliberately as I thought it would be cheaper than having two entirely separate skeletal meshes, each with their collisions and animations. Am I right or wrong?

The strange thing is that it all looks and works perfectly fine except the mirrored door’s collision mesh is in the wrong place, and moves around strangely when the car moves.

Also, I’m still a bit of a noob - what do you mean by ‘cull mode’?

Hey Bob,

This sounds like an issue I entered a while ago: Unreal Engine Issues and Bug Tracker (UE-53895)

It was marked wont fix because of expected upcoming changes to this system.

My understanding of culling is that certain polygons are not shown if they’re not visible. I think culling is unrelated to the collision mesh.

Thanks, that does sound like the issue I’ve been having. I’ll try the workaround mentioned there. I recall experiencing a lot of crashes with the attach to component node though but I might just be remembering something similar but different.

Edit: The workaround works to a certain extent. The collision mesh moves correctly with the animation of the skeletal mesh, but there’s no actual collision, even when set to ‘block all’.

Edit 2: Never mind, I was being silly (it was a Friday afternoon after all) - I’d turned collision off for the skeletal mesh and on for the collision mesh, forgetting that since I was attaching the collision to the skeletal mesh I was effectively making it a child and so it was inheriting the no collision setting of the skeletal mesh. D’oh!

All is working well now!

I had trouble mirroring attached components during development at some point:

  • Negative scale in socket on parent static mesh leads to some wierd glitches and not saved properly.
  • Apart from issues above, when they do work ,normals is fliped and it has to be 2sided material to fix this issue.
  • Also there should be problems with correct collision location.

The only way i found so far to achieve Mirrored effect was to do some work with relative location after attaching components in c++ ( My socket names contains some characters to indicate is socket needs to be mirrored):

if (IsMirroring(SocketName))
 {

    	auto NewTransform = AttachableModuleComponent->GetRelativeTransform(); 
    	NewTransform.Mirror(EAxis::Y, EAxis::None); // Mirroring Y
    	AttachableModuleComponent->SetRelativeTransform(NewTransform);
}

It does work, but it’s dangerous as it can cause any meshes attached to the negatively scaled one to have strange collision problems. I would advise against it.