Page MenuHome

Spline IK: First bone in chain scales on Y-axis regardless of Y Scale Mode
Closed, ResolvedPublicKNOWN ISSUE

Description

System Information
Operating system: Windows-10-10.0.17763-SP0 64 Bits
Graphics card: GeForce GTX 1070/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 445.87

Blender Version
Broken: 2.57, 2.79, 2.80, master (rB7d2b4ae9c6ecce394130)
Worked: probably never, didn't test on Blender older than 2.57.

Simple Description
Given a chain of bones controlled by a Spline IK constraint, the first bone in the chain will scale to fit the spline curve. This happens even when Y Scale Mode is set to None.

Exact steps for others to reproduce the error

  • Open the attached Blend file. This is set up to have Y Scale Mode: None.
  • Move the Handle-End empty around.
  • See that the first bone (the yellow one) scales. The red bone copies only the location+rotation to visualise the difference in scale.

Original blend file:

Event Timeline

If you have any question let me know. I am happy to answer.

I'm not sure if I understood the problem. But testing the same file in blender 2.79 really looks like something is wrong:

However in 2.79, dependency cycle warnings were displayed.

No, this time it is not about the dependency cycle. I managed to fix that issue in 2.79 using the --depsgraph if I remember the parameter.

Definition of bone groups:
Yellow Chain: the bones with Spline IK Constraint
Red Chain: the bones that copy only the rotation of the Yellow Chain

The Yellow Chain with the Y Stretch Mode as "Original Bones".
The Yellow Chain first/root bone "Spine" does stretch in the Y-axis. However, it breaks the rules of the Y Stretch mode as "Original Bones".

In this blend, I will provide 2 armatures to show the issue the object named "Armature" will show the issue. and "Armature 2" is the desired result the red chain

Remember I am not talking about Dependency Cycle Issues. I am talking about the Y Stretch issue happening in the Spline IK Constraint with the Y Stretch Mode an "Original Bones" the first bone stretch for unknown reasons.

I am currently using the new Version 2.83.0

I should name the file as Unexpected Y Stretch

I'm not familiar with this area.
If it was just me, I would confirm it as a bug.
But let's wait for someone from the animation team to take a look.

Is this a normal behaviour?

Sybren A. Stüvel (sybren) changed the task status from Needs Triage to Needs Information from User.Jun 8 2020, 4:19 PM

@Frank Romero (FrankRomero) Please update the task description with the latest version of Blender that still worked for you, and provide an example blend file that shows the issue. If the currently attached blend file shows dependency cycle issues, we can't use it to debug this problem. If the problem didn't occur in 2.79, please provide a file that we can open in 2.79.

@Sybren A. Stüvel (sybren), the problem did not happen in blender 2.79 so i provided a file showing this in one of my previous comments.
2.82 has no dependency cycle.

@Germano Cavalcante (mano-wii) My question was not whether 2.79 worked or not, but WHICH version of Blender it still worked for. The "Worked" field in the bug reporting template is there for a good reason, as this information can help a lot when trying to figure out the root cause of a bug.

2.79 was the last version that didn't show this scaling behaviour, it does show in 2.80.

I'm sorry I couldn't write yesterday, I have created the blend in 2.82 in less than 1 hour on the 4th June. I will provide another blend or edit this report with the current version.

I was wrong, in 2.79 I also see the bone scaling behaviour with spline_ik_bug_2_79.blend from @Germano Cavalcante (mano-wii).

The above screenshot was made from a 2.79 file without dependency cycles:

And yes, the root bone of the armature still scales, even when I disable "Y Stretch" (in 2.79) or set "Y Scale Mode" to "None" (in 2.83 or the current master branch).

I was wrong, in 2.79 I also see the bone scaling behaviour with spline_ik_bug_2_79.blend from @Germano Cavalcante (mano-wii).

The above screenshot was made from a 2.79 file without dependency cycles:

And yes, the root bone of the armature still scales, even when I disable "Y Stretch" (in 2.79) or set "Y Scale Mode" to "None" (in 2.83 or the current master branch).

Thanks for discover the issue.
Cheers

