• Editor
  • Request function for IK

Hello

When one bone has an IK limiter, it can pass through it. Is it possible to add a checkmark in the settings to deny this. And if the Stretch mode is enabled, that would be the ability to transform it to the IK limiter.

Related Discussions
...

Thanks for the suggestion!

I'm really interested in hearing about some examples, where this feature would be helpful, and not be something you can easily achieve already, with the tools available.
If you are able to share what kind of use cases this would help solve, it would better help us decide, if it's something we want to implement, and what kind of way we would potentially implement it:

  1. Should bone scale both up and down?
  2. Would a scaling limiter be required?
  3. Should it scale the bone uniformly or only one one axis?

Those are some of the questions that needs to be answered for now 🙂

As Shiu mentioned, it would be helpful to hear more about the use cases where the new options would be applied.

Potential options:

1 bone IK
1) don't stretch,
2) stretch longer (not smaller),
3) stretch smaller (not longer),
4) stretch longer and smaller

2 bone IK
1) don't stretch
2) stretch longer (not smaller)

Currently we only have the 2 bone options. The 1 bone options could be 2 checkboxes, maybe Stretch and Compress.

A similar request was made here, additionally asking for uniform scale. This is turning IK constraint into a "distance-to-scale" constraint. While that is likely useful for some things, it may be better to have a separate constraint for tying together different transform properties rather than overload IK. IK is primarily about adjusting rotation so the tip of the child-most bone is closest to the target. By using a new, separate constraint for distance-to-scale it can be made more configurable (eg, limits and other options) without cluttering IK constraint. Still, it would be helpful if you can describe use cases for IK with uniform scale.


I forgot to add: you can simply use a small scale (or a short bone) with the current Stretch checkbox to achieve an effect similar to 1 bone IK #4 above. That makes the only setting not currently possible out of all 6 is 1 bone IK #3.

I see several use cases for such bones:

  1. This is when something is attached to the character as on an elastic band.

  2. For example, a character is thrown by the net. And when the character moves, the net should automatically scales within its moves.

  3. This is something that I have long wanted to get, but I do not know how to explain. But I'll try and attach an explanatory drawing. This is a more difficult option for two bones. If there is a bent leg and knee should be bent to deploy the leg in 3D. Here the Stretch should go to the knee.

There is an example of current "knee" movement with IK animation:



Another simple example

