Sunday 14 December 2014

Advanced Features

Along the way I have also been tidying up the rig. Most controls have now had selected attributes locked and hidden. I've disabled scaling on almost all joints and some joints are unable to be translated where they are only used for controlling the orientation of a joint. This overall improves usability and readability of the rig and where possible prevents the user from breaking the rig.

I've added a few advanced options here and there. First up are the feet which have a number of added attributes such as roll, twist and lift options for the heel and toe. To do this a number of groups were created within each other, each controlling the rotation at an appropriate pivot point. These were then connected to the attributes using the Hypershade connection editor.



While all the functionality is there, the deformation isn't too great. The skinning isn't the main problem rather it is the way the joints rotate. I think this is a similar problem to the issue I was having prior to adding IK solvers. Rotating with small values gives the correct result but when you push the rotation the joints move in weird ways. This is something I was unable to correct through troubleshooting and if I had more time would focus on correcting this but I feel this would need to be edited right back at the joints, perhaps their local rotation axis or placement.
In addition the skinning isn't perfect on the shoes due to the complex mesh and the deformers aren't perfect either.

I wanted to do a little bit more with my blend shapes. To access them before would require you to open up the blend sheet window and the sliders would be easily accessible from there. This method wasn't entirely user friendly and would probably be missed as its not obvious they exist. To combat this I've added an extra controller that follows the head controller. This new controller holds all the blend shape deformers as attributes which can be edited just as you could with the blend shape window.



I figured I didn't have the time to look into creating a floating user interface but this would do the job pretty well. In addition to this there is also a face animation camera, accessible through Panels > Perspective > MeryFaceCam which is locked to the head as it moves. The facial animation controller is located conveniently so it can be accessed while using this camera.

I also included an additional variable in the eyes controller which allows you to switch between following the head controller or locking it to the master controller's world space (with the help of this tutorial). This allows you to move the rig around and the eyes will stay locked in one place. This is something I'd also like to add to the hand controllers if time permits.


Finally I've added some functionality in the wrist designed to help it deform better when rotated. Also using the connection editor I fed the rotation from the wrist controller into another joint located within the forearm. As the wrist controller rotates, the forearm joint will rotate 50% of its value. This has proven to work well while skinned.

Saturday 13 December 2014

Skinning - Continued

Skinning is definitely a time consumer. Not exactly difficult but it requires a lot of focus and tedious detailing to get the whole thing looking great when its animated.

Thankfully I found out about the 'Mirror Skin Weights' which has helped out a whole bunch with repetitive tasks. The only area that required editing after mirroring was the other hand as the joints weren't exactly identical on either side (can't remember how, think it was to do with pole vectors moving them) but that was sorted too.

The hands themselves have been quite a lot of effort on their own compared to the rig as a whole. On the whole the skinning is fine on them but not perfect. I've been unable to correct my weird thumb rotation axis thing and its not looking right at all when bending. Skinning was fine on it although not as easy as on the other fingers but the set driven key I put on it earlier is not working out for it at the moment with the thumb doing some unnatural movement. Set driven key took so long the first time I did it I'm unsure if I'll be able to attempt a correction on it. Like the feet, rotating small values is fine but pushing it results in unnatural movement.


One thing I am happy with is the skin weights on the jaw. I've managed to fix this right up with the lips deforming much smoother and the neck moving better than it was before. I've also attached the teeth to the appropriate joint (although for some reason the upper teeth would not show its faces, had to re-import this part of the mesh). Of course there's always room for improvement, I'd like to add more influences on to the cheek and upper lip to get it looking better.



I also got some decent deformation in the pelvis both where the legs bend and when the spine bends. Not getting volume deformation in the buttocks and making sure the spine didn't go bumpy required a lot of time with the smooth brush to get a good result.


Most of the recent tweaks have mostly been going around with the add brush and adding low percentage influences on one joint to a neighbouring joint in order to achieve some more realistic movement that there is an influence of one joint to the other.

I would say that I've fixed most volume loss issues and each joint deforms as it should. I had to do many test animations to identify problem areas. The wrist skin weights were particularly tricky but having gradient influence from the wrist all the way up the forearm solved this.



