wrong scale in object mode

Hello

I just realised that I scaled the first bone in the lesson "Rigging Springs: Advanced, Part 1" in Object Mode instead of Edit Mode. Now the whole armature is scaled at 0.239 instead of 1. So after adding the copy scale constrain and choosing the "Monster_Truck_RIG" as target the mesh scales bigger because of the bigger Object scale of the Monster Truck rig I think.

I tried to apply the scale but that kind of destroyed the mesh xD.

I redid the whole spring to fix the problem but I was wondering if there is an faster way to fix it.

  • Omar Domenech replied

    Well I'm not a rigging guy, my first thought is no, there is no better way, in Blender one mistake at the beginning is a world of pain after and you just have to spend the time fixing what broke. But hopefully I'm wrong and when Spikey comes and answers your question, as he is the more technical guy here and knows just about everything, maybe he can have a solution.

    But also those mistakes are good lessons and next time it is less likely that it will happen to you. Pain is a great teacher. I remember Padme told  that to Anakin, though that didn't end up well did it.

    1 love
  • Martin Bergwerf replied

    Oh, this is definitely a question for Wayne.

    Armatures are different than Objects and I haven't even finished the Fundamentals of Rigging yet...

    But, what I would have tried, is to un-parent the Mesh, then Apply the Scale of the Armature and then reconnect the Mesh...Maybe that works and maybe not, but it has a better chance, than Applying the Scale with a Mesh 'connected' to it...I'm probably not using the correct rigging words, sorry Wayne, but I hope you know what I mean.

    1 love
  • Shawn Blanch replied

    It kinda depends on the issue. From what I see in your picture your bones all moved during apply scale and not just the mesh. I'd probably have to see this live to see the other potential issues going on.

    But here's some thoughts:
    Unparenting and applying scale on the armature should do the trick in some cases then simply re=parent

    If the rest position changes for the armature then this should help instead:
    Unparent the child object (keep location if needed)

    Then, before applying scale on the armature, select the unparented-child object and add a Copy Transforms Constraint to the armature bone. If needed you can apply visual transforms from the constraint at any point in this process.

    Apply scale on the armature and reparent the mesh as a child of the armature.

    1 love
  • Christian Pohrer(pohrerhub) replied

    Thx for the answers. I tried to follow your steps Shawn (somehow I cant write an @ before you) but it doesn't work.

    Here's the file for anyone who wants to take a deeper look at it: 

    DOWNLOAD BLENDER FILE

  • Martin Bergwerf replied

    pohrerhub thanks for making the file available!

    Unfortunately, I haven't been able to find a  fast and easy way to solve this. The problem, might be that all the DEF-Spring_* bones have an Armature Constraint to the MCH_Stretch bone...But maybe @waylow knows what to do.

    I think starting that part of the rig from scratch wasn't a bad call.

    1 love
  • Wayne Dixon replied

    Oh man - the amount of times I've done this is approaching infinity.

    Yes you can fix it.
    But first let me explain the issue.

    It's the stretch-to constraints.  If they were set when the object was at the wrong scale, the need to be reset once the armature is scaled correctly.

    In something like this - it's pretty labour-some to fix by hand.  That is where python can come to the rescue.

    How to fix:

    -unparent the mesh
    -then apply the scale on the armature.

    It will shrink line a prune.  Just stay calm and think about the cause.  Oh yeah, the stretch-to constraints were set at the wrong length.
    You could then select the main stretch bone in the middle, then click the little X next to the 'rest length' on the constraint.
    Then select each of the other bones and do the same thing - going in the order of the hierarchy.

    or you could copy and paste this code into the text editor and run it.
    (what does it do - exactly what I just said, it goes through every bone on the selected armature and resets the length on that constraint...if it exists)

    import bpy
    for b in bpy.context.active_object.pose.bones:
        for c in b.constraints:
            if c.type == "STRETCH_TO":
                c.rest_length = 0


    Then reparent the mesh to the armature.

    Save that code.  You are going to use it a lot.

    (I have turned it into a button in my own set of custom tools)

    1 love
  • Christian Pohrer(pohrerhub) replied

    Thanks very much that worked <3

    • no worries