Sunday, 5 October 2014

Spherical Mirror Tutorial

I'll show you how you can use some basic math knowledge to manipulate points in 3D space. Knowing vectors and points will allow you to fully understand how objects are positioned, translated around, how matrices work, how quaternions are rotated, aim constrains calculated and much, much more.

First let me show you what we will be making and after that you will see how easy it is to make something like this:



The Zetz character is designed by Boris Stapic and the model and textures are from Seid Tursic.

This is made using Fabric Splice in Maya. Here is the download link for the splice file. Have fun with it. I will not cover the Splice part in this tutorial but you can go through my code and see how it is written. I also included some debuging code that draws the sphere.

I will be writing the tutorial in pseudo code, and everything might not be notated to mathematical standards. I'm trying to make everything easy to read and I leave it to you to figure out how to do it in the language and software of your choice.

So, here is what we are going to start with:


The origin is just the center of our world, radius is going to be an attribute that the user can modify, sphere center is the location of our sphere and the vertex position is what you will get from your application when you query the location of a vertex. This doesn't have to handle vertices, you can write a version that mirrors locators or any other objects.

Now we have to calculate a vector that will point from "c" to "a" so we know in what direction to mirror the object.


The next step is to make "a`" go from "c" to the spheres border. That is easy to achieve. We need to make "a`" a unit vector ( we set its length to 1 ) and we multiply that unit vector with the radius.


To know how far the mirrored point needs to be from the spheres center we need to calculate a multiplication factor. The factor is the number that we get when we divide the radius by the length of "a`". We will multiply "b" with this factor to get the position of our mirrored point.


Now we have our point mirrored and its location based on the sphere center. In order to get the location in the world we add up this vector to "c".


And that is how we go from "a" to "am". I leave it to you to write this in the software of your choice and if you have any further questions write them in the comments. But first make sure to try and figure everything out by yourself.

Monday, 29 September 2014

Semi Auto Skinning R&D

If you have not already seen Hans Godard's vimeo page then you should go there now. That man does some great work and is a huge inspiration.
His latest video demos a workflow for automatizing smooth skinning. I tried to do something similar but couldn't crack the math for SSD. So I did it my own way. The most important thing is that it works and gives good results.

My version is based on Splice and Python. Python slows things down a lot but I am getting into C++ so the next version will be full Maya C++ API.
Even with Python I didn't have to wait too long. With a 12k vert mesh and 85 skinned joints the procedure was done in a bit more than 5 minutes 3m30s (did some optimizing). That still beats doing it by hand and painting the weights until the wrists start to hurt.

A big thank you to Jonas Törnqvist for giving me the model for testing. Great modeler and a great guy.

No more talking, here is the video:


semiAutoSkinningRD from Armin Halac on Vimeo.

Sunday, 14 September 2014

Tangent Spine


Combining the best out of FK and IK spine rigs and adding even more. IK/FK spines are allow much control over the torso but are tedious to animate. A lot of layered controls on top of each other can require some counter rotating and produce gimble issues. With this setup the animator can rotate from various points on the spine. Similar to FK but FK requires the user to distribute the rotation across multiple controls if fluid shapes are required. And they always are.
On my setup most of the posing is handled with the rotation of the two main controls and can be further refined using the tangent controls and the translation of the main controls.
Advanced volume preservation controls plus the IK like behavior that can be achieved with this setup are great for stylized animations.

See it in action:


Tangent Spine Rig from Armin Halac on Vimeo.

Monday, 8 September 2014

Variable foot rig


The foot is one of the areas that doesn't get special attention when rigging a character. Many rigs have the standard inverse foot setup that makes the animator slide a bunch of attributes and try to get something they like.



 I like to keep everything on the character without messing too much with sliding numbers in tiny boxes. That way the animator can quickly experiment with poses and get organic shapes.

Here is the setup I came up with:


Variable foot from Armin Halac on Vimeo.

As seen in the video the foot is really flexible and allows for easy posing. The bend control can moved to any point along the foot and make the foot bend in any direction. The only slider that requires the animator to take his/hers eyes of the character is used to control the falloff. Falloff control allows the foot to peel nicely from the ground or to bend at a harsh angle. The foot uses the same rig for both IK and FK modes.

The model is owned by Irie Studios.

Monday, 1 September 2014

Revolve node

One more custom node done in Fabric Splice. This time I tackled a couple of things at once.


First was wheel rotation. This solution is based on the objects world matrix instead of a position value or something similar. The idea was based on one of Rigging Dojo's AIR sessions with Raf Anzovin. The object can have as many controls as you want and it will always calculate the correct roll. I added the possibility to connect a parent inverse matrix so the setup can be a child of some other node. Useful when having world positioning controls on a rig.

The next was a parameter to drive objects along a curve. Similar to the rotation, only the output is different. Instead of outputting an angle value the parameter is a value between 0 and 1.

And the last was instancing. A mesh will be projected on the custom splice curve and it is driven by the parameter value. I extended the BezierXfo class that comes with Splice and added a new function that takes a number of instances and a starting offset as the input. In this case parameter is that offset and it tells the function where the first element should be on the curve. Then the other elements are projected onto the curve with an equal distance between them.

Check out the video bellow to see the node doing its thing:


Revolve Node in Maya from Armin Halac on Vimeo.

Sunday, 24 August 2014

Delta Mush

I've been really busy the last couple of months and things were quiet on my blog. In the meantime I started getting into the Maya API and jumped on the Fabric Splice train. I have a couple of nodes that I want to demo and I will start with the first deformer that I ever wrote. A prototype of the Delta Mush deformer:



The deformer is based on the Delta Mush deformer in Voodoo. You can find more detail about it in this Siggraph paper.
The paper explains it functionality and beside the information they give you all you need is the math to calculate everything.
Maya does not hava a Laplacian smooth deformer so I had to incorporate it in the node. Thanks to Olivier Dionne for sending me a link to this document which contains the necessary calculations for the smoothing.

The node is written in Fabric Splice for Maya. The good thing is that the deformer does not depend on Maya and can be used in any of the Splice implementations (Softimage, 3DS Max among others).
In this thread you can find a lot of useful info on the math behind this and also how to get some of the point data from the mesh. It is great that Roy Nieterau shared it with everyone.

Splice is still under development and even though some things are missing it is already an amazing tool. Especially because of its cross platform compatibility. And how easy it is to do some low level stuff really fast. I am also looking forward to Kraken, an open source cross platform rigging tool.

The model used in the video is downloaded from www.hippydrome.com. A great model and the site is a great resource for everyone.

The video below is showing the deformer in action. I just added some bones and bound the mesh using one influence per vertex, without any weight painting.


Delta Mush Deformer in Maya from Armin Halac on Vimeo.

Wednesday, 22 January 2014

Mirror across sphere rig

In my previous post I explained the math and maya nodes you need to create mirroring of positions in 3D space. Here is a different, more complicated, example where I created a rig that mirrors across any point on a sphere. I used a sphere but it can be any object you want. The only limitation would be a low poly mesh where the mirrored positions would snap since there would not be enough polygons that would provide data on normals that would ensure a smooth transition. In that case I would probably add some nurbs patches that match the poly shape and use their normals.


Mirroring across a sphere from Armin Halac on Vimeo.

Questions and comments are welcome.