The neck and chest didn't require much editing but the clavicles were hard to work out. I'm not entirely satisfied with the movement the clavicles are giving but I think this is more from the way I connected up the joints and would want to spend time editing this either by adding in corrective joints or adding translation controls into the control shape. More skin weights influence from the upper arm into this area wouldn't go a miss.

As of right now my biggest concern with the rig is actually with the wrap deformers. I was confident from my earlier testing that it would work fine but this is a problem I wasn't able to foresee. With wrap deformers on all the necessary objects the rig is considerably slower to manipulate, there's some noticeable lag. This disappears when the wrapped objects are hidden so I've added an attribute to the master controller that turns the visibility of these meshes on and off, just so you are able to take a look at the (naked) rig with no lag issues. It's frustrating that this was one of the last steps in the rigging process and it was one that had a disappointing result with so few time to correct it. I have tried most of the different settings in the wrap deformer as well as combining meshes and wrapping those but I'm not getting any better results. Unfortunately my slightly laggy rig will have to do as I am unable to get any better results without drastically changing how the clothes are implemented into the rig.

Scripting Tool Progress 2

I've now more or less finished all the features I wanted to include in my tool.

I now have a functionality in the check box for colouring the control shapes. Finding the python command that would change the colour was pretty hard to find but turns it was just an attribute of the object. You first set current_ctrl_shape+".overrideEnabled" to 1 which allows you to override display settings, then you choose the colour by editing another attribute current_ctrl_shape+".overrideColour" to a colour index number (13 being red for example).



Initially I had planned to check the joint name and detect if it had a left or right label on it. So jnt_L_arm would be detected as being on the left hand side and therefore be red. I know the code to do this in other code languages but was unable to find it for Python. I did however come up with an alternative to finding out the location of a joint and it was to simply query its translation X value. I originally had it check the translation of the group which only worked sometimes, checking the joint location has been more reliable.

I've also coded in the simpler advanced options such as adding in an Orient Constraint and locking translation values. Both of these were handled with a maya command each and just saves the user from searching for these themselves.

Additionally I wanted the 'general' control shape to be resized and shaped easily by the user. In order to leave the attributes of the object at zero this is usually done in "hull" mode (right click the object and select hull mode). This was a hard command to find in python as well as its not so obvious.

With the help of Grant Clarke (tutor) we used a method of importing mel scripts that are used by Maya to do some operations.

However while hull mode was opened up, you still had to additionally click the object and select in a menu to edit the CVs. This was just as bothersome as opening hull mode. I wanted the process of creating the control shape to editing it to be instant.

Looking at 'echo all commands' I noticed this command appear when you physically click on a "hull mode" selected object: select -r ctrl_root.cv[0:7]
To me this seemed like the missing piece in the puzzle and so in python I managed to get it to work in this format: maya.cmds.select(current_ctrl_shape+".cv[0:7]")

So the mel script wasn't needed at all, this simple command does it. Not sure what the [0:7] is all about entirely but individual CVs are referred to as [1] or [2] so the [0:7] probably means all CVs in that object (since there are 8 of them). Oh, perhaps 0:7 means 0 to 7. Well maybe I learned something there. Anyway, I was happy with this functionality as it greatly increases user readability and I managed to work out the second half of the problem without even needing to look up anything on the web.

Tuesday 9 December 2014

Scripting Tool Progress

The scripting tool has been coming along nicely. I've coded most of the main features. The tool can now create the two different control shape types and positions them in the correct position. It will also pull in the radius from the input box.


To get the radius to be read properly I had to query the textField and convert the text to a float.

The control shape is also appropriately named using the name from the selected joint following the same procedure as the script we used in class.

I've now began adding in the functionality for the optional attributes. For the custom name override when the check box is not selected you are unable to type in the text box. When you check the check box you can type in a custom name for your controller and it will override the automatic name. I debated whether to have the prefix be required or not but decided if the joints are required to be named then the user should be familiar with the prefixes to include it in the name.

I initially managed to get the custom name function working for each individual control shape I was getting a "variable referenced before assigned" error and this was due to the if statement where I was reading the check_name_value, current_ctrl_shape was referenced in both the if and else statements so I had to initialise current_ctrl_shape for it to work.

