- Edited
[Editor][Spine web player]: rotation for bones in animations
Same feature (or bug?) in Spine v4.1.09-beta and Spine Web Player v4.1.5.
We have a json file with an animation block like this:
"animations": {
"idle": {
"bones": {
"bone212": {
"rotate": [
{ "value": 102.45 },
{ "time": 2.1, "value": 169.51 },
{ "time": 4.2, "value": 236.57 }
]
}
}
}
}
When we import this file into an editor, values over 180 magically turn negative.
236.57 => -123.43
And after that, I enjoy watching the funny animation on the screen. The animation is not going as expected:
Nate wroteYep, the smaller rotation direction is used.
In my case (what I see on the screen): the direction of rotation is used from 169.51 to zero, and then from zero to -123.43. Not from 169.51 to 180 and then to 236.57 (-123.43).
Same for Spine Web Player.
Bug or feature?
That looks like a bug in the beta. We'll check it out.
I'm having trouble reproducing this. Could you please send me the full JSON file?
Mario wroteI'm having trouble reproducing this. Could you please send me the full JSON file?
The files been sent to contact@esotericsoftware.com
Yep, I got a little confused then, the bugs are different for Editor and Web Player, not the same. But still we have bug and in Web Player with rotate direction, but with negative values.
I did a lot of experiments that day in search of the source of the problem. I never even dreamed that I would manage to step on two different bugs at once.
Received an answer by mail. I wrote my opinion back. But I think that it should be voiced here as well. Suddenly someone will pay attention and decide to check it too.
There is a bug (or feature?) that is the same for the editor and web-player. According to what was written a month ago ( what algorithm the Spine use when interpolating angles? ) - this is a bug.
jwezorek wroteI need to know that when an animation involves interpolating between rotations should I always interpolate along the smaller angle? i.e. if theta1 is 0 and and theta2 is 270, you could travel through positive 270 degrees to get from theta1 to theta2 counter-clockwise or could travel through -90 degrees to get to theta2 clockwise. Does spine always choose the latter because 90 is less than 270?
Nate wroteYep, the smaller rotation direction is used.
What I see now in Spine Editor and web-player: rotation direction is selected through negative or positive value for next keyframe.
How I see how Spine should work (well i believed that it works like that):
- two keyframe with angles 102.45 and 236.57 -> rotate clockwise from 102.45 to 180 and then to 236.57
- two keyframe with angles 102.45 and -123.43 (same as 236.57) -> rotate clockwise from 102.45 to 180 and then clockwise to -123.43 (same as 236.57)
The angle in degrees is less when going clockwise from 102.45 to 236.57. Same for case from 102.45 to -123.43. It's the same 134.12 degrees for both cases. And it's definitely less than 225.88 degrees going counterclockwise. So, the smaller rotation direction is used in both cases: clockwise.
And what I see now in Spine v4.1.09-beta and Spine Web Player v4.1.5?
- two keyframe with angles 102.45 and 236.57 -> rotate clockwise from 102.45 to 180 and then to 236.57
- two keyframe with angles 102.45 and -123.43 (same as 236.57) -> rotate counterclockwise from 102.45 to zero and then to -123.43 (same as 236.57)
So what do we have here? Rotate clockwise when next keyframe have positive angle value and rotate counterclockwise when next keyframe have negative angle value?
I did not follow the development of the project. Therefore, I have a clarification: is this definitely a feature of Spine v.4, and not a bug?
I'm not even swearing so much as trying to figure out the need to rework a bunch of projects to fit new realities.
PS: clockwise/counterclockwise... perhaps mixed up in places, because now there is no Spine at hand. I can’t remember where in which direction it turns on the screen in Spine. So please: do not quibble over rotate direction. =)
In Spine < 4, interpolating between two rotation keys will always take the smaller rotation direction.
In Spine > 4, this behaviour was changed with the introduction of the new graph view. Rotations in the positive direction (smaller to larger, i.e. 102 to 236) are always clockwise. Rotations in the negative direction (larger to smaller, e.g. 102 > -123) are always counter clockwise.
This is not a bug, but a feature.
Okay. Feature.
And no one had a problem with it? Is there any way to migrate json-files from the old handy rotation format to the new... feature? Like some ready-made algorithm/script, so as not to think your own?
Well, at least now I have confirmation that this is a feature, and that we need to adapt, and not expect it to be fixed.
You can open your Spine < 4 projects (not JSON or binary export files) in Spine >= 4 and re-export to the new format. You can do so on the CLI Command line interface - Spine User Guide