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).

BUT!!!

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.

http://www.creativecrash.com/maya/tutorials/scripting/mel/c/using-qt-designer-for-mel-interfaces

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:
https://vimeo.com/139854713)

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.