Friday 5 December 2014

Skinning

Now that each limb is rigged I have connected the hierarchy for the the rig. Making sure that each limb goes with the correct body part it should do. After that I began the process of skinning.

(Incoming mini rant, skip to after bullet points for actual important stuff)
I encountered a major problem at this stage which prevented me from moving on to the skinning for a few days. The paint script weights tool did not like me and would refuse to show joint influences on the model. I tried different skinning options on different computers on different versions of different models (also resetting all maya settings). I also messed around with every available option in the tool and checked all display options available to me in the scene. Not only that but even the lists of joints was unresponsive and would sometimes show and sometimes not. I tried troubleshooting this via the internet and it seems like a very common problem but no one method of fixing it. A lot of people had got it working through re-skinning it, or toggling an option on and off but I couldn't get it to work.

But after a lot of playing around I had discovered my method to fix it which I noted down so I would remember for future uses:

  • 'Smooth Bind' with 'Normalize Weights' set to 'Post'
  • Open 'Paint Skin Weights Tool'
  • Set 'Normalize Weights' to 'Interactive'
  • Select vertex on mesh
  • Select 'Show influences on the selected verts'
Then the influences would magically appear. The weirdest method ever but if it works I'm not complaining. Unfortunately the colour ramp options were broken for me and would only appear in orange but at least I had something.


The above picture shows the result of the initial skinning, as expected. I have went through the joints and flooded out influences where not needed and fixing any major "you shouldn't be there"s. By keeping normalise weights on means I was able to avoid any "jumps to the origin" or unexpected movement.


I have done some work on fixing volume issues such as on the knees and a little bit on the spine. The skinning progress as it stands right now is each part of the body is moving with the part of the body it should be and that there are no crazy deformations. Volume loss is still present on the elbows and wrist twist. The feet don't bend so great right now and more time is needed to fix up the smoothing on the rather detailed mesh.

The head and neck are pretty much fine but the jaw is moving a lot of what it shouldn't and not deforming naturally. I've used a surface soft select to get the lips separated but I've not went into any detail fixing it yet.

