Search - User list
Full Version: Rogue IK bones are going berserk on me
Root » Technical Discussion » Rogue IK bones are going berserk on me
Grendizer
First let me explain. My client has FBX characters that already have a skeleton and skinning. But this skeleton is FK only. He wants me to animate them. I don’t want to animate by rotating FK bones, that would be horrible. So, I add a rig with control objects on top of this skeleton. As part of this rig I’m trying to add IK arms and legs (created in Houdini) that will constrain the original FK bones. As I’m trying to set this up, many questions arise…

1) When I rotate an FK bone (created in Houdini) then I check its parameter pane > transform > I can see changed rotation values.
In an IK chain, when translate chainIK_goal1, it generates rotations on the 2 IK bones. If I select chainIK_bone1 then I check its parameter pane > transform > I can see the rotation values are still at 0! Why? It’s important that the rotations values are available, as I want to transpose them to the FK bone through a constraint.

2) Setting up the constraint from the IK chain to the FK chain: here is what I do.
In Constraint tab, click on “parent blend” button. In operation toolbar, choose only rotations XYZ, check “keep position” and uncheck “add keyframe”. Then I select chainFK_bone1, press enter, then I select chainIK_bone1, press enter.
Let’s test at this stage: I select chainIK_goal1 and move it, expecting chainFK_bone1 to follow the same rotations as chainIK_bone1…
BUGGER! chainIK_bone1 is stuck in space. Moving chainIK_goal1 does a rotation on chainIK_bone2 ONLY, everything else stays motionless in the scene.
If I try to rotate chainIK_bone1 (which is not normal on an IK chain but it’s just for testing), the bone chainFK_bone1 rotates just a tiny bit then everything locks again.
Now how come the constraint destroys the IK chain, although the IK is NOT the target of the constraint? This problem goes right over my head…

3) How to set the thickness of a bone? Not by using a scale as it will affect the position of the following bone…

4) How to set the display of a bone so that it remains in wireframe even if the viewport is in shaded mode?
malbrecht
Hi,

as far as I can follow your description there may be several things blocking your setup. First, I would think that maybe your additional IK bone structure uses different transforms to the rig you imported, therefore, you would need to tweak the (FBX based) components to “point at” control points from your IK.

I just did a quick test scene, set up an IK chain and moved the target. The bones in the chain display rotation values depending on where they got rotated to from the IK solver, so I am not quite sure that I understand your problem with showing the rotation values. You may have mixed up “pre-transform” and the actual transforms that are “secondary” to the bones' original setup transforms (and are induced from the IK solver) … but I doubt that this is the issue here.

As for how bones are displayed: Dive into a bone's network, pipe a “proxy geometry” into the bone-link's node and adjust that. This way you have full control over how bones are displayed on screen.

I hope this helps!

Marc
Grendizer
Hello Malbretch and thanks for your answer.
I managed to partly solve my problems using another way. here is the scene.

- How I solved my constraint problem :
* I transfered my IK bones' transforms to box objects using this kind of expression : vtorigin(“”, “../chainIK_bone2”)
* I added a box as the constraint's pole vector , child of the chainIK_bone1
* On the FK bones I added “lookat” contraints with the boxes as the target and the pole vector box as the constraint's pole vector.
* However, this system is not very stable, I would still prefer using simple blend or parent blend constraints from the IK bones to the FK bones.

- Bones rotation values :
Please do a test. Open my scene. Select chainIK_bone1 and watch its parameter pane > rotate values: notice they're at 0.
Select chainIK_goal1 and move it up the Y axis.
Select chainIK_bone1 again and watch its parameter pane > rotate values: notice they're still at 0. This is a big problem for me.

- Bones' custom links :
I tried to go into chainIK_bone1 > geo level > plug a custom object in bonelink's second input : it does nothing. Then I tried the first input and I can see my custom object appear.
This seemed like a great solution but it's really a pity the custom bone's scale does not automatically adapt to the original bone's length. Perhaps I missed something, but without this auto scale, this function is useless I.M.O.

Thanks and best regards,

gz
malbrecht
Hi,



… rotation values show up for me.

As for custom geometry: If your custom geometry has the correct “1-size”, you can simply link the scale to the bone length.

Marc
Grendizer
Hi Marc and thanks again for your help!

1) IK bones' rotation values : that's weird, I tried again and it does not work. So what I do is : select chainIK_bone1, pin the parameter pane using the “not following selection” button, then move the chainIK_goal1. Rotation values do not change, they remain at 0 0 0. There must be a difference with our preferences, I wonder which is it?

2) For custom geo, your proposal seems interesting. I have a Houdini scene with a custom bone geometry, for now it's a polygonal object. I export it using a rop_geometry1 node. Where should I put “1-size” ? Will it pass through the .bgeo.sc file on the hard drive?

Thanks,
Gz
malbrecht
Hi,

ah - there's the problem! I think you should file a bug report about the parameters not being updated when the pane is pinned (maybe link to this thread).
I am using the animation tool (press CTRL+r when hovering over the viewport) to select the chain goal and move it. This way I can have the IK_bone1 selected in the network - and here the rotation values *do* *get* *updated*.

For the custom geometry: What you want to do is set up your custom geometry in a way that the “arrow” or “direction” of whatever you want the bone to look to is pointing in negative Z and has a length (geometry size) of 1 (or “-1” if you will so).
So for a simple test you could drag in a pighead, dive into the object (to get at the actual geometry level), scale it down so that from backhead to snout you have a length of ~1. Then move the geometry (not the object, only the geometry, i.e. the points) so that the back of the head sits at 0/0/0 and the tip of the nose/snout sits at 0/0/-1. Save this out (using a file node).
Then load in that geometry as your custom-geo for the bone. It will automatically orient and scale according to the bone length.

I hope this helps.

Marc
Grendizer
1) IK bones' rotation values : using your method with CTRL+R … the rotation values DO update! So yes, this might be a bug!

2) Custom bone : I got it, works beautifully, thanks again!!

Cheers,

Gz
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB