The classical rivet was a really popular rigging thing a few years ago (and long before that it seems). I am by no means a seasoned rigger, but whenever I would look for facial rigging techniques the rivet would keep coming up. What is more, barely if ever people suggested using follicle
to achieve the result, generally because the classical rivet evaluates faster. So, I thought I’d do a maya performance test to compare them.
Table of contents
Prerequisites
I will be looking into the performance of a follicle
and a classical rivet, both on a NURBS sphere and on a poly sphere. NURBS because I tend to use a lot of ribbons and poly, because it’s a popular feature for attaching objects to meshes.
I will be using Maya 2017’s Evaluation Toolkit to run the performance test, as it gives nice output for each evaluation method, even though I cannot imagine using anything but parallel.
The way the tests are going to work is, I will create two files, each containing the same geometry with 10 rivets. In one file I will use follicles and in the other the classical setup. The deformation on the geometry will just be keyed vertices and it will be identical for each setup, so we can be sure that the only difference between the two files is the riveting setup.
Then, the test will be done in a new scene where I will reference the file to test a 100 times. For each setup I will run the evaluation manager’s performance test and take the results and compare them.
Okay, let us have a look then.
NURBS
Classical rivet setup
So, the way this one works is I just loop from 1 to 10 and I create a pointOnSurfaceInfo
node with parameterU
set to iterator * .1
and parameterV
set to .5. Then, I plug the output position directly to a locator’s translate
attr. Additionally, the output position, normal vector and a tangent vector go into an aimConstraint
which constraints the rotation of the locator.
Follicle setup
This one is fairly straightforward, I just created 10 follicles, with parameterU
set to iterator * .1
and V
to .5.
Results
Bear in mind, EMS
refers to serial evaluation and EMP
is parallel.
NURBS surface
Classical Rivet
Playback Speeds
===============
DG = 13.1694 fps
EMS = 11.1359 fps
EMP = 20.7469 fps
-----------------------------
Follicle
Playback Speeds
===============
DG = 11.3208 fps
EMS = 12.6263 fps
EMP = 27.8293 fps
Even though I expected the follicle to be faster I was surprised by how much. It is important to note that we have 10 * 100 = 1000
rivets in the scene, which is obviously a big number. Therefore, in a more realistic example the difference is going to be more negligible, but still 7.8fps
is quite a bit.
What is also quite interesting is that in DG
the follicle is slower than the classic rivet. So, the stigma of the old days that the classical rivet is faster, seem to be deserved, but parallel changes everything.
Polygons
Classical rivet setup
So, when it comes to polys the classical rivet gets a bit more complicated, which I would imagine results in a larger slowdown as well. The way this setup works is, we grab 10 couples of edges, which in turn produce 10 surfaces through a loft
node. Maintaining history, the nurbs surfaces will follow the poly geometry. So, we can perform the same rivet setup as before on the nurbs.
Follicle setup
On a mesh with proper UVs the follicles are again trivial to set up. We just loop 10 times and create a follicle with the appropriate U
and V
parameters.
Results
Polygon geometry
Follicle
Playback Speeds
===============
DG = 1.7313 fps
EMS = 3.32005 fps
EMP = 9.79112 fps
-------------------------
Classical rivet
Playback Speeds
===============
DG = 1.05775 fps
EMS = 1.52022 fps
EMP = 3.31053 fps
As expected, follicles are again quite a bit faster. I am saying as expected, as not only do we have a riveting setup as in the NURBS case, but also there is the edges and the loft
which add to the slowdown. I am assuming, that is why even in DG the classical rivet is still slower.
Conclusion
So, the conclusion is pretty clear – follicle
rivets are much faster than classical rivets in the latest maya versions which include the parallel evaluation method.