The elephant’s trunk was one of the most challenging parts of the rigging. I knew I wanted a simple FK trunk, and I knew I wanted a trunk with dynamics. However one of my animators had also informed me they wanted an IK spline trunk to animate with as well. As such, I needed a trunk that could switch between any of these, and more importantly, blend between any of them to any of the others. My desire to allow the trunks to blend meant I couldn’t simply use an “enum” attribute to change the parent constraints as this is an “all or nothing” attribute. Theres no way to have half of one and half of another. I also decided I couldn’t use a single “float” attribute with one of each of the control types at -1, 0 and 1. There would be no way for me to blend between the two trunk control types at either end (-1 and 1). They would only be able to each blend with the control type that was at 0.
Eventually I decided to use two different sliders, one that would blend between FK and “other” and a second that would blend between IK and Dynamic. This second slider controlled what the “other” was. In order to do this I had to create four duplicates of the trunk bone set up. I had an FK duplicate, an IK duplicate, a Dynamic duplicate and the “other” duplicate. The deform trunk was parent constrained to both the FK and the “other”. I then wired up the FK/other attribute to control which parent constraint was in use. The “other” trunk was then parent constrained to both the IK and the Dynamic and these parent constrains were wired to the second IK/Dynamic attribute.
It meant spending a huge amount of time in the Hypershade, wiring up various items. It was extremely time consuming as I had to organise items in the hypershade so I could see what was parented to what and where the wires actually needed to go. Its definitely the largest wiring system I’ve created when rigging so far.
Having achieved the ability to blend between any of the different control systems, I needed to actually work out how to create a dynamic trunk. I watched a variety of tutorials and read a load of sites before deciding what I felt would be the cleanest, and simplest, way of rigging it. I applied another IK spline to the trunk and then duplicated the spline curve. This duplicate would be the input for my dynamics. So this was the curve that I had to create controls for. I made them in the same way as I did for the trunk, by creating clusters for the various points along the curve and parent constraining the clusters to controllers. I then applied dynamics to this duplicate curve which created another two curves in the process. One was the dynamic curve, and one was the output of the dynamics. The final step was to make this output curve control the original IK spline. I simply applied a blendshape to the spline, turned it up to 1 and locked the attribute so it couldn’t be changed or broken.
Working with dynamics is slightly strange though, as the dynamics only update when Maya plays the animation. This means you can tweak the starting position of the trunk, but it doesnt actually move the mesh (or the bones) until you press play. I think it unlikely the animators will want to ever just have a dynamic trunk, but I feel it may be nice to blend with some FK animation to add some extra secondary motion to the trunk.
Finally, I created some extra attributes so that the animators can edit the flexibility and stiffness of the dynamics and so affect the way Maya calculates the shape of the output curve.