Astronaut APEX rigging | My experience

   965   0   1
User Avatar
Member
2 posts
Joined: 4月 2023
Offline


Over the past few weeks I was trying to figure out APEX rigging as a study at my university and was able to achieve quite a lot, considering it was my first time rigging in general.

First of all, at first I thought that APEX is something you can immediately jump into, but before that I had to go through basic KineFX because I wanted to do all the skeleton and skinning in Houdini as well.
It took some time to figure out how to orient all the joints in a controlled manner, the orient joints node was not always doing a great job without lookat attribute and sometimes I had to orient joints in VOPs, because orient joints node seemed to always takes children in consideration when applying rotation.


For the base mesh I used joint capture biharmonic. which gave quite decent results, but I still needed to do some really tricky weight painting around the shoulders because of how thick the mesh is as well as I painted the visor glass and head area manually because its a concave geometry and was not registered by biharmonic capture.

Credits for the mesh to Smithsonian 3D digitization, I used the 3D scan of a suit as a base and modified quite a lot in ZBrush.

And only then I could finally get to APEX. In an early APEX masterclass [www.youtube.com] I figured how to do basic FK setup with a control(slave) rig as well as how to create a custom parent constraint component. In my case I first duplicated the skeleton, color coded and tagged all bones and added a suffix to the bone names, then I fed the base mesh with skinning, base skeleton and control skeleton into the pack folder node.


In order to be able to work with these components we need to create Autorig Component node and select fktransform component, by default it will choose base skeleton as source and promote rotations for all bones making it available for transform in viewport, but since we going to use control skeleton we don't need exposed transforms on base skeleton, because we will parent constraint it to the control skeleton. We still need to create an FK setup for it, but we can remove any promoted transforms. Instead we need to promote the transforms for the control rig and we only need the parts that are not going to be included in future IKs, so everything except arms, legs, spine and leaf joints such as fingertips which we don't need.


One of misconceptions I had is that APEX is a system where you can create and modify bones while applying constraints, while in reality I had an impression that APEX does not create new joints, but modifies the behaviour and connections of existing ones. This is why if we want to have some extra controls that are not the part of the base skeleton, such as pole vectors for IK, we need to create the points where those poles will be. Which means we need to go back to our control skeleton and add those joints, then we can merge it with control skeleton and feed into guides.skel input for pack folder. I also did some adjustment of poles position in VOP because I wanted them to be exactly in front of elbows and knees in rest pose, otherwise the limbs with IK would snap their rotation to look at poles and would deviate from rest pose


Now that we have necessary joints we can start adding actual controls. First I wanted to add root, center of gravity, and spine middle point. APEX autorig component has a preset called Transform driver, which can do basic transformation constraints between joints, but the way it works is a bit tricky. In order to constraint three joints to each other in sequence and keep control over them we need to specify that one of the joints will be a parent for the driving joint, instead of setting one as driven and other as driver. For example if we want to connect cog to main, and then spine middle to cog, we need to make control for main joint, then create cog control and set main as parent, and then create spine control and set cog as parent, this way they will be parented to each other but have their transforms exposed. This is similar to the way its made in Electra rig example [www.sidefx.com], except this older version don't have spine middle control.




The spine setup is fairly simple, there are 4 joints driven by spline and since we want to use cog and spine middle control to bend upper body, we need to add cog as driver parent for the spine, and spine middle as a parent override for the chest and chest tangent controls that are created by spine control.


For the IK setup almost all parameters can stay default, the only thing we need to make sure is that our joints have correct tags, and that the handle and pole are using the names of the joints that we created in guide skeleton.


The next part was the most complex, the IK/FK Blend, the chicken rig showcased in masterclass is quite complicated and has a lot of overlapping joints that act as an auxillary controls. I wanted to make it simpler and since I already have control skeleton and base skeleton all I need is to add extra chain of joints to use as FK, and then somehow blend their xform and feed into base joint xform. The IK FK blend component from the chicken rig does exactly that but it seems it needs more joints and a custom IK setup which I did not have. After experimenting a bit I figured that the custom component finds two control joints and adds them to matrix4 slerp node and feeds into the base joint. Eventually I modified the component graph to add suffix _ctrl to joint names and find control and fk_control based on that. I also needed to add a chain of joints and I did it using rig attribute VOP, I also had to create an auxillary joint called hand between wrist and fingers, and use it as a tip joint in IK/FK blend.



Last thing is creating control shapes, which is fairly easy. I have copied over the control shape library from the Electra rig example [www.sidefx.com] and added a few shapes on my own. The main reason why I wanted to orient all the joints properly is also because of assigning control shapes is way easier if the joints have convenient orientation.

And the last bit that I have noticed, that can be quite important. When saving the rig using file cache, I recommend to always put APEX autorig component with bone deform at the end of APEX character chain. It seems that APEX configure controls node that is used to assign control shapes have some problem packing/unpacking the character, which makes the rig not save correctly in bgeo, making it not work in other Houdini scenes.

Thanks for reading about my experience, feel free to ask any questions and I will try to explain how I made things work to the best of my ability.
Edited by DusheninV - 2024年6月28日 09:52:02

Attachments:
pose.gif (585.0 KB)
skeleton_graph.png (1010.9 KB)
skinnning_graph.png (933.8 KB)
ctrls.png (69.7 KB)
fk.png (143.0 KB)
guides_graph.png (489.2 KB)
spine.png (47.4 KB)
ik.png (54.0 KB)
ikfk_joints.png (509.7 KB)
ikfk_blend.png (69.5 KB)
wave.gif (1.1 MB)
drivers.png (68.6 KB)
main cog spine.gif (4.2 MB)

  • Quick Links