I've tested using wrap deformers on the clothes to make sure they bind and move with the mesh and it seems to work as expected, even covering up some of the bumpy work I've got on the spine joint influences (but that's cheating).

Moving on from here is simply fixing up anything I've mentioned so far as well as trying out as many poses as I can to make sure every controller is deforming the mesh correctly.

Thursday 27 November 2014

Scripting Tool Interface

I have already got a good idea of how I want the user interface for my script to work so I have been able to build this using python scripting. The functionality of the tool is non existent but you can get a better understanding of how it might be interacted with.

I had some trouble getting the layout I wanted initially. The 'columnLayout', 'gridLayout' and 'rowLayout' options weren't working out for me and using tabs or drop down frames wasn't what I wanted either. To get a move on with the interface I used a 'formLayout', although it took slightly longer to code it was easier to get the result I wanted.

The interface itself is pretty close to the sketch I did earlier and I think overall should be easy to understand by any user familiar with Maya.


In the first section of the layout the user can select the type of control shape they want to make, by default it is a 'General Handle' which in this case is a NURBS circle. A 'Rotator Handle' can also be chosen which I described in my last scripting tool progress blog post.

For both shape types their radius can be chosen in the text input box and I've also included a check box here if you want to setup an orient constraint connecting the shape and joint. I initially had this feature locked to the rotator handle only but quickly decided it would necessary to orient constrain shapes other than the rotator type.

A separator separates the shape type options with the additional options. This currently includes the ability to colour the control shape. Right now I plan to have the colour automatically selected and applied depending on where the joint is: blue on the left side, red on the right side and yellow for central shapes. As a more advanced feature I could allow the user to select the colour themselves through a colour selection UI but for now I'm happy with the automatic as it will be useful in my own rigs.

Locking translation controls is also useful especially for joints with an orient constraint so this will simply lock and hide the translation attributes from the control shape.

In addition I've included the option to override the automatic name given to the control shape. The script to create control shapes which we used earlier in the semester automatically names the control shape after the joint. My thought behind the custom name was where when I used this script in the past I sometimes wanted a different name for the shape. Example: a control shape assigned to jnt_head_2 might want to be called ctrl_head_top.

I think the userface's design resembles that of what most Maya windows look like. I've also contained both the 'Create' and 'Add' buttons at the bottom (many maya windows have this) where they both apply the create operation but 'add' keeps the window open so you can perform multiple uses of the tool.

My next step is to simply implement the creation of control shapes into the buttons, then work down the list of features on the window adding in the relevant functionality.

Wednesday 26 November 2014

Pseudocode

For the functionality of my scripted tool I've written some pseudo-code (in python format) that will guide me in programming later on.

This handles functionality of creating control shapes as well as user interface elements.
  • import maya commands
  • define function name_check_select
    • enable name_input textField
  • define function name_check_deselect
    • disable name_input textField
  • define function create_control
    • joint_name from selection
    • joint_name_stub = replace "jnt" with "" in joint_name
    • current_ctrl_shape = "ctrl" + joint_name_stub
    • current_group = "grp" + joint_name_stub + "offset"
    • radius = radius_input from textField
    • if radio_general radioButton is selected
      • create nurbsCircle with name current_ctrl_shape and radius of radius
    • if radio_rotator radioButton is selected
      • create nurbsCircle with name current_ctrl_shape and radius of radius
      • delete history on current_ctrl_shape
      • duplicate current_ctrl_shape with temporary name circle_1
      • duplicate current_ctrl_shape with temporary name circle_2
      • rotate circle_1 by 90 degrees in X axis
      • rotate circle_2 by 90 degrees in Y axis
      • freeze transformations on circle_1
      • freeze transformations on circle_2
      • parent the shape node of circle_1 to current_ctrl_shape
      • parent the shape node of circle_2 to current_ctrl_shape
      • delete circle_1 transform node
      • delete circle_2 transform node
    • create a group with name current_group for current_ctrl_shape
    • parent current_group to joint_name
    • set rotateX attribute on current_group to 0
    • set rotateY attribute on current_group to 0
    • set rotateZ attribute on current_group to 0
    • set translateX attribute on current_group to 0
    • set translateY attribute on current_group to 0
    • set translateZ attribute on current_group to 0
    • unparent current_group from joint_name
  • if window wnd_control_maker exists
    • delete wnd_control_maker
  • create wnd_ctrl_maker
  • create buttons, radioButtons, text and textFields
  • position buttons, radioButtons, text and textFields on form
  • show wnd_control_maker

Tuesday 25 November 2014

Scripting Tool Ideas

For my scripting tool the idea I wanted to make was an assisting tool to making control shapes.

For the character rigs in my Professional Project the control shapes are mostly for FK rotation rather than the IK solvers used in my rig for this module.

I've found that the easiest rotation control shape looks like the rotate tool itself which is made up of 3 circles. To make this manually is on the complicated side and even requires the use of a command.

How this control shape is made is by creating a NURBS circle, duplicating it twice and rotating them into position. You then freeze transformations on these circles and delete their history. To combine them you combine their shape nodes under the main circle's transform node. Then, it is like any other control shape that requires grouping and positioning.

I would also like to include other options such as locking translation controls, automatically Orient Constraining the joint to the shape and colouring the control shape.

This is a sketch of an interface I'd like to aim for, it also includes some notes on the functionality of the script.

Looking at Other Scripts

For inspiration into my own scripting tool I did some research into other tools out there that are designed to assist in the rigging process.

There is definitely a lot out there, ranging from simple scripts that can solve a simple problem to complex tools that can automate most of the rigging process. The type of tools and where they are used can vary, with some tools being used to interact with a fully built rig, to others that help build the rigs.

Here's a few I found with some notes on their uses in relation to my own work so far.

Display Color Override

A neat little script that displays a colour index UI used for easily selecting a colour. This is used for objects such as control shapes to change their colour rather than having to go into the attribute editor and using the slider to find the colour you are looking for.

Radial Blend Shape


Useful tool that assists in setting up facial deformers such as eyelids and eyebrows. The deformer is suited to keeping eyelids deforming properly (i.e. over the eye).


A similar scripting tool to what I imagine I want to create. This is quite extensive offering multiple shape options, a colour selection grid and additional options such as auto/manual name toggle and adding text.

This script only creates the control shapes for future use in rigs, it doesn't apply them to any joint.


Create a full rig or a specific part of a rig, can rig characters in any position and is fully scalable. Allows IK/FK switches and other features.

One of the many auto-rigging tools out there, this was created by a student. Is pretty comprehensive but other auto-rigging tools have gone much further.




The only scripting tool on this list that costs money. This is a UI designed to enhance animation and allows the user to save out poses on a character rig. It also allows you to mirror a pose across the body and to transfer poses to other rigs.

It also acts as a picker allowing you to select control shapes from a user interface. This script is by far the most advanced and comprehensive script on this list but it does have dependencies on other tools.

This is a companion tool to the Rapid Rig: Advanced script (another auto rigging tool). Poser tools are often tied to the rigs they are designed for.

Thursday 20 November 2014

Blend Shapes

As my character rig is for animated films rather than games, I will be using a blend shape system for facial controls over a joint based system. Blend shapes work a bit like keyframes, where you set multiple poses on different faces, then on the main face controller you can blend between them.

The 'MikeAndTina' and rig I've mentioned previously uses blend shapes combined with a floating interface for interacting with these blend shapes. For now I've built the control shapes and will consider any user interface as an advanced feature later on.

As the mesh for my characters face is included in the mesh for her entire body, I had to extract the head from the body to be able to use as a blend shape. I used this YouTube video to work out how to extract the head. I discovered an issue with my character model that was seemingly unique to this model whereby when I cut the head from the body using 'Detach Component' the skin shader would seemingly trip out and produce a strange pattern. I tried troubleshooting many ways to fix this including removing all shaders, applying new ones, changing display modes and looking at vertex colouring but there seemed to be no fix. I had to re-import the skin mesh from another exported version of the character model for it to work. Thankfully it did work out in the end but I still haven't worked out where the issue came from.



Once my the head was detached and duplicated, I re-combined the original meshes (making sure to do so correctly without changing the vertex names) and merged the vertexes back together on the joint. The duplicated head would not be a blend shape itself but would be a base mesh for blend shapes to come off from that. The base head would then connect itself to the main mesh so to transfer the blend deformations over when used.

Blend shapes is another thing that a lot of time could be spent on. Many rigs that use blend shapes have a comprehensive selection of deformations that can be controlled. As my time was limited and I wanted to move on to skinning I decided to create a selection of blend shapes that would cover most facial expressions but that may not be as extensive as other rigs. However if time was given, creating more blend shapes from the base head is always a possibility.


In total I have 14 blend shapes that control the opening of each eye, the raising of each eye brow, mouth raise on both sides, a pout and wide mouth position, and a few more.

The soft selection tool came in handy here, in surface mode it was useful for opening the eyelids as well as deforming the shape of many facial features.

If I were to add more blend shapes I could add more deformers to the eye brows to change their shape, controls for cheek muscles, more mouth deformers, nose deformers and more eye lid deformers. All of these take time so I will consider adding more later if time permits.

Tuesday 11 November 2014

Spline IKs and IK Solvers

My rig's skeleton and control shapes are progressing well but I've fallen behind on adding in IK solvers. I've taken the time to set these up before moving into the advanced features and setting up the hierarchy of controls.

I should mention I have now set up my spine. This uses a Spline IK connecting the bottom and top of the spine joints. Clusters are added to control three different parts of the spine. The middle controller automatically positions itself between the other two controllers.

Using the connection editor I've also added twist and roll setup to the spline controllers for additional functionality.

I had some trouble with this whole procedure having to re-do the process when I didn't correctly position the control shapes. I almost had to re-do the procedure again but using freeze transformations on the controllers (which had somehow again de-positioned themselves) I was able to avoid that. This is something that could be automated easily for a scripting tool. I may want to consider that if it decides to break again.

I've had to return to IK solvers as somehow was unable to build them when they were discussed in class initially. I think this has to do with how long it took me to do the set driven key (which is quite tedious) and learning the ropes about building control shapes.



Its been a while since IK solvers were mentioned so I've looked over the documentation on them and brushed up my knowledge on how to build them. I've now added IKRP solvers on the legs and arms, and two on each feet to stop them from rotating when I move the legs. These extra IK solvers will be used when I add advanced attributes to the feet later on.

Another issue to mention here is that my character model's feet point out to the side a bit instead of straight ahead. This along with the joint orientation means when adding in a pole vector constraint the leg tends to rotate out of position. I was initially unable to fix this (others had this problem and scripts were being used) but I just translated the rotator along and it rotated the foot back into position (although not back in the exact same position, I remember this is not entirely necessary, it was good enough). It does mean my knee locators are not located in front of the knee but instead are a little bit off to the side. But if the feet are not pointing forwards then the knee isn't either so I am happy this will be fine to work with.

I had the same issue with the wrists snapping out of place when adding a pole vector constraint but learned that adding an orient constraint between the joint and the wrist first before adding the constraint meant no joint movement occurred.

Tuesday 4 November 2014

Technical Artist Research

This is a post mostly looking into Technical Artists in the industry.

Technical Artists are considered the connection between artists and programmers. They help to ensure assets can be imported into games and work correctly within the limitations but not hindering the creative vision.

They are also the researchers and tool designers. This is something we've seen an example of in our own coursework, where somewhere along the rigging process we'll find ourselves in need of a tool to help with that process. Improving pipelines is obviously more efficient to the process but can also help alleviate workloads by automating certain aspects of the process.

This year I've been learning 3D animation myself by optionally attending the Advanced Animation module. Through that I discovered the Mery rig which of course I am using the character model to rig myself to learn the process. The Mery rig is very advanced for something you can freely download on the internet and has been credited for being built to a very high professional standard. I mention this because it was only created by two guys and so far is the most robust and advanced free rig I've found.

Recently Sony Pictures Animation released a zombie rig from their Hotel Transylvania film. This was the first I'd seen of a major studio releasing something like this for anyone to try out. In the demonstration video one of the animators walks through the features of the rig. This is sort of evidence that the work of a technical artist to create a rig with a large variety of features pays off by making the job easier for the animator.


I've also discovered some information on DreamWorks website about technical art, particularly the process of creating character rigs. Artists are actually hired under the title of "Character Technical Director" (TDs) and can spend between three and six months of time on each character.

As their film "The Croods" required about 35-40 unique creatures the Character Technical Directors came up with their own package called the Creature Assembly system to help with this process. By storing information on different limbs and creature parts (wings, tails, etc.) they could mix and match them, analyse how they interact together and connect them up appropriately.

I'd highly recommend giving this article a read as I found it interesting and informative on the topic of character rigging: https://web.archive.org/web/20141214215455/http://www.dreamworksanimation.com/insidedwa/tech/cas



I'll leave you with a demo reel from Technical Artist Tim Carter who shows off some of the things he's created. This includes rigs he's made and their advanced features as well as dynamic cloth, scripts and some problem solving rig features such as no-flip elbows & knees.




Creative Skillset profile on Technical Artists: http://creativeskillset.org/job_roles_and_stories/job_roles/339_technical_artist_games

Monday 20 October 2014

Set Driven Key

As I've mentioned earlier, as well as manipulating control shapes around on screen, another way to interact with the rig is via attributes.

We have been learning about using Set Driven Key to control objects. It works a lot like animating itself, you select something and give it keyframes in different positions, only these keyframes are tied to an attribute which when you change the attribute it changes the object.

I've used set driven key on my hand controller to control the fingers. There are attributes which control the curl of each individual finger and then an 'all curl' which controls all those attributes. I was unsure of whether to set up 'all curl':
  1. 'All Curl' is set driven key against 'Index Curl', 'Mid Curl' etc.
  2. 'All Curl' is set driven key against the rotation jnt_thumb_1, jnt_index_1, etc.
For simplicity's sake I just used the finger curls I had already setup and connected them to all curl which has worked so I'm thankful for that. Some other rigs I looked at had set driven key for each individual finger joint but I had already spent enough time on this and didn't want to spend forever setting up countless joints.




The Set Driven Key tool works great but is not very intuitive. For a novice to this tool it would be very difficult to understand what is going on as there is no prompts to explain what to do. Once you know how it works its pretty easy to understand so although it could be a potential thing to re-work for my scripting tool I don't think this will be worth re-building.

Set Driven Key on hands generally takes quite some time. Again this something that could be scripted but I think is too advanced for me to attempt.

One problem I have run into is with the thumb rotation. All other fingers rotate quite well but the thumb's joints aren't all lined up correctly and the rotation it takes across the hand is not perfect. Although the 'Thumb Side' attribute can reposition it better I'd like to take a look at this later to try and fix the problem. I am unsure which rotation axis to use to get it to rotate properly so will come back to this later.

I've added in minimum and maximum values to these attributes so that the attribute value will not just keep going on forever if the user holds onto the slider (although the fingers wouldn't move further past their keyframes anyway), this is more of a usability thing as it looks less like a bug if the values are surpassed.
Another problem I foresee occurring is the fact that I've had to use guesswork to see how far to rotate the fingers. Without seeing the mesh move with it its hard to tell where the tips of the fingers touch the hand. Although not too much of an issue, this is something I can tweak once I've started skinning.