I'm mainly interested in the stretch/compress feature for single-bone uses. Previously I've used a path with a single bone (or sometimes multiple bones) set to chainscale in order to stretch those bones to a target. However, I want all of these bones to stay in a straight line (they are all at the same angle, linked like a chain). This is overly complicated to set up with a path, especially when you want those bones to be in a straight line, and there is currently no option for straight-line paths (at least not that I'm aware of).

This is turning IK constraint into a "distance-to-scale" constraint.

Yes, if you would prefer to make this a different type of constraint ("distance to scale"), that would be fine for my use. It is a bit of an edge case, so I can probably use the trick I mentioned in the other thread for now, where I set the scale of the bones I want to stretch/compress to a very small scale, and let the IK stretch them / compress them freely.

Any thoughts about my second question:

Is there any way that you could make it so that the IK-constrained bone could scale on both X and Y instead of just on the X as it is currently? Ideally this would also be a checkbox, labeled something like "scale both axes"

Shiu wrote

Thanks for the suggestion!

I'm really interested in hearing about some examples, where this feature would be helpful, and not be something you can easily achieve already, with the tools available.
If you are able to share what kind of use cases this would help solve, it would better help us decide, if it's something we want to implement, and what kind of way we would potentially implement it:

  1. Should bone scale both up and down?
  2. Would a scaling limiter be required?
  3. Should it scale the bone uniformly or only one one axis?

Those are some of the questions that needs to be answered for now 🙂

For one bone suits me like it is done now, but with a small correction. This is the ability to scale the bone when the target is closer than the length of the bone. It seems to me that it is important to scale the bone on the same axis, but there are many different tasks, someone may need to scale on two axes.

For two bones, if it is possible to move the second bone in the hierarchy (an example of a video with a knee above), then the bone scaling seems to me relevant also on one axis.

Thanks for the input guys! We'll look into the possibilities 🙂

For one bone suits me like it is done now, but with a small correction. This is the ability to scale the bone when the target is closer than the length of the bone.

Hi, Belpetr. To fix the above issue (the one shown in your video of the spider), select the bone you are stretching (in this case, the spider web strand), and set its X scale to something very small - like 0.001. It will still stretch to match the spider's location, but now it can also shrink down to the scale you set (0.001). With this setting, it should both stretch and compress to match the spider's location.

9 dana kasnije

In 3.7.25-beta:

Image removed due to the lack of support for HTTPS. | Show Anyway


2 bone IK only has Stretch, not Compress or Uniform. Only Stretch and Compress are keyable, Uniform is not.

Thanks for your work. This will really make it easier for me to work on many animations.

I wanted to ask for a little more functionality for animations with IK.

Now when using IK with two bones, we can animate two objects. This is the parent bone and the target. It would be great to be able to shift the child's bone, as it would be the target for the parent and be able to stretch and compress between the parent bone and the target. So we could create the illusion of the rotation of the leg in 3d.

So promising, can't wait to test the stretch one!

3.7.25-beta is up, so you can try it now!

belpetr wrote

It would be great to be able to shift the child's bone

You've always been able to translate the child bone. The problem with scaling the parent bone is that it almost always causes the child bone to need to rotate to continue pointing at the target, especially with non-uniform scaling. Also, scaling the parent bone will shear the child bone, which is unlikely to be what you want. Maybe you'd be better off using two 1-bone IKs?

Nate wrote

3.7.25-beta is up, so you can try it now!

belpetr wrote

It would be great to be able to shift the child's bone

You've always been able to translate the child bone. The problem with scaling the parent bone is that it almost always causes the child bone to need to rotate to continue pointing at the target, especially with non-uniform scaling. Also, scaling the parent bone will shear the child bone, which is unlikely to be what you want. Maybe you'd be better off using two 1-bone IKs?

This is a good solution for one animation. But if the character's leg should move in different ways then this is not a very good decision. For example, in the idle, it is slightly rocked. Another animation twists slightly. In the third it runs. In the fourth, it jumps.

I tried to solve the knee turns problem with scaling IK bones. There I found a bug. If the child is not exactly look at the tip of the parent, then the parent bone abruptly unfolds on the child when it scaling.

This is not a bug, it is an IK limitation.

If the IK mix is greater than zero and the parent IK bone has nonuniform local scale (meaning the X and Y scale have different values), then the child IK bone's local Y will snap to 0. Inheriting nonuniform scale does not trigger this snapping.

Spine's IK is the only I've ever seen that allows nonuniform scale at all. It was a very complex problem to solve and requires the child bone Y to be zero.

Your knee turning problem is not very clear to me. I saw your video above, but I'm not sure what you wanted by translating the child bone. Form your image it looks like you want the bones to bend the other way? Maybe you can animate the IK mix to zero, placing the FK bones so the leg is straight when the mix is zero, then flip the IK bend direction and animate the IK mix back to 100%.

4 mjeseci kasnije

Here is an example implemented in another program. It illustrates well what I am talking about.
Cartoon Animator 4 - Smart IK Motion Editing - Works with All Kinds of Animal Characters - YouTube
and
Cartoon Animator 4 (CrazyTalk Animator) - Smart IK Motion Editing - Stretch Animation - YouTube


Here is another program implementation of the feature I asked to add before.

https://docs.2dimensions.com/support/nima/the-interface/selection-panel

Hello Belpetr, if you set two IK constraints with one bone that have the stretch and compressed options turned on, you can achieve the same effect of "Freeze "Joints On" while the first one just requires one IK with said options.

That's true Erika, though when you move the target of the lower 1-bone IK, it won't do IK for both bones.

There may be something we can do to improve translation of the second IK bone, like in the videos above. What happens now is the translation is applied to the FK pose, which tends to make the IK pose surprising.

14 dana kasnije

I stumble in this threat looking through bug, And since the now stretch compress option is release, I try to experiment on building leg, arm without using the conventional way.

to make some blend between functionality and possibility.

Its a work around I think, but look close to what is the need

papamadoo, this solves the problem with the knee or elbow, but makes it impossible to use inverse kinematics. That is why there is a need to expand the functionality, especially for the 2D program.