Personal Project - Marco Giordano Character TD


Scripting, Rigging



Collision deformers

Plug-in, Deformer

Spine Rig Developing

Rigging , Scripting , Plugin

Pose Reader

Plugin, Rigging


Plugin, Rigging


Plugin, Rigging


This was one of my first mechanical rigs. I got this awesome model from my good friend Nicholas Silveira. Here you can find a quick demo of the work I have made :

As you can see I wrote a UI in order to interact with the character. The UI was a Mel UI , at the time Pyqt was an external plugin for maya and was not that common yet. I was at the beginning of my scripting journey so I dediced to explore also the world of autorigging. The result was a leg autorig for the scorpion , which in the end saved me a lot of time since it had 6 legs :

Animation Import export V1.00

This is project started when I decided to learn how to export data outside maya python. I decided to use XML which is pretty much the standard in the industry ( or bettr it was) . The project evolved in being an animation import export with quite a bit of features. Here is the demo :

Couple of year passed from when I wrote that script and my skills evolved quite a lot , I do believe is about time to write a new one . Xml parsing for me is quite painful. Lately I always use json format to store my data which is fast and really quick to interact with.


This is a rig i have done for iAnimate students.This mesh was already rigged for xsi so i took it and rigged for maya.
I wanted to create a really cartoon rig that could be stressed a lot.
texturing/shading by : Giovanni Dossena

Major rig features :

v 1.0

(There are many minor features all over the rig like bendable ball joint , often missing in rigs)
-Bendable limbs and neck
-Full body stretch (Legs,spine,arms,nack and head)
-Sliding knees
-Adjustable bones lenght in arms and legs
-Knee/elbow stretch and lock on polevector
-Different body space for limbs
-Option to fully bend the spine or keep upper torso rigid (in order to respect char design if needed)
-Gimbal lock controll on arms and wrists
-Rig shelf with several utilits for quick selection, keyframming ,resetting ,visibility and ik fk snapping
-Big range of motion for face expressions.
-Eyes buldge

v 1.5

-Body snap for wrists
-Counter twist and twist kill.

Here is a quick demo of the rig.

Collision Deformers

During my studies I had the chance to work on deformers , I have to say pretty interesting and fun stuff to deal with! THe first attemp was on a collision deformer , basically a surface deformed by another one when colliding .
The first result was the MG_contactDeformer :

It was retty basic but had some nice features like the one to keep the shape deformed , reset the shape and so on After a while I decided to expand this deformer so I decided to implement a bulge when getting deformed.
This will later lead to the birth of MG_collisionBulge deformer

This deformed was basically pushing along the normal to create the bulge and was working really nicely .
Then aftert some deeper testing some problems started showing up , the most annoing one was the fact that if the mesh was folding or having some weird shape the deformed mesh was getting odd shapes.
This has been fixed on the V2.
In this new version two method of bulging have been implemented :

  • - Low res cage : It is possible to plug a low res cage to use as normal source for the bulging , so no more folding and odd shapes problem
  • -BlendShape mode : It was possible to plug a shape that will be triggered locally and based on the amount of bulge needed

Then last optimization that has been done was to implement the use of kdtree which gave me back 40 fps !!
NB : This plug-in is not available for download yet , The V1 might be in feature , stay tuned.

Debug Custom Nodes

In this section I gather the debug node that I use for speed up my coding workflow and debugging plugins

1 )MG_vectorGL :

This node lets me feed in an array of vectors and offset points (for the vectors) and then It will draw the data. This let s easily visualize data and find errors in the plugin.
I used this node several time already and it has proved to be really usefull to debug math.

N.B : MG_vectorGL is available for download check the download section

Spine Rig Developing

MG_pathSpine | Marco Giordano TD

In this section I want to go over different kind of spines , both "plugin based" and "maya noeds only based" At the end of this project I wish to have a series of classes to quickly create different kind of spines for different needs

MG_pathSpine :

This spine is plugin based, all the skinning bones lies on a curve and then deforming the curve make the spine to deform, How you deform the curve is up to the rigger , you can have many in-between controls or none .
What is only need is a top and bottom control to compute the twist along the curve
Here is a demo :

N.B This plugin is not available for download

Houdini quaternion spine

MG_houdini quaternion spine| Marco Giordano TD

The first thing was this quaternions spine I did in Houdini , this was the exact replica of my maya spine but in Houdini.

Almost everything was done with standard Houdini nodes , the only thing I was not able to accomplish was the computing of normals along a curve.

