Calling all riggers with knowledge of rigging tentacles/long necks. I'm building a rig for a Hydra, so think one big head with multiple heads sprouting from the sides - like the image below but with a main head at the base.
I have a rig that is working really well, except for the twisting.
The base of the rig is an IK spline setup, that I've skinned to a nurbs surface which drives a load of controls with joints parented under them (tweaker controls if you will).
The reason for having a spline setup as the base is to maintain length and volume, I've added stretch but implemented an attribute to clamp how much stretch occurs (keeping it consistent is key).
The nurbs surface is my way of adding extra flexibility to the rig, the tweaker controls allow for adjusting the overall shape, and additional non-linear deformers help with adding procedural animation.
The advanced twist options on the spline handle are not sufficient, as they only twist from the start and end points. So, I setup another nurbs surface with joints positioned where my main ctrl joints are, then connected the rotation of my main controls to these joints.
This produces really great twisting, and is pretty stable for the most part.
The problem! Basically, because I have extracted the twist from the rig, and it's handled through a separate surface that is connected to the final surface via blend shape - I can't twist the rig as a whole, because the twist is driven by the connections from the main controls. So even though my main ctrls are transformed via a main global control, I cannot twist the rig when the global ctrl is twisted. I have tried to extract a twist axis and feed it into a transform holding the twist setup, but I can't find a solution that doesn't flip and cause the internal parts of the rig to spin around and break.
I'm a junior rigger so please explain in somewhat dumb down terms, thanks in advance!!!!Of course if you have a solution that differs from this and works like a charm, please share your process!
Replies
The extra rotation on some parts seems to be a double transform issue? Usually caused by parenting sections together and then also driving them in some other way. Usually you can get around that by breaking those pieces out of the hierarchy, put them in a group and parent constrain the group to something they should be following. That way they exist in their own "space" and aren't being over driven by the parents when they rotate.
You can also turn off "Inherit Transforms" in the attribute editor to keep the parent objects transforms from driving the children.
But really, it's hard to visualize how you've got it set up...
Before I get into it, I'm open to changing everything I've done in search of a better solution. So, I'm currently working on the smaller heads that will connect to the main head. I want to be able to contain each head rig in its own module, which will be connected to the main head/body via its global control. Much like you would connect a head/neck setup to the chest - the neck base control acting as a global control for the smaller head. These 'head' modules will ultimately reside in the master rig structure like a limb would in a normal biped.
The rig setup:
Base:
- IK spline chain with control joints skinned to the IK curve.
- A nurbs surface that is skinned to the IK spline, same number of spans as IK joints, same number of follicles with controls and joints ( bind joints ).
- Stretchy IK joints, clamped.
Reason for this is I want the limitations of joints, as a way to control stretching, with the added flexibility of a ribbon to allow the tweaking of the shapes.
Deformers:
- I have a couple duplicates of the main surface to channel in some non-linear defs, such as sine and bend.
Twist:
This is the sticking point, perhaps my goal is not possible with this setup. I want to be able to twist the body ( the length of the neck ) around so that it can curl behind itself and around its neighboring heads. This is what I have now:
- A duplicate of the main surface, with duplicates of the main control joints to make twist joints, these are skinned to the surface.
- Then a blendshape relationship is created to drive the main surface - like the deformers.
- I then connected the rotate x of the main controls to the twist joints.
- The twist setup currently sits outside the rig - the problem child
This provides the behaviour that I'm looking for, however, when I'm setting up the hierarchy it gets tricky. I can't figure out how to incorporate this into my setup so that I can grab the base control ( global control ) and translate and rotate freely - as rotations are driven by the controls only.
I guess I should be thinking, do I want to drive twist from multiple controls down the length of the neck, or just from the rotation of the head, the animator and I would prefer to have the most control possible - so multiple controls suits our needs more.
EDIT:
I have removed the twist setup and implemented the advanced twist on the spline handle. For the most part it's working pretty well, but as a wider exploration I would still like ideas/suggestions how else I can build stable twist.