Sybren A. Stüvel (sybren) renamed this task from Unexpected behaviour of Spline IK in a chain of bones to Spline IK: First bone in chain scales on Y-axis regardless of Y Scale Mode.Jun 9 2020, 12:20 PM
Sybren A. Stüvel (sybren) changed the task status from Needs Information from User to Confirmed.
Sybren A. Stüvel (sybren) updated the task description. (Show Details)
Sybren A. Stüvel (sybren) changed the subtype of this task from "Report" to "Known Issue".Jun 9 2020, 12:24 PM

I have rewritten the task description so that it's a bit shorter and to the point. Apparently this issue has been in Blender for a long time already, which means that there will be people/files depending on the current behaviour. As such, this isn't a bug per se, but rather a strange aspect of Blender's current design. As such, I'll mark it as a known issue.

I am glad that you have edited the post for clarity.
I started using blender since 2.6, I have started using Splines IK since 2.7 versions I have always used this type of constraints with the copy rotation.
I have known that spline IK had issues about dependency cycles but that's old history.
When I have started using blender 2.8, I saw more possibilities with the Rigging system plus using Python because of the new depsgraph.
I am sad that no updates will be added to spline IK to fix that root bone stretching happening.

In conclusion, the Spline IK will be accepted this as KNOWN ISSUE. I understand that there is not a fix for this.

I am sad that no updates will be added to spline IK to fix that root bone stretching happening.

I'm happy to tell you that this is not the case; this is why this task is still open. I think it's important to get this fixed, but doing so should be done carefully as simply removing the stretching behaviour would break people's files.

I'm happy to see this post being updated.

@Joseph Brandenburg (TheAngerSpecialist) I have seen your progress in the Spline IK it looks great to start. Do you have any updates on the Spline IK. I am always checking this section and the T81704 every single day.

Macro itsawesome:

I found the Y Scale bug while reading matrices. This got me annoyed for a long time since previous versions of blender.
Normally, I get the closest calculation I have to do is a copy of the chain without Spline IK (that way I can save the rig from Scaling in the Y Axis) and Damped Track every single bone at the end of the bone of the chain with Spline IK.


Check the Blend File.

I am not sure if this is the right place to post this here or open a new post to ask for 'feature' for the Spline IK.

I call this the Spline IK "Chain Twisting" feature.
I made this in python and the Scripts are in the Blend.
Basically, looks like it works similar to the BBone.
I did start draft-scripting this today because I was in need to find some flexibility with spline IK as I am making an animation project to my characters in my game and this works as charm.


In the picture if you have a look on the right side panel Bone Constraints you can see Chain Twisting that has the next props.

Use Twist: Enable twisting the entire chain in the Y Axis.
Roll: Y Rotation from the Start of the Chain
Custom: Bone that serves as the start handle for the Spline IK. (in this prop, the idea is to use from the Start of the chain)
Twist: Y Rotation from the End of the Chain.
Total_Twist: This is hidden. I am thinking this could be the value between subtracting final_value = (twist_value + roll_value_inverted) / (pbone_constraint.chain_count - 1)

You can check more in the "Scripting Tab". The files are "SplineIK_Twist_Solver.py", "SplineIK_TwistProperties.py", "SplineIK_Panel"

Thanks for reading. I will keep waiting for the Spline IK Y Scale to be fixed.

@Frank Romero (FrankRomero) Hey, thanks! Yeah, I'm still working on it... I haven't actually checked if it is related to this bug or not, yet. Anyhow, I've had the same idea about supporting twist, and I've even made my own Python implementation of it, too! I think the right way to do it would be to simply use the twist of the curve to set the Y-rotation of the bones, and then make it easier to rig curves. Why is this the best way? Because curve Twist can go well beyond 180 degrees. Anyways, It's not something I am going to attempt to do until I've at least finished T81704, and that one is proving to be very difficult to fix, and even then, no promises. (My goal is to have a fix finished by next Thursday).
Thanks again!

@Joseph Brandenburg (TheAngerSpecialist).

Hope you are doing well. Happy new year to all people from Blender.

May I ask if is possible to test the fix?