Now let me explain this , by default Houdini offer various way to compute normals on a curve but , for my goal I needed really stable result so the

algorithm I needed to use was the parallel frame transportation.

Due to its SOP nature Houdini runs on parallel , this means I was not able to use that algorithm because needs to be aware of previous index computation.

I ended up writing a python sop running serial , later on I learned some stuff about chops so probably I could remove the dependency to the python node

and do my computation in a CHOP.

Here is a quick demo of the spine.

Nurbs curve development

In this section I want to go over all the nurbsCurve studies and RnD.

MG_curve :

MG_curve | Marco Giordano TD

This node lets you create a nurbs curve out of an array of transforms , so you can easily deform the curve by moving the transforms and also change dynamically the curve degree.
I used this pluging to rig some wings where I controlled some lofted surfaces with curves generated by this plugin .
Here is a demo :

N.B This plugin is available in the download section

MG_splinePath :

MG_splinePath | Marco Giordano TDClick to see the animation

This node came in my mind when I had to rig a chain "motorbike like" , I did some research and the stuff maya was providing did not conviced me , so I decided to write my own node .
This nodes let you drive an X number of object along the curve and then let them slide along it , while keeping a nice and solid orientation . Everything is done in one node , so it s greath for performance , doing that with maya would have required way more nodes.
Here is a quick demo :

N.B This plugin is available in the download section

Pose Reader

Pose readers are extensively used all over the industry because they allow the user to accurately trigger, blendshape , values and everything else is needed, without basing the triggers on Euler values.
1)spherical pose reader :

Pose Reader | Marco Giordano TD

This pose reader differ from the famous michel comet's pose reader because instead of using a cone to read the influence it uses a spherical area.
The reason why I decided to go for a spherical reader was because I needed a series of targets and a smooth interpolation between them, the task for which this node was needed was for quickly and efficiently rig an auto clavicle, but later on has been used for several other task like eyes and quadruped legs.

quick demo available here :

plugin available for download with source code , check the download section.
sample maya scene : download (maya 2013).
NB : MG_tools plugin bundle is needed to open the file


MG_softIk | Marco Giordano TD

Ik handles always had the evil problem called "snap" , the snap happens when reaching the max distance of the Ik chain.
It s not black magic it s just a geometrical problem. I see often animators struggling a lot to fix those pops all over their animation.
A solution is the soft Ik , the soft Ik makes the end effector slow down when reaching the max distance , in this way the snap is killed.

A quick demo is available here :

plugin available for download with source code , check the download section.
sample maya scene : download (maya 2013).
NB : MG_tools plugin bundle is needed to open the file


MG_rigTools | Marco Giordano TD

Releses update :
-V1 : initial release
-V1.1: - MG_softIk : new node
- MG_twist : - rewritten from scratch for easier implementation in rigs like arms and legs
-new features , implemented twistAxis attribute to chose on which axis to twist

The bundle is not available anymore for download since it has been implemented for a future bigger project , thanks for supporting it until now

Follow me on twitter and vimeo to get update!
I am constantly coding new nodes and stuff so stay tuned and check this page!
Yes this project needs the help from the community, even though many many people suggested me to sell my stuff I am not going to do so. I am a fan of open source , I have learned so much from many people and I like to giveit back to the community.
Feedback and bug reports is more then welcome.Also most of the nodes comes with source code so if you like to recompile it for a missing version of maya or os you are more then welcome to do so , send it to me and I will upload it and get credits for it!.Also you are free to expand nodes or creates python script for easily hooking up the nodes and so on.Every help is more then welcome and everyone that helps will get credits.For now the repository will be accesible for push only upon requesto , otherwisemail me any material you wish to see uploaded at: marco(dot)giordano(dot)work(at)gmail(dot)com.
Please share it around!
In this repository you can find the source of most of my nodes , I decided to not build the single nodes but to build bundles.
There are currently two bundles :MG_rigToolsLite MG_rigToolsPro
MG_rigToolsLite comes with all the plugins with source code and can be recompiled from everyoneMG_toolsPro comes only with the build plugin and contains some extra nodes for which I did not release the source

MG_rigToolsLite content :

- MG_nurbsRivet (MTypeId(0x80000));
- MG_polyRivet(MTypeId(0x80001));
- MG_jiggleVector (MTypeId(0x80002));
- MG_vector (MTypeId(0x80003));
- MG_trigonometry (MTypeId(0x80004));
- MG_poseReader (MTypeId(0x80005));
- MG_splinePath (MTypeId(0x80006));
- MG_vectorGL (MTypeId(0x80007));
- MG_dotProduct (MTypeId(0x80008));
- MG_crossProduct (MTypeId(0x80009));
- MG_cacheValue (MTypeId(0x80010));
- MG_curve (MTypeId(0x80011));

