Weird scaling results for actors!

Hi,

I’ve encountered some weird scaling results with actors.
Image A shows a child actor parented to a parent actor(whose transform is shown).
I then set the Z-scale of the parent actor to -1, which should in effect cause the child actor to be “reflected” about the parent actor as shown in image C.
However, what I got was image B instead, which doesn’t look like a “reflection” of the child actor about the parent actor at all.
FYI, I replicated this exact same experiment in another engine(Unity), which gave the results I expected.
So what’s going on?

Perplexed,
.

I can’t reproduce your problem. Using a Static Mesh and changing it’s z Scale to -1 mirros it correctly:

http://puu.sh/ebPHR/92d9297861.png

http://puu.sh/ebPJj/23ba2c3025.png

Can you show me how you are trying to change the scale?

Hi again.Yes, setting any scale of the child actor to -1 itself works as expected, but not when you parent it to another actor and try setting any of its scale to -1. Strangely, it’ll not work correctly(eg. I’d expected the child actor to be reflected about the parent actor’s XY-plane when I set its Z-scale to -1, but it doesn’t actually do that). To replicate this, simply parent your actor to another actor(for more obvious effects, let this parent actor have a different location and rotation), then set any of the latter’s scale to -1 and see what happens.

Hi, I just discovered something rather incongruous about the way scaling is handled(vs the way rotation and translation are handled). Let’s say we have a child actor’s transform C(relative to parent actor) and the parent actor’s transform P(relative to world), then we apply a scaling transform S to the parent(relative to parent itself). We’d expect the parent’s world transform to be SxP(pre-multiply for local scaling), and the child’s world transform to be CxSxP. However, it appears that the child’s world transform is instead SxCxP(ie. S is pre-multiplied to C for local scaling relative to child), from what I can see visually. If this is indeed the case, is this by design? Though I can’t imagine why that should be, given that applying translation transform(T) or rotation transform(R) to the parent gives the expected results(ie. child’s world transform is CxTxP and CxRxP respectively). Is there any flag to set to say, get scaling to behave as expected? (ie. child’s world transform is CxSxP and not SxCxP)

Hm, i’m afraid to say that this is out of my knowledge. I would need to dig into this myself. If you think this is a bug or not meant to be, feel free to open a question in the “Bug Report” section.

Thanks for the response. I’d appreciate it massively if this query could be forwarded to someone who could shed some light on this. Perhaps it isn’t a bug per se, but just a setting which can be flipped? (though why this should apply to scaling at all just doesn’t make any sense to me)

Yes, I just came across the same problem. The feature request for the code change is UE-32676 , everybody should go there and vote on this issue