• Editor
  • Some questions about the new Transform constraints

I had a few questions about the new transform constraint properties. the numbers on the left side are changed via the "match" button right? Or do we have to get to the values ourselves?
I was just looking over the change the devs did to my spine file (from this thread) and it looked like the left numbers were changed but when I tried to replicate the behavior on the other limb, they didn't change by themselves when I clicked match, making the behavior weird. I had to input the numbers from the constraint that worked on the left side to get the behavior I wanted. I know I have to input my own numbers on the right side but I don't understand how to get the numbers on the left.
I also noticed that if you put in the "correct" values in the clamp, that the limb doesn't move in the setup mode but when the source bone is moving in the animation.
Here's what the devs did to the transform constraints for reference:

Another question:
I'm currently trying to get the arm to move up when the shoulder bones rotate. I thought I would use a transform constraint to achieve this but I'm running into issues again. When I'm trying to set the constraint, it keeps moving the actual bone in the setup instead of in the animation. The process I've been doing this in to setup is:
-Select Upper Arm
-Create Transform Constraint with Source bone as the Shoulder bone
-Select Local and Clamp check boxes
-Click Match
-Attach left rotate to translate X

I'm not quite sure what I'm doing wrong. This just might be to my limited knowledge of the transform constraints. I also did not change any values on the left side since I didn't understand if I needed to or not.

This is the behavior without the transform constraint:

Thank you guys for your help in advance!

Related Discussions
...

Originally we removed offsets and Match changed the property mappings. Later we had to bring back offsets to keep all the functionality of the old transform constraint. Match now only sets the offsets.

The property mappings are up to you. They describe unit conversion from one property to another. If you aren't using clamp, then the exact ranges don't matter because the values are extrapolated. For example, you can map 0-100 to 0-100 and get a mapping with 100% scale (ie 1:1). Values outside the range being extrapolated (not clamped) means if the source value is out of range, say 500, the target value is 500. If you map 0-100 to 0-50 you get 50%: the target bone moves half as much as the source bone, 500 source gives 250 target. If you map 34-72 (a width of 38) to 143-162 (a width of 19) then you also get 50% scale (19/39=0.5) and it will behave identically. Those numbers are harder to read, so it's convenient to use easier to read ranges like 0-100.

If you are using clamp then the target values don't go out of the specified range, so you need to be much more careful what ranges you set. It depends on the range of motions you want to map, so we can't set them for you. We may add some visualization of the ranges though. Enable rulers (ctrl+shift+R) and take note of the values for the ranges you want. Make sure to look at the correct axes based on if you have Local checked. Make your ranges work with a simple constraint before making it more complex.

If you enable clamp and nothing moves, likely your target (right side) values are out of the clamp range. Look at your ranges more closely.

If your mapping causes the bone to move in setup, it's because the source value when put through your mapping does not equal the unconstrained target value. Set your ranges more carefully!

For example, say the source is 100 in setup and the target is 200. I want the target to move +/-30 when the source moves +/-15. I would set the ranges: 85-115 to 170-230. This mapping causes 100 to be mapped to 200, so the setup pose doesn't change, and the mapping also describes the amount of movement I want clamped.