Monday 13 October 2014

Adding Control Shapes

Control shapes are main interactions between the user and the rig's functionality. They should be well located and easy to understand what you can do with them.



We have recently looked at how to set up IK solvers to create an Inverse Kinematics setup in a rig. I've shaped my wrist controllers around the wrist, this will be controller used to manipulate the arm. The shoulders have been given similar shaped controllers. Any controllers in the centre of the body have been given a circular controller scaled appropriately.

For the feet I edited the control vertexes to give control shapes that look like feet. We've been using a script to assist us in making these shapes as there are a number of steps involved. The important thing to note is that control shapes need to be able to be zero'd out to return to their default position. Having control shapes in offset groups allows us to do that (the group stores the translation difference from the origin).

As building control shapes and setting them up manually is quite time consuming and a script can be proven useful, this is something I may want to expand up for my scripting tool which could create control shapes with different shapes for different parts of the body.

I've given each control shape a colour, which helps with usability and distinguishing which control shape is for which side of the body (which can be useful when animating and limbs cross).

Problems arising here were mostly down to the resizing of control shapes which needs to be done in hull mode so it doesn't affect the rotation or scale values of the object. This makes things difficult for getting two shapes the same size and orientation. My rig's control shapes aren't perfectly even but not being perfect is seemingly allowed to a certain extent with rigging an organic character.

