Friday 28 October 2016

8 bit to 16 bit PSD glitch

Hey! Look at this!

I was texturing a character today, when I decided to switch from 8 bit to 16 bit in my PSD file, and I found this cool glitch! As cool as it is, I'm sure it's caused someone headache somewhere. Anyway, here's what the transition looks like:

8bit (original)

16bit conversion

Wednesday 26 October 2016

maya.mel.eval() not working

The Problem:
I got these errors when trying to run my batch FBX exporting script today:

global name 'maya' is not defined
# Error: NameError: file <maya console> line 1: name 'maya' is not defined

How annoying. After rummaging through my script I came to the line which was causing me the error, which was the maya.mel.eval() script (whereby you can run MEL commands in python).

The Fix:
Turns out, Maya had turned off all of its plugins and that's what was causing the error. Not sure which one was the correct one to turn on, as I didn't have the time or patience to test it out, so I just turned them all back on under Windows>Preferences>Plug-in Manager and checked the box 'Loaded' under 'Apply to all'.

Thursday 20 October 2016

Maya viewport running slow

"Hey Alex, my Maya viewport is running slow, especially when selecting nurbs curves whilst animating!"

Yeah? Well, maybe you should un-check this badboy. (Graph Editor > View > Show Results) Honestly, the amount of times I've thought, "Huh, weird this animation is running unusually slow", only to discover it's this silly little option box has been frustrating.

Wednesday 12 October 2016

Unity breaking once again.


Triangulation, Deformation & Max influence issues - Maya to Unity

I'm working on a game trailer at the moment, and encountered a bug regarding deformation issues and things not appearing in Unity as they do in Maya. Thanks Unity.

The Problem:

A side by side comparison between Maya and Unity shows that in the middle of an animation being played, we are getting different deformations.
It may be hard to see because of the lighting, so I have drawn a blue outline of the jacket beside each image. As you can see, the image on the left (Maya) has a nice smooth deformation. The image on the right has a 'nice' lumpy deformation.
The reason this happens I believe, is due to the way Unity interprets the influences of joints, and also the triangulation on export/import.

The Fix:

1.) First, go into your quality settings in Unity (Edit>Project Settings>Quality) and try changing your blend weights. If it's on 2 bones, change it to 4, and vice versa. This should hopefully fix your problem.

2.) Still not fixed the issue? Have a look at your rig in Maya, what are your max influences on your mesh? Play around with these settings and try capping your max influences at 4 with the 'set max influences' option. You shouldn't be using any more than 4 for a game rig anyway (with the exception of cinematics/trailers etc.)

Happy riggydigdigging!

Saturday 1 October 2016

Can't drag select multiple objects?

So, I had an annoying bug today.

The Problem:
Can't drag select multiple objects (meshes) in Maya.

The Fix:
Go to your device manager, select your GPU (graphics card, under the heading of 'display adapters'), right click is and select the 'driver' tab. If you can, roll back the driver, if not try updating. Hopefully this will sort out this problem for you, and other funky stuff eg: outliner icons being a weird size.

Can't drag select multiple objects?

So, I had an annoying bug today.

The Problem:
Can't drag select multiple objects (meshes).

The Fix:
Go to your device manager, select your GPU (graphics card, under the heading of 'display adapters'), right click is and select the 'driver' tab. If you can, roll back the driver, if not try updating. Hopefully this will sort out this problem for you, and other funky stuff eg: outliner icons being a weird size.

Thursday 16 June 2016

Rigging a character for Unity

Okay, so this is more of a future reference to myself to come back and finish this post. However, the things I want to cover will be:

-Deciding whether you want to use mecanim before rigging.
-Handling squash and stretch within unity.
-Avoiding translation.
-Optimisation, combining your meshes.

Check back next month, this post will be updated when I get the time!

Tuesday 24 May 2016

Importing reference crashes my scene!

Just a quick one, but I feel as though someone out there is probably going to have a similar problem.

Let's say you have 2 animated 'things' in a scene, for example: a sword and a character.
Let's also say both of these things are referenced.
Let's ALSO say that the sword has a constraint coming from the characters hand.
Let's finally say you want to import the reference at some point.

Nooooope. Crash crash crash crash crash crash.