MG_rigToolsLite V 1.0 available compiled versions :

windows :
- maya2013x64
- maya2012x64
osx : None
linux : Linux Fedora : -maya2012x64

MG_rigToolsLite V 1.1 available compiled versions :

windows :
- maya2013x64

osx : None

linux : None

MG_rigToolsPro content :

- MG_nurbsRivet (MTypeId(0x80000)); demo :

- MG_polyRivet(MTypeId(0x80001)); demo :check the nurbs rivet demos
- MG_jiggleVector (MTypeId(0x80002));
- MG_vector (MTypeId(0x80003));
- MG_trigonometry (MTypeId(0x80004)); demo :

- MG_poseReader (MTypeId(0x80005)); demo :

- MG_splinePath (MTypeId(0x80006)); demo :

- MG_vectorGL (MTypeId(0x80007)); demo :

- MG_dotProduct (MTypeId(0x80008));
- MG_crossProduct (MTypeId(0x80009));
- MG_cacheValue (MTypeId(0x80010));
- MG_curve (MTypeId(0x80011)); demo :

- MG_twist (MTypeId(0x80012));
- MG_slerpSpine (MTypeId(0x80013)) -------------> coming soon;
- MG_pathSpine (MTypeId(0x80014)); demo :

- MG_softIk (MTypeId(0x80015)); demo :

MG_rigToolsPro V1.0 available compiled versions :
windows : - maya2013x64
- maya2012x64
osx : None
linux : Linux Fedora : -maya2012x64

MG_rigToolsPro V1.1 available compiled versions :
windows : - maya2013x64

osx : None
linux : None

I think doxygen is an awesome tool, that's why I decided to use it. Since I am still human, probably there are mistakes in the doc here and there , help me fix them with some p2p review.If you spot an error or some doc missing like an undocumented param and so on mail me at: marco(dot)giordano(dot)work(at)gmail(dot)com
Material released uner : GNU General Public License Snapshot: MG_rigTools | Marco Giordano TDClick to see the animation

MG_rigTools | Marco Giordano TDClick to see the animation

MG_rigTools Preview | Marco Giordano TD

MG_rigTools Preview | Marco Giordano TD


Plot Widget

First of all let me thanks my colleague  Lars which introduced me  to the Fourier Series.

I decided first of all to make a cpp node to generate noise based on that algorithm, once the node was done the main problem was  I was setting  the parameter of the noise on then node but was not really interactive and kinda hard to see the effect.

That led me to the decision to make a tool in order to interact with the noise and also to visualize the kind of noise that was getting generated.

That s the result:

PyQt_development | Marco Giordano TD

In order to achieve this result I used PySide but the tool is compatible with PyQt as well , only few tweaks are actually needed like:

  • Changing the import 
  • Changing the QtCore.Signal() to QtCore.pyqtSignal()

Let s go step by step.

Of course the main thing of this tool is the graph (plotWidget) , unluckily qt doesn’t have anything built in for that so I had to build one from scratch , I could actually use a QGrapichView in order to have the built-in pan and zoom but It was like  move a mountain  just to pick up a rock , so I decided to go freestyle and build it from scratch by inheriting from a QWidget .

The first big task was to be able to replicate the 2d enviroment , luckily I was able to create it in a way which was relatively easy to scale and pan , and then any point was able to be draw accordingly.

A tricky thing was to draw the grid , because I did not want to draw a big grid and then  pan it , that was not good performance wise , so what I did was  dinamically find the range of the grid that was visible and draw only that ,

the rest of the grid off-screen is not actually been draw .

Once that was in place it was a piece of cake to draw the data that i fed into the widget .

Second step was to create a Fourier Noise class in python in order to generate the data to feed to the widget , of course It s the same algorithm I have implemented in the cpp

node so I was getting same result.

Once that was done I connected all the needed signal in the UI and also updated the data in the node , so the user is able to dynamically see what noise is getting generated and

then see it also updated in the node.

The plotWidget of course is stand alone and can be opened and used in other software  like for example can be quite useful for Houdini tools or other vfx softwares that supports PySide or PyQt.

Here is a demo with the tool in action and some extra details about all the customization you can add to the widget , like colors and so on.

Comment and Feedback are more then welcome , if you have any idea about how to make the widget better let me know.