Monday 6 October 2014

Building the Skeleton

I have added a skeleton of joints to the character model. As my character is a human model its pretty easy to know where to put each joint as we know what is meant to rotate and what is not.


I have taken into consideration where joints are located in regards to the mesh, such as making sure they are in the middle of any edge loops specifically located there for deformation of that joint. In places like the knees I've located the joint towards the front of the knee more to ensure it properly deforms and reduce volume loss when it is skinned.


Some problems I have encountered were mainly due to how I built my spine, I never paid attention to how they were lined up (they were not all centred with the X axis) and so ran into a small problem when mirroring joints. All I had to do here was un-parent the joints, move them, then re-parent them.

I've also sorted the local rotation axis on each joint making sure that when all the joints in a limb rotate one way, they all rotate in the direction intended. Fortunately there were not many joints needing oriented, only the head, one arm (fixing one joint fixes the whole chain), one leg and a few rogue spine joints.


The orient joint tool proved very confusing to work with and I'm still not entirely sure how to get it working. It requires a lot of guess work knowing which way to flip things. This could be an idea for a tool to re-work for my scripting tool hand-in but if I don't understand the tool as it is right now perhaps trying to fix it without knowing the problem would prove difficult.

As discussed in an earlier blog post, each joint has also been named appropriately which means reading the outliner becomes a simpler task. Right now some joints are simply numbered after which chain they are in (e.g. jnt_R_arm_1, jnt_arm_2, etc.) which I may change later on if it proves necessary to name it the proper name (upper arm, forearm, etc.)