I didn't know why I was getting this issue for a while, but it turns out that the thing that was causing it was the mixing of constraints between two referenced objects. Best to bake out the keys you need and delete the constraint before importing!

Thursday 19 May 2016

Animation amplify/mute

I made another thingy!

So, you have an animation and you're reasonably happy with it but you wish one section was slightly more exaggerated, or maybe less so. You could go in and tweak every individual curve ooor...

...You could use my script! Download it here: AT_anim_amplifyMute

What the script does, is scales every selected curve up/down by a specified amount, using the mid-point (between the max min values of the selected curve range) as the pivot.

Here it is in action:



Tuesday 17 May 2016

More Unity Animation Mismatches

Yet again, another mysterious animation mismatch.
You have your animation in Maya, it's all set up how you want it, you export it, open it up in Unity and boom - something's out of line, mis-placed or rotated in the wrong way.

The problem that caused the issue for me this time round, were rotational values dipping from negative to positive. In the gif below, you can see the mismatch:

As you can see, the hand is rotated as intended in Maya, and yet when exported and brought into Unity, something is happening along the way.

The fix was to go into the graph editor and edit the rotate X value, so that it no longer crept up into the positive values. Interestingly, using the Curves>Euler fix button actually caused the issue for me this time round. Here, you can see the graph editor before and after:

Still not entirely sure what causes this, but it looks as though Mecanim has something to do with it, as when set to 'generic' mode, the issue no longer persists within Unity.

 Unity is a mysterious woman.

Tuesday 12 April 2016

Unity GUI errors

Recently i've been getting a lot of GUI errors. This is one of the errors that flags up in my console:

Reported delta does not match with progression of time. Check that the OnInteractivePreviewGUI function only updates the Animator on Repaint events.

If you're unsure why you're getting an error (not specifically this one) try resetting your layout. As mad as this sounds, it's fixed a multitude of errors for me now.. buggy old Unity.

Mecanim update bone bug!


If you want to go back and edit your rig after you have already exported it into Unity, and created an avatar - you're going to have a fun time.

Unity doesn't seem to take to updating files very well - especially avatar files. This is the problem I faced and how I fixed it:

1.) Export Rig into Unity - everything hunky dory, avatar bones configured. Great.
2.) Export animations - link to avatar. Everything working okay.
3.) Update rig in Maya (in my case, the positioning of the bones were changed)
4.) Re-export to Unity, overwriting the old avatar file.
5.) Look at animations, things are looking wroooong. Intersection issues everywhere. WHAT IS GOING ON.

And the solution:
6.) Make an entirely new avatar file, re-link animations to new avatar file. Eureka! Things work.

I can only assume that when you create and configure a new avatar, Unity will set this in stone, even if the file is overwritten. Creating an entirely new avatar forces Unity to re-do this configuration process, thus updating any bone/rig changes.

Tuesday 5 April 2016

Delete half frames

I came across something really annoying the other day whilst I was re-timing my animation.
I select all my character's controls, and scaled the keys down - as I wanted a certain part of the animation to be faster.

I then right clicked and attempted to 'snap' the newly scaled keys, only to find that because some keys were next to one another to begin with, they couldn't snap to the same frame - bummer!

This leaves you with a whole bunch of keyframes that are now on a time value of eg: 1.5, 2.034, 10.56767 etc. Not cool! You will never see these keys, as you will only ever be able to view one frame at a time - thus rendering them useless!

So, grab my script here:

Then, select all curves you want to clean (delete any half frames) and run it! Begone fowl subframes!

Hope this helps someone. :)

Wednesday 16 March 2016

Flight cycles

Could well be useful!

bindPose error

Error: file: C:/Program Files/Autodesk/Maya2016/scripts/others/newSkinCluster.mel line 73: Skin on exampleName_joint was bound at a different pose. Go to the bindPose to attach new skins. //

So this can happen when trying to bind a new mesh to your current joints. God bloody damn it.

To fix this error, simply type into the 'select by name' option box in maya: *bindPose* 
Now press your delete key.

You are now free to bind away! This has fixed all my bindPose error problems, and to date hasn't broken any of my rigs yet. (I have been using this fix for over a year now.) 

Wednesday 9 March 2016

Keyframe Offset Script

