Jump to content

Offset Bone Animation in a KineFX Rig


couch

Recommended Posts

I am working on a simple Kine FX rig and would like to control the tail of an animal by keyframes of a single bone. The animation of the first bone should be transferred to the other bones with a time delay. I have tried to transfer the techniques shown here to my rig:

https://www.tokeru.com/cgwiki/index.php?title=HoudiniChops#Stagger_and_offset_bones

but unfortunately, I fail to import the channels of the rigpose Node to a Chops Network and link all the rotation values there.

Does anyone have a tip for me on how best to go about this?

Link to comment
Share on other sites

  • 4 weeks later...

With kineFX a lot of the CHOPs workarounds aren't really necessary anymore.

The stupid simple way to do that is once you've made your tail skeleton, add a pose rig node. With the pose rig node selected, hit enter in the viewport to fire the state and select all the tail joints so their transformations get loaded into the pose rig node.

Now just copy the rotation attributes of the base joint and paste relative reference into the rotation parameters of all the other joints. Whatever rotation to make to the base joint will now get added to each joint as well as the parent transform and you'll get curling like in the tutorial above.

You can also do it in a rig VOP, but it's a little more work to set up.

Finally, you might want to search for "kineFX curve IK" and you'll find a bunch of tutorials on setting up spine IK tails, which I generally prefer to this tail set up. But both are valid as options.

Link to comment
Share on other sites

Thanks for your help, but how would I integrate an automatic time offset? The rotation x of bone 2 should take place 2 frames later than the rotation X of bone 1 and so on.

Chops_bones_final.gif

I wanted to avoid Curve IK because I have a lot of tails in my scene. And my plan would have been to control all of them with only the first bone of each chain. These animations should then be transferred to the remaining bones with a time delay.

Link to comment
Share on other sites

  • 1 month later...

Circling back to this because part of it was bugging me.

I mentioned before there's a few ways to do this.

-- You can just do it simply with expressions in a rig pose node.
-- You can do it in a rig VOP, although note that the rig VOP has been changed from Detail to Points. In Detail mode (the way a rig VOP is supposed to work) you can get all the point transforms and then in a for each point transform loop you can offset the rotation. But this doesn't do what you think. Instead, if you set the VOP to run over points, it works the way you expect it to.

-- Finally you can do the same thing in a wrangle. EXCEPT, you have to make sure to offset the localtransform (the transform relative the parent) and not the world transform. AND you have to use the "prerotate" command, not the "rotate" command. This mirrors the pre-multiply and post-multiply options on the rig pose. I don't fully get it, honestly, but it's a bit like shifting between local and world space transforms.

-- And lastly I added a simple time offset. For simplicity I'm just adding the same rotation and time offset to each joint, not what you show in the example. But it should be easy to adapt this so each joint has its own controls like in the examples above.

Its a seemingly simple thing to do, but getting it to work is useful to understand how the various transform attributes are used under the hood by kinefx and the rig pose node. Hope it's useful.

 

tail_v01.hipnc

  • Like 1
Link to comment
Share on other sites

  • 2 months later...

I came back to this working on another problem. It's simple, but deceptively tricky, and is really useful for understanding how kinefx uses the world transforms and local transforms and how to go about manipulating them since the rig VOP, in particular, is a bit counter-intuitive.

So in addition to the above, I also updated:

-- A rig VOP running in its "proper" detail mode. It uses a for-each loop to add in the rotation of the first joint to each child joint using the very handy "Get Descendant Transforms" VOP. You can also use a for-each transform loop, but you have to hack it a bit to get access to the rotation of the first joint inside the loop.

-- In addition to the Rig Wrangle driven by a value, I added a version driven by the rotation of the first joint. I cheated a little here by manually setting the loop to run over the child points only.

-- And finally, I added a version that has a recursive FK rig where each joint's rotation is added to all its child's joints. This is a pretty common setup in other programs, but took a bit of work to get it functioning as expected. It's not a production-ready set up, but it has the functionality.

tail_v03.hipnc

Link to comment
Share on other sites

  • 5 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...