Spline IK: First bone in chain scales on Y-axis regardless of Y Scale Mode #77330

Closed
opened 2020-06-04 00:09:11 +02:00 by Frank Romero · 28 comments

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 (7d2b4ae9c6)
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.

image.png

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.

spline_ik_bug_2_79-nonscaling.blend

Original blend file: SplineIK_UnexpectedBehaviour.blend

**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 (7d2b4ae9c6) 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. ![image.png](https://archive.blender.org/developer/F8603662/image.png) **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. [spline_ik_bug_2_79-nonscaling.blend](https://archive.blender.org/developer/F8603659/spline_ik_bug_2_79-nonscaling.blend) Original blend file: [SplineIK_UnexpectedBehaviour.blend](https://archive.blender.org/developer/F8575116/SplineIK_UnexpectedBehaviour.blend)
Author

Added subscriber: @FrankRomero

Added subscriber: @FrankRomero
Author

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

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

Added subscriber: @mano-wii

Added subscriber: @mano-wii

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

However in 2.79, dependency cycle warnings were displayed.

I'm not sure if I understood the problem. But testing the same file in blender 2.79 really looks like something is wrong: [spline_ik_bug_2_79.blend](https://archive.blender.org/developer/F8576631/spline_ik_bug_2_79.blend) However in 2.79, dependency cycle warnings were displayed.
Author

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

SplineIK_UnexpectedBehaviour.blend

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 [SplineIK_UnexpectedBehaviour.blend](https://archive.blender.org/developer/F8577436/SplineIK_UnexpectedBehaviour.blend)
Author

I should name the file as Unexpected Y Stretch

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.

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.
Author

Is this a normal behaviour?

Is this a normal behaviour?

Added subscriber: @dr.sybren

Added subscriber: @dr.sybren

Changed status from 'Needs Triage' to: 'Needs User Info'

Changed status from 'Needs Triage' to: 'Needs User Info'

@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.

@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.

@dr.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.

@dr.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.

@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.

@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.
Author

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'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 @mano-wii.

image.png

The above screenshot was made from a 2.79 file without dependency cycles: spline_ik_bug_2_79-mine.blend

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 @mano-wii. ![image.png](https://archive.blender.org/developer/F8603602/image.png) The above screenshot was made from a 2.79 file without dependency cycles: [spline_ik_bug_2_79-mine.blend](https://archive.blender.org/developer/F8603604/spline_ik_bug_2_79-mine.blend) 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).
Author

In #77330#949628, @dr.sybren wrote:
I was wrong, in 2.79 I also see the bone scaling behaviour with spline_ik_bug_2_79.blend from @mano-wii.

image.png

The above screenshot was made from a 2.79 file without dependency cycles: spline_ik_bug_2_79-mine.blend

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

> In #77330#949628, @dr.sybren wrote: > I was wrong, in 2.79 I also see the bone scaling behaviour with `spline_ik_bug_2_79.blend` from @mano-wii. > > ![image.png](https://archive.blender.org/developer/F8603602/image.png) > > The above screenshot was made from a 2.79 file without dependency cycles: [spline_ik_bug_2_79-mine.blend](https://archive.blender.org/developer/F8603604/spline_ik_bug_2_79-mine.blend) > > 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 changed title 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 2020-06-09 12:20:02 +02:00

Changed status from 'Needs User Info' to: 'Confirmed'

Changed status from 'Needs User Info' to: 'Confirmed'

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 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.
Author

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 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.

In #77330#949939, @FrankRomero wrote:
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.

> In #77330#949939, @FrankRomero wrote: > 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.
Author

This comment was removed by @FrankRomero

*This comment was removed by @FrankRomero*
Author

I'm happy to see this post being updated.

I'm happy to see this post being updated.
Author

Added subscriber: @Josephbburg

Added subscriber: @Josephbburg
Author

@Josephbburg 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 #81704 every single day.

{meme, src=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.

image.png
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.
image.png
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"

Character_Torso.blend

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

@Josephbburg 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 #81704 every single day. {meme, src=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. ![image.png](https://archive.blender.org/developer/F9481058/image.png) 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. ![image.png](https://archive.blender.org/developer/F9481023/image.png) 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" [Character_Torso.blend](https://archive.blender.org/developer/F9481059/Character_Torso.blend) Thanks for reading. I will keep waiting for the Spline IK Y Scale to be fixed.

@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 #81704, 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!

@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 #81704, 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!
Author

@TheAngerSpecialist.

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

May I ask if is possible to test the fix?

@TheAngerSpecialist. Hope you are doing well. Happy new year to all people from Blender. May I ask if is possible to test the fix?

This issue was referenced by d851fc3ad6

This issue was referenced by d851fc3ad6770a5634db8ca41aaa1267c7155245

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'
Sebastian Parborg self-assigned this 2021-04-13 19:46:43 +02:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
6 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#77330
No description provided.