I was playing around with scripting today and made a new tool which you may find handy!
It takes a bunch of objects with keyframes that you have selected, and offsets each of those keyframes by a specified number.

Here's some things I made while playing around with it:

You can download it here. It doesn't have a GUI for now, but I will be making one soon!

Thursday 3 March 2016

The mysterious 'update' button.

After coming across numerous problems with Mecanim and setting up avatars, I came across an unusual 'fix'. Whilst this seemed to fix things from the onset, it caused major problems further down the pipeline and is something you should avoid.

Here, you can see the default settings of a .fbx animation file upon first loading it into Unity. Excellent, now we want to change the Animation type to 'humanoid' and avatar definition to 'copy from another model' (something which has already been set up previously).

Now, for whatever reason the order in which you click these buttons seemingly yields a different result. You'll notice that if you change the animation type to humanoid then click apply, then change the avatar definition, and then click apply once more, a little button labelled 'update' will appear.

How interesting, I wonder what happens if we change all the settings in one go without going through this two stage process of clicking 'apply' twice.

No update button... What!? Whether this is a bug or a feature, I have no idea. However, from an initial glance, it seemed as though leaving this button un-clicked fixed a lot of problems (intersecting parts of the rig with the mesh, additional bones/joints affecting the avatar etc).


In the long run, it seems to leave the avatar in a weird limbo between 'generic' and 'humanoid' setups. For one, no root motion will be generated when this update button is still visible, your looping indicators will not change depending on the frame range, amongst many other problems.

For anyone with any further knowledge, please let me know what this feature is for. For anyone else, to save yourself from future pain, just click the button.

Wednesday 2 March 2016

Creating python GUIs

Check out this link, super handy.

Recording Mouse Movements - Animation in Maya

If you're familiar with Adobe After Effects, you may also be familiar with something called 'Motion Sketch'. It's a pretty awesome function that lets you animate certain objects in real time just by using your mouse... kind of like puppetry.