Friday 3 October 2014

Choosing a Character Model

I've chosen the 'Mery' character model to rig for this module.


When searching for models a lot were available but many were unsuitable for rigging because they were either too high poly or required signing up through a website. In addition it needed to be compatible with Maya 2011. There aren't loads of character models free to use but there a good number or already rigged characters available. When I included those possibilities (I'd just remove the rig and use the model) then I had a bit more to choose from.

These are a couple of character models I considered before choosing the Mery model. I also considered re-rigging the MikeAndTina or Sam rigs that I've mentioned earlier.





I chose the Mery model for a number of reasons. I decided I wanted to rig a character to be used in animation. This is mainly down to my preference as someone who likes to use rigs specifically for animated scenes. The original Mery rig was also designed for animation so therefore the character model is suitably high poly to work for animation. The character model is also appropriately modelled to be rigged in the first place with edge loops being where they need to be such as in elbows, knees and anything else that is designed to bend or rotate.

The model itself is well built and looks great as a character to animate with. My fondness for the original rig and its design influenced this decision.

The face is sufficiently detailed and contains all the necessary edge loops to be able to have facial controls, again this was a given due to the model's official pre-existing rig.


The model is split up into several meshes, one for the skin, and individual meshes for the hair. Clothes are also separate and even individual parts of the shoe for example are separated. This is one problem I do foresee being a potential problem in the skinning process later on where vertices are assigned to which part of the body is moving. The shoes' mesh is quite complex.


