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
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.
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.
This one is fairly straightforward, I just created 10 follicles, with
parameterU set to
iterator * .1 and
V to .5.
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.
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.
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
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.
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.