How to Transfer UVs in Maya

Hello,

If you’re here to find out how to transfer UVs from a 3d geometry to another one, you are the right place!
Here’s a little tutorial on how to transfer UVs using “transfer attributes”

1. Select the geometry with the good UVs.

2. Add the target geometry to selection.
(Ctrl + Shift + Left Click on target geometry)

3. Under Polygons > Mesh > Transfer Attributes (option box) > Attribute Settings, choose your sample space
(if you haven’t freezed transformations, you can try Local, if your reference geometry is in the same world space as your target, use World)

4. Click transfer!

5. Delete the History of target geometry to “lock in” those UVs.

6. Now you can delete the reference mesh.
(You may one to back up your file before doing so)

7. Congratulations! You’re done!



Issues with Rigs:
Recently, I used an existing rig to work on some animation.
After I’m done with the animation, I needed to decorate and beautify my characters and scene.
I decided to do a quick and fast one by applying some textures to “cloth” them.
However, their UVs are all in a mess!



Problem A:
So I went on to duplicate the model, unwrapped it, texture it and thought of transfering the UVs back to the binded geometry so that I can apply the new textures to the rig.
However, a problem arised with existing deformers [the existing skinCluster because the geometry has been binded to the rig]
What this causes is that the binded geometry has a history where it has to constantly calculating the transferAttributes node after it has calculated the skinCluster node. This causes the rig to become very laggy and unable to feedback smoothly when posing the character.

Why don’t we just delete the history of the transferAttributes node like before?
The transferAttributes node is a deformer history. Maya has only two ways of deleting history – (1) Delete History (2) Delete Non-Deformer history.
Using (1), the skinCluster node will be gone and the rig won’t work anymore!
Using (2), nothing gets deleted because both are deformer nodes. Problem unsolved.

Maya doesn’t seem to allow us to choose which deformer history to delete, or at least from what I have realised after battling with it for some time.
Maybe they can considering allowing this because comes in really handy when troubleshooting.

Anyway, here are two solutions:

Solution A:
1. Open the “List of input operations for geometry
(Inputs to the selected object [the green box with a right red arrow located near the top right hand corner of screen] > All inputs…)

2. Middle click and drag the transferAttributes node below the skinCluster node.
(Or move the skinCluster node above the transferAttributes node, whichever does the job)

Result A:
Viola! Now, Maya will only have to calculate the transferAttribute nodes once!
And you can pose the model smoothly!



Problem B:
Just when I thought I had solved the problem. I went on to try to touch up my animation and realised that another problem popped out.
Whenever Maya goes to another frame in the animation, it will still recalculate the transferAttributes node!! Argh!
The playback was extremely laggy and it was impossible to animate!

Solution B:
I thought of a work around where I reference the old rig instead in order to continue my animation.
When I’m just about to render my work, then I’ll reference the textured rig.
However, this is not intuitive and likely to cause bugs because we keep swapping references.

So I came up another work-around, not that it’s much more intuitive, but it kinda helps..

Create a shelf button or assign a shortcut for this toggle MEL script:


if (`getAttr character:transferAttributes1.nodeState` != 0)
{
setAttr “character:transferAttributes1.nodeState” 0;
}

else
{
setAttr “character:transferAttributes1.nodeState” 1;
}

Result B:
This toggles on and off the transferAttributes node from “Normal” to “Has No Effect”
This solution is working very well for me and I can check my animation with the animation textures when I really need to, and turn it off when I need my scene to playback smoothly.

If anybody has any other way to solve this issue, please let us know!
Cheers! I hope this has been helpful!

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

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