You beat me to it! Also changing Y is a nice touch.
Getting multiple steps seems hard, or impossible.
You beat me to it! Also changing Y is a nice touch.
Getting multiple steps seems hard, or impossible.
Nate as @warmanw says It would have to be duplicate the two constraints then change the input/output values or I think you can just offset the Translate X each time. That offset would be the exact same every time also. ie, duplicate these two constraints and add or minus 40 (the total range of the constraint inputs) to the X offset, repeat).
It feels like there would be a programmatic solution there since it's a repeated step, but it's also probably a very limited use case for the editor itself.
It's basically a 'cycle' mode for linear constraint inputs (like translate) that allow for a constantly increasing input to 'clip' itself back within a relative range, kinda like how an angle would go from 0-360 but 360 sets it to zero again rather than continuously adding to the value every rotation.
Harald had an idea for transform constraint to have a modulo setting. That might be interesting for repeating a range.
Erika has an interesting sort of solution, but I'll let her show it so I don't steal her thunder.
I think I found a viable solution that takes advantage of rotation to achieve the foot movement:
This was a fun challenge!
Super cool, thanks Erika!
Harald had another idea: 0-360 world rotation already does modulo. He made a similar version with a pause between each step:
You're a wizard, Harri! He bequeaths unto you these clues:
in theory the trick is splitting the 0-360 degree range into 0-180 for subtracting e.g. 50 from the controller first, and a second time 180-360 for adding the subtracted 50 back in in the second half. thus there are no jumps at the loop transition
in theory this can be done not only with halves, but also splitting [0-E], and using [E-360] to catch up
It's really neat to see the clever things that can be done with the new transform constraint! At the same time, this gets pretty complicated and it's not easily approachable. It's almost like building a clockwork robot! We have more plans for 4.3 that should be very powerful in a more straightforward way, though I'm not sure it could do the "automatic spider step with a pause".
Thanks for the credits Nate! I just extended Erika's version, so half the work was her's .
Also played with the same thing but in a slightly different way.
Nate I finally had time to open the project, and honestly—it's brilliant. It’s definitely more complex and a bit intimidating, especially since everything in Spine so far has been pretty easy to grasp. Building rigs used to feel predictable, but now there are so many new ways to approach certain constructions that it feels overwhelming. I can only imagine how other newcomers might feel.
We really need to put a lot of resources online to help others catch up quickly. I'm planning to share this project on YouTube with a step-by-step tutorial, if you don’t mind @Harald. I think it does a great job covering many aspects of the latest transform constraints
Agreed, as Spine projects get more complex they feel like magic at first! It can be OK if the complexity is truly warranted, but as you said we should help people understand and achieve the most common goals so they can apply that to their more unique scenarios.
Using a transform constraint like this and leveraging the wrapping of world rotation 0-360 to achieve modulo is very clever, but probably not the simplest solution. Now that we have sliders, you should be able to get a much more straightforward solution. It's also more powerful, as you can animate the walk however you like.
Ah lol Yes! we can just move hip and call all the legs to move by binding hip to sliders. I am trying that next!
For the spider to pause between steps, you'd just animate it!
Here's a neat one:
Loading Image
There's only a single bone rotating here. The seconds hand is controlled be an animation, so there is full control of the tick-to-tick movement. Also note the shadows.
You have to share this project with us! I only need the images though want to find out the way myself
Good luck!
Hi @Nate ,
is it possible to share the solution, how it works? I have done an animation for the "minute hand"-bone (10frames) with one tick. Then i created a slider constraint with "second hand"-bone rotation for "minute hand"-bone-animation, limitation 90 to 89. So when the second hand-bone passes through the 12, the "minute hand" ticks one further, but once it hits "3" (on clock, 90° more) it snaps back. Frame-counter of slider constraint jumped back from 900 to 0 in this moment --> It jumps back, when it hits 0° rotation. What steps am i missing?
Do i have to use the 180°-360° rotation split, what Harald has written above to avoid the snap? Or is there another solution with the slider?
Sure, I can post the finished project, but that ruins the fun a little so I'll wait a while. If I post it, there would be a strong temptation to just look at the solution rather than figure it out. Better not to tempt!
Probably you are running into "world rotation wrapping". World rotation is defined as the direction the bone is pointing in world space, which in the Spine editor is screen space, ie your monitor. There are only 360 degrees in a circle. As a bone rotates, at some point its world rotation has to jump from 359.999 back to 0. That jump can wreak havoc with your slider or transform constraints, since it will cause the target bones to jump.
0 world rotation is pointing right, which would be 03:00 on a clock. That's why you see a jump at 03:00. As as you rotate clockwise past 03:00 you jump from 0 to 359.999 degrees world rotation.
To prevent jumps with your constraints, use local space by checking Local
on the left (source bone) side of the transform constraint properties. In local space the local rotation is defined so 0 degrees is pointing in the direction of the parent bone and any other value is how far from 0. In local space you can go > 360 or < -360, around and around, without any jumps back to 0.
It's so common to use local space on the source side, maybe it should be the default.