Sticking Transforms to Vertices.

I wanted to stick transforms on a mesh, and I was curious about the fastest solution in vanilla maya (no plugins). I was only interested in position, not orientation, as in my situation getting orientation from normals could be a bit unpredictable. Maya’s finally got a pointOnPoly node but interestingly it was the slowest solution. The old fallback was using follicle nodes, which is also slow. I didn’t try an old rivet script, which from memory uses quite a bit of history to convert edges to curves and such. To benchmark these I used a default polySphere with a locator set to follow every vertex, 382 in total. Interestingly, the best results are with one big expression running a bunch of pointPosition commands.

This is in Maya 2015:
pointOnPoly: 11.86 fps
pointOnPoly, disconnect rotate: 12.78 fps
Follicle: 16.31 fps
Expression per transform: 27.38 fps
One big expression: 38.33 fps

Is there a better solution for doing this?

Share Button
This entry was posted in Maya. Bookmark the permalink.

9 Responses to Sticking Transforms to Vertices.

  1. Atsushi says:

    Did you consider testing geoConnector node? Whether that is a better solution is arguable though.

  2. Hey Atsushi, thanks so much for the comment, sorry it took so long for me to reply. I hadn’t known about the geoConnector node. It’s still actually slower than an expression at around 28 fps, but that makes it the best non-expression solution in this test.

  3. Atsushi says:

    Well, I should’ve tested myself before simply throwing an idea. It’s quite surprising the expression still beats all the nodes. Thanks for this interesting experiment.

  4. Yeah that surprised me as well, I’ll need to look again in 2016 to see whether parallel evaluation changes this.

  5. Edward says:

    How about a skinning curve with point on curve info.

  6. I should try that for curiosity sake, but in my situation the mesh is deformed by more than just a skincluster and I wouldn’t necessarily want to recreate all the deformers on a curve.

  7. Hey guys, I just stumbled over this post as I was looking into this myself. How do I use the geoConnector node? I managed to set it up and if follows my mesh, but it just follows an average of the verts. Can I get it to follow a specific vert?

    Current setup:
    shape.worldMesh[0] -> geoConnector.localGeometry
    shape.worldInverseMatrix -> geoConnector.worldMatrix
    shape.message -> geoConnector.owner

    geoConnector.componentCentroidLocal[0] -> locator.translate

  8. I ended up just creating an emitter on a selected vertex, that sets up the graph for you.

  9. Forgot to reply to this. I realised that was the way to go after some more digging around.

    Thanks for this comparison. Dealing with a bunch of rivets(about 8k now. I’m crazy I know.) now and follicles work, but would like some more speed.

    A colleague recommended the furPointOnMesh(or something) similar. Anyone tried that? I’ll be testing this more tomorrow.

Leave a Reply

Your email address will not be published. Required fields are marked *