djRivet.mel (inspired by Michael Bazhutkin's excellent rivet.mel) uses follicles to constrain objects to a surface (poly or nurbs). First select one or more objects and last select target surface. Run djRivet to place follicles on the surface at the closest point to each of the selected objects. The objects are parent-constrained to the follicles (with maintain offset on) so they will stick to the surface and follow it if it is deformed.
Additionally, selected vertices, cv's and lattice points can be constrained - either individually or together - using clusters and follicles. You just select the components, then last select the target surface and let djRivet do the clustering and constraining for you. This type of selection probably works best if you first select the components (for example vertices) in the viewport, then go to the outliner and ctrl-select the transform node of the target surface.
Follicles are attached to a surface at a specified uv-coordinate, which can be changed or animated. This gives you the possibility to fine-tune the placement of your object by either adjusting the uv mapping (in the case of polys) or by changing uv parameter in the follicle attributes (polys or nurbs). As long as the uv's remain meaningful it is also possible to change the surface topology without breaking the connection to your object (for example you may want to smooth the poly mesh, split some faces, or add some iso's).
The dependency on uv's means that for polys djRivet.mel works best when your mesh has well layed out, non-overlapping uv's.
Even though follicles are used by the maya hair system, no hair systems are created by djRivet.mel. Only the stand-alone follicle node is used.
Let me know if you find it useful, or have any suggestions about making it better.
- Maya 7.x users need to install a bonustools plugin (included). See readme in zip for details.
- objects are skipped (not constrained) if they have locked or animated translation/rotation channels
1.6.0 update: added support for multiple uv sets