Well guess what! I was looking for a feature like this the other day because I was working on a project where we were animating puppets in 3D! (you can view the finished product here:

Turns out, it's another secret bloody function in Maya! Good job Autodesk, keep us guessing.
Anyway, select an object to record and run this MEL script:

recordAttr -at "translate";
play - rec;

For rotations, unfortunately it's not as simple as changing the word 'translate' to rotate. You have to convert the data from degrees, to radians and then back to degrees again. Bit of a faff, but here's the necessary code:

string $curAngleUnits = `currentUnit -q -a`;
currentUnit -a rad; // Temporary set to radians 
recordAttr -at "rotateX" -at "rotateY" -at "rotateZ";
play -record; 
currentUnit -a ($curAngleUnits);

Hey presto, real-time, on-screen recording.

Saturday 13 February 2016

Spring IK

Spring IK
There's a cool and somewhat secret function in Maya for whatever reason, called the "IK Spring Solver".
It's great for creating quadraped legs, amongst other mechanics in rigs. In order to 'unlock' this secret attribute when creating your IK node, type in the MEL command line: ikSpringSolver;

In my opinion, this should be something that should load automatically with Maya by default. But then that's just a rigger's way of thinking, right?

Problem when moving the Global Control
Depending on your creature/character rig setup, when moving the global control you may find that the IK spring solver does not follow the way it should. In my case, I had a broken hierarchy, linked together with parent constraints. The way this issue was fixed was to delete the constraints and just use good ol' fashioned parenting. 

Have a mess around with it, and if you have any problems leave a comment here.

Wednesday 10 February 2016

Euler Rotation Problems

Recently I've been having an issue when animating that a control will flip 180° or 360°. This usually occurs for me when I am matching FK/IK manually or animating a character turning around.

You can see the issue occuring here:

Very annoying - especially if to fix it you go in frame-by-frame. Fear not, there is an extremely handy and seemingly magical button in the graph editor called 'Euler filter'. It is located under Curves>Euler filter. Select the problem keyframes, hit this button and voila! Like magic, Maya interprets the information, and prevents any curves from exceeding 360°. Perfect.

Why this isn't a MASSIVE button outlined in red I don't know...

Monday 11 January 2016

Importing rigs from Maya to Unity

I have been working at the games studio: Mojo Bones for a little over 2 months now. This is my first job in games and I have had to overcome a range of problems when importing rigs from Maya into Unity.

Here are some of the key problems I faced and resolved which I shall discuss in this post:
  • Hierarchy - Why Unity hates broken hierarchy and how to deal with it.
  • Scaling - stretchy squashy joints. Why this won't work out of the box and how to overcome it.
  • Naming conventions (naming clashes can cause problems whatever program you are in!)
  • Avatars - what they are, and how to set them up.
  • Exporting to an FBX - what to include, and what settings to set.
  • Humanoid setup with Mecanim.
  • Extra/Additional bones when using Mecanim (like wings, clothes, or in my case a backpack.)
  • Jittery Animation? Probably keyframe compression.

The Fix:
If you are using a broken-hierarchy rig, follow these steps:
  1. Select all joints you want to be bound (or are already bound) to the skin in the initial broken hierarchy rig. 
  2. Duplicate them.
  3. Remove any constraints and connections. 
  4. Parent any broken sections ( eg: ribbon joints ) 
  5. Parent constraint each of the newly duplicated joints to their respective broken hierarchy rig counterparts. 
  6. Give them a suffix. ( eg: 'game_' )

The Explanation:
Mecanim hates broken hierarchy. That is the nub of it. If any part of your rig uses broken hierarchy (such as ribbons) Unity will spit it right back out.

You can follow the fix above and do this manually each time for every character OR you could save yourself potential hours and script it... OR you could save yourself even more time and use my script,
which you can download for free below.

Extract the download into your Maya scripts directory, and then run these three lines of code:

import gameRigJnts
from gameRigJnts import *


Scaling joints - squash and stretch 
The Fix:
You will need 2 rigs for this to work as mentioned in the hierarchy section of this post. When all game rig joints have been constrained to the broken hierarchy rig, you can now see that the scaling in the axis that points down the joints (in most cases the 'x' axis) works. Whilst this now squashes and stretches it does not retain mass.

Unfortunately you will need to effectively 'scrap' the conventional 'y' and 'z' stretch nodes/expressions and fake it with blendshapes instead. Blendshapes are fairly heavy on game engines, some do not support their use and you will never get an exact mathematical squash and stretch - but it will do the job.

The Explanation:
Turns out Unity hates scaling joints too. After scripting my own stretchy/squashy spine in Python and implementing it into a rig for Unity, I soon discovered that the deformations were not transferring over as they looked in the viewport for Maya as they did in Unity's animation inspector (viewport).

Annoyingly, I couldn't seem to find the issue immediately, as nothing seemed to be out of the ordinary and no warnings were flashing up upon import. However... after doing a bit of searching around on the internet, I discovered that Unity does not evalate scaling in the same way that Maya does. Infact, Maya seems to have it's own scaling algorithm built into it when it comes to scaling joints.

Naming Conventions
The Fix:
Make sure no two items are named the same when importing to Unity. Batch add prefixes if necessary with the 'prefix' tool in Maya.

The Explanation:
Naming conventions are something which cause problems all the time all over the place. Not only do naming conventions help keep everything tidy, organised and legible for when you or somebody else opens your scene up in 18 months time, it also prevents further problems down the line.

Naming conventions are ESPECIALLY important in rigging (although I'm sure every department would say that about their own part of the pipeline).
When you have 200+ joints in your rig, you need to be able to find something fast and efficiently. Naming may also help with specific scripts that you'll want to run in the future.

In this particular case, when I imported my first ever rig into Unity, I came across a problem with my naming conventions; name clashes.

The reason that I had a name clash was because I have 2 separate skeletons, one serving as a normal, broken hierarchy rig that I would usually use for vfx or cg film and the other - since Unity hates broken hierarchy - is a non-broken hierarchy rig. This serves as a 'dummy' or 'slave' rig that just follows the initial rig through parent constraints.

These two separate hierarchies (effectively duplicates of one another) each had the same names for the same bones - a bad practice whatever program you're in, but for Unity it was particularly bad for dealing with the Mecanim system and may have caused other errors down the line. Best just to avoid it at the outset.

Fortunately, this is a very quick and simple fix - just add a prefix to one of the skeletons, (eg: game_head_jnt, game_pelvis_jnt, etc.) Once this is done you are good to import to Unity.