As the original Mery rig was designed for Maya 2013 and up, the mesh had to be extracted from the file and saved out. As the original rig is very advanced the mesh was tightly locked up and uneditable at first glance. I'd like to thank Lynn Parker (tutor) for helping save the mesh out as an OBJ and FBX file for me to use. 

Looking at Other Rigs - Continued

I have collected a number of rigs to look at. Some of which I have used to animate and some just to see how they function. I will list some of these rigs here and some of their identifying features.

Andy Rig


  • Can switch gender and clothes via attributes.
  • Limbs can be stretched
  • Facial controls that more than one aspect of an object, i.e...
    • mouth slider can control shape of mouth and jaw rotation
    • brow slider can control elevation of eyebrows but sliding to the left or right controls which eyebrow is affected more
  • Ability to control where elbow/knee controls are parented to (either part of the rig or the world)


  • "Breathing" attribute that deforms chest
  • Help toggle that displays text around some controls explaining how they work
  • FK controls have hidden nodes to help prevent gimble lock
  • Facial UI looks like a face, moving the controls also deforms the control's shape
  • Eye aimer control can be locked to world, moving eyes also moves eyelids and parts of the face


  • Multiple attributes allowing you to change the default shape, size, gender and proportions of the character model.
  • Facial controls placed directly on the face
  • Squash and stretch options for limbs
  • Scaling options on many limbs (a tiny head is amusing to me)


Thursday 2 October 2014

Looking at Other Rigs

As part of some research into rigging for animation, I have downloaded and tested other available rigs on the internet. I've taken into consideration how they function, how their controls work and what they look like, and any additional features they have that would set them apart from other rigs.

I've also been learning a bit of 3D animation so have been able to sample a few rigs already.

The 'Mike and Tina' rig is simple to understand and use, yet is also very reliable and has a number of features that can be used. It has an FK/IK switch so you can move limbs around in multiple ways: such as from the hand (which moves the rest of the arm) or rotating each joint (hand, elbow, shoulder) individually.




For controlling the face there is an interface which follows the head. Many elements on the face can be controlled by individual sliders. There's also a face camera to allow you to animate the face up close even if the character is moving around.


A recent rig that was made available is the Mery rig, which is very advanced and contains a whole range of features, while still remaining very simple to use even for a novice in Maya. The character design resembles something from Pixar and with the in-depth facial controls and control features it is a very powerful rig to animate.


Mery also contains a facial user interface although is not labelled like MikeAndTina's. Fortunately the location of these sliders match up with the layout of the face so you can make a pretty good guess as to which control controls what.


There's also IK/FK switches on almost everything and I prefer the hand setup to other rigs as it allows you to just grab a controller and do what you want with it rather than messing with values. For selection of multiple fingers for example you can use the picker tool which comes with the rig. This picker tool is an example of a script that could be useful to look at for my scripting tool later on.