Interfaces has been around for decades. For a while we had been using
text input UI’s. There was a huge following for the voice-activated
UI’s. But the most prevalent and most used UI is the graphic UI. People
have been reinventing it ever since it’s first conception.
So much so that it has been in heavy regard that UI’s can make or
break an OS; and we’ve seen this happen time and again. UI’s also make
or break game consoles, even games themselves. I would even go as far
as to say (without valid citations) that development for the, CG and
UI, should have and have been going hand in hand. (This guy here,
Renato Polimeno, has a list of UI’s he compiled from the web in his website.)So
wouldn’t it be funny if our rigs would be using primitive UI’s? Aha! I
developed a script that automates a system to create a UI for any Maya
rig. The method is very promising, and I am here to share it to
everyone. As a disclaimer, allow me to just say, the technology is old.
I just developed new way to use old methods. As a testament to its
simplicity a script could be written to automate the process for just
15 lines. It can even be shorter. But it is the methods behind that I
would like to share here. Hopefully, you guys would appreciate it and
start using it with your rigs. And since it is so easy, you might even
consider adding UIs to rigs that you don’t own.
Here is an example of a UI that you could create using this tutorial
as a guide. You could design your UI in any way you deem fit. Allow
nothing but your creativity to limit you. The idea is that controls
should be easily accessible at all times or at least much of the time.
UIs are great but are hard to create. This method would make it easy.
There is just two basic tools that Maya already offers that we shall
exploit to get the results that we want. The first is the parent
command. The same procedure being activated whenever you press on the p
key. The difference is we run it with flags to make sure it works on
shape nodes instead of just transform nodes’ hieirarchy. We could
therefore have extension shapes for any control.
The line to use is ‘parent -add -shape shapename‘. You can
enter the command while an object where you want to add a shape name is
already selected. You can include names, a name of a list of names of
shape nodes you wish to add followed by the transform node you want to
add it to, after the command to be explicit.
The next tool we wish to exploit from Maya, believe it or not, is
blendshapes. Blendshapes allow us to make a base object shape blend
into the target shapes. Normally, blendshapes are set to local mode,
which means it will ignore differences in position, rotation and scale
between the base object and target objects. For facial animation
setups, this is what we normally use. There is another mode though,
that has been forgotten for lack of a genuine practical usage and that
is setting the mode to world. This will make your base mesh blend into
its target mesh, taking into account any differences in position,
rotation and scale. This is what we want and what we will use.
So in effect, what we are trying to do here, is 1) add an extension
shape to the controllers that we want to be able to control. Then, 2)
we give these extra shapes blendshapes in world mode. These extra
shapes would then follow the shape of their targets, while also
following their size, position and orientation. And true to the nature
of any extra shape node for any transform node, clicking or selecting
it would be just as if you selected the transform node.
If you prefer seeing a step by step for this tutorial, minus explanations, follow these:
1. Create a curves and shape them according to how you’d like your interface to look like. 2. Duplicate the curve. For this tutorial’s purposes, rename it to “duplicateCurve”, but you could give it any name you want so long as when I refer to a curve you duplicated, you know that it is that curve that we mean. 3. Get the name of the shape associated to the duplicate curve (we talked about this). Normally, it’s the name of the curve with the word “shape” suffixed to the it (e.g. duplicateCurveShape). In the Attribute editor, it’s usually the tab right next to your objects (transform) tab. In the channel editor, it is the name of the next section immediately after your visibility attribute/channel. In the outliner, if you click on display and turn on shapes, uncollapsing objects would reveal shapes associated to them. 4. Select the control you would like to add the extension shape to. Enter this command (sorry, there is no tool-based alternative to this.) parent -add -shape [shapename]; (e.g. parent -add -shape “duplicateCurveShape”; ) 5. Delete the duplicate curve (e.g. duplicateCurve). Now if you check the outliner, under the control curve where you wanted to add a shape to, there is another shape. It is the shape you added. You successfully transferred the duplicate shape unto the control you are adding an extension to. 6. Select the shape node of the curve you created in step 1. This is best done through the use of the outliner. 7. Shift+select the shape node of the curve you added in step 4. Again, this is best done through the use of the outliner. 8. Go to [Animation] Create Deformers->Blend Shape. 9. Select the blendShape transform node. 10. Go to the Attribute Editor. Set all weights to 1.000. Set origin method to world. 11. Set the visibility of the shape you created to off.
Note: You can have anything happen to the curve you created. You
could make it change shape with more blendshapes that are also driven
by the control object. You could constrain it to the camera. You could
give it set driven keys so that they would change according proximity
of objects to each other.
If you would like to see a script, that does this exactly, run this:
// note: the last command was there to call the procedure we just created.
Now, all you need to do is run the command specialControls, while
having two or more objects selected. The first object being the control
you’d like add curves to.
This here is another way of applying this method–taking it to the
next level. It was an attempt (successful to my surprise) to emulate
the same effect that Paolo Dominici had for his control free rig that
could be viewed here.
As a disclaimer: I did not intend the script to accomplish something
like this. But it works! Check it out and see if you could think of
ways to use it for other mind bogging creations.
These are the step
1. You’ll need to acquire a ready working rig. 2. Select the mesh. Apply a ‘duplicate special’ on it, making sure you have “Duplicate input connections” enabled. Make as many duplicates as the controls that you’ll have to replace. 3. These duplicates should react exactly like how the original was moving. Test this by moving controllers. Make sure the duplicates are following the original exactly. 4. Delete faces from the duplicates, leaving only faces that you would represent the control you are making. Make sure you have Construction history turned on. 5. Select the control. Shift-select the duplicated mesh (with deleted faces). Run the script. 6. Put the original mesh in a layer that set to Referenced. 7. Repeat steps 4-6 for each duplicate/control curve.