1. Submit bugs to enter our 5.4 Beta Sweepstakes. Read more about it here.
  2. Unity 5.4 public beta is now available for all users. Grab the build and visit the 5.4 beta forum.
  3. Missing a module? More about the new installer in 5.3 here.
  4. 4.7.1 released for Xcode 7.3 support. Thread here.

Negative X scaling = nearly half the fps

Discussion in 'Editor & General Support' started by n0mad, Nov 25, 2009.

  1. n0mad

    n0mad

    Joined:
    Jan 27, 2009
    Messages:
    3,732
    Hello,

    I have to make a feature where a full skinned Mesh can be mirrored in X axis.
    But I'm witnessing a severe perf loss when I use this localScale(-1, 1, 1), jumping from 17 ms average frametime to 24 ms ...
    The skinned mesh has 2 box colliders / rigid bodies attached to it.

    I just set that X axis inversion once, do nothing else, and then bam the Fps goes down as long as it is -1. When I switch scale back to 1, everything returns to nice Fps.

    Profiler says that the CPU is the cause of slowing down the overall.

    Is there a way not to have perf loss ?

    Thank you
     
  2. antenna tree

    antenna tree

    Moderator

    Joined:
    Oct 30, 2005
    Messages:
    5,325
    Create the mirrorred character in your 3d app and freeze the transformations.
     
  3. n0mad

    n0mad

    Joined:
    Jan 27, 2009
    Messages:
    3,732
    Thanks, so this means that perf loss is how things work, and that there is no way not to avoid them ?

    Jeez ... my FBX size will be huge :(
     
  4. n0mad

    n0mad

    Joined:
    Jan 27, 2009
    Messages:
    3,732
    Hello again, one thing I can't understand : why is this negative scaling much more CPU consuming than other transforms ?
     
  5. Graham Dunnett

    Graham Dunnett

    Unity Technologies

    Joined:
    Jun 2, 2009
    Messages:
    4,134
    Guys,

    If you are comparing a negative scale to no scale at all (I guess I mean the identity scale) then it is possible that you are asking the CPU to do some work to perform the scale. If an object is not being scaled I imagine it is sent down some fast path submission.

    Your scale is non-uniform (only affects the x-component of each vertex) and non-uniform scales really mess with matrix operations. Translation and rotation both preserve the shape of an object. Uniform scales do too, but non-uniform scales stretch geometry. Imagine a scale of (2, 1, 1). This ability to mess with the shape of an object is what causes non-uniform scales to require some slower submission path. You might say that a scale of (-1,1,1) is not messing with the shape of your object, but in fact it is turning your object inside out.

    Glad you are finding the profiler helpful!

    Regards,
    Graham