Your ranges don't have to center the setup values. For example, same setup values 100 source, 200 target. This time I map 90-120 (which is -10 and +20 of the 100 setup) to 195-210 (-5 and +10 of the 200 target). With this mapping 100 source is still 200 target, but the range is asymmetrical relative to the setup values.

  • height13 ответили на это сообщение.

    Nate Ok if I'm understanding this correctly, by Local checked you mean both local checkboxes (the one by options and the one by additive) right?
    And I would have to go by local/parent values displayed through the setup menu to find the starting values of the source and the target. (seemed to work better with parent values?)
    So the default rotation of the source starting degrees is 77 and I want to map the rotation to the transformation of the target's X coordinate which is 306. I want the rotation amount affected to be 18 degrees so the range I came up with for the left side would be 68-86. If I only wanted the target X to move within 44 units it would then be within the 284-328 range right? Doing it this way got it so the target bone only moved alittle bit when turning up the mix to 100 which I'm assuming it means I'm close to the correct values? But what I thought was confusing was that when I was testing the behavior, the target bone didn't start moving till I was rotated to 40 local degrees and decreased from there. Only then did I see the behavior I expected. It is 37 degrees which is close to the 44 units I wanted to move so I don't know if that is related.

    When I don't check clamp and just try with both the local boxes checked, all this logic seemed to go out the window (which I think was intended?). I ended up brute forcing it by trying a bunch of ranges and ended up with the behavior that I wanted but I don't really understand why it works since the source bone was 77 degrees local and the range was -60 to -30 local which is completely opposite of what I was expecting, not to mention in the negatives. If it's pointing to the left does it mean it's always a negative number?

    Thank you very much in advance. I appreciate the help!

    Source 77 is at the middle of 68-86.Target 306 is in the middle of 284-328. Those ranges will set your target bone to 306 when source is 77. Your screenshot shows 47.09 offset though, that will be added to the source. Try 0 offset. Also try a mix of 100, not -100, at least until you get it to work. You can flip the output by flipping the target range, eg 0-100 or 100-0.

    The above will be wrong if you are looking at the wrong axes. When Local is checked, look at World axes. When Local is unchecked, look at Local axes for everything except translation. For that look at Parent axes.

    Give that a try and let us know how it goes!

    • height13 ответили на это сообщение.
    • borleech оценил это.

      Thanks for the explanation, Nate. I had some problems of understanding as well, but now it is more clear to me.
      @height13 I had the same issues and problems in my head as you. Thank you to come up with that topic to the right time 🙂. I hope the explanation from Nate could clear your problems too.

      • height13 ответили на это сообщение.
      • Nate оценил это.

        Nate Thank you for responding so quickly!
        I turned the offset off and that worked much better. I guess I'm wondering if I really need the offset for transform constraints since it seem to make things more complicated.

        Just to confirm, do I look at the World axes when BOTH Locals are checked or only one of them? Because I tested it out and it seems like it behaves differently between if the left local is checked and the right local in options is checked. I was only able to get it to work if the left local was unchecked and the right local was checked.

        Just to show what I mean, here's what I was able to achieve:

        I did change the both check boxes of Local to checked and used the 68-86 range from the test and it seems to have the correct behavior.

        borleech I'm still alittle bit confused but I'm starting to understand! I'm glad my question could help!

        Nate OOOH I think I understand now. By translation you meant the X and Y coordinates translation. I'm sorry it took me so long to understand what you meant. It makes sense now!

        @borleech Great, I'm glad my ramblings were useful! Someday we'll have proper documentation. 😬

        Yes translation is X and Y. 🙂

        The left Local checkbox is for the source, the right Local is for the target. They don't have to be the same, though they commonly are. The were always the same with old transform constraint, but there may be some clever setups that make use of having them differ. Local is often used when doing something with rotation, as world rotation is limited to 0-360 and repeats. That can actually be leveraged for interesting things, like this spider walk.

        The usefulness of offset we debated a lot internally. Translate offset is definitely useful, as it allows you to simulate reparenting. Rotation offset is useful because it flips when the character flips, and some relatively rare scenarios need that. We had to have translation and rotation offsets to have exact parity with the old transform constraint, so people's projects don't break. Scale and shear offset aren't strictly needed, as they could be accomplished via property mappings. The only advantage they offer is it's easier to change the mappings without messing up the offsets -- less math for the user. If you are mapping properties straight across, the offsets and Match are very convenient so nothing moves in setup mode when mix is changed.

        Your shoulder setup is neat, though I'm not sure the shoulder should really dislocate from the arm like that.

        Be careful not to get too caught up in the fancy features! Many times you can solve things in a simpler way. You can do a lot with only weights, like this cake (check out the other tips there too):

        For your shoulder, you could use Weld in the Weights view to make the top part of the arm move perfectly with the torso. Then the shoulder bone would just rotate without any constraints and the torso and shoulder would move appropriately.

        • height13 ответили на это сообщение.

          Nate I will definitely look into a way of making it more simple. I think the welding would work if i parent the lower arm to the shoulder bone (its currently not since I thought i would need this set up for the IK shoulder bone to work).
          I'm glad I went through this exercise though even if I end up going a simpler route because now I actually understand the transform constraints. I've been frustrated with them for so long even in the previous versions but I'm realizing how powerful they are. I'm really grateful for you being patient with me!

          • Nate оценил это.