Search - User list
Full Version: Multiple UV sets status
Root » Houdini Engine for Maya » Multiple UV sets status
grayOlorin
Hey guys, just wanted to know what was the status on supporting multiple UV Sets via the maya plug in? I know this was mentioned previously in the sidefx labs forum (and could really use it right about now )

thank you!
awong
Sadly no. I'm guessing you want multiple UV sets for outputting? The input case would actually be fairly easy to do, but outputting multiple UV sets has the same issue as outputting multiple color sets. Each additional UV set requires additional nodes and connections to be inserted between the asset node and the mesh node. The framework right now doesn't allow that, so quite a bit of changes need to be made.
grayOlorin
Hey andrew, understood! Will be looking forward to it!

In the interim I may try mimicking this by passing multiple copies of my mesh and see if I can fanagle them together oncenter in maya


Thank you!
cklosters
I found a relatively easy work-around to add support for multiple uv sets.
This functionality won't be available in pre 2015 versions of Maya but the function:

MFnMesh::createUVSetDataMeshWithName uses blind data to add extra uv sets to the mesh data block.

It's a bit obscure and not well documented (actually, no documentation can be found) but is available in the Maya API and does create extra uv sets. The traditional method will indeed return an error.

Example: https://github.com/applezhao/appleMayaCache/blob/master/cacheImport/0128/cacheImport.cpp [github.com]


this worked in my case:


// Create extra uv set
MString name(“AAAAA”);
MString new_name = meshFn.createUVSetDataMeshWithName(name, &status);
meshFn.setCurrentUVSetName(new_name);
meshFn.setUVs(u_data,v_data,&new_name);
meshFn.assignUVs(face_counts, vert_indices, &new_name);
grayOlorin
sweet! Any chance we could squeeze this one in Andrew ? I know a lot of game devs who would be happy if we did this..!

Thank you for finding this!
cklosters
No worries,

Appears that the feature was introduced a long time ago but never documented:

http://download.autodesk.com/us/maya/docs/Maya85/wwhelp/wwhimpl/common/html/wwhelp.htm?context=WhatsNew&file=API.html [download.autodesk.com]

Just finished implementing the code and we're now able to import any amount of uv maps.

Andrew, if you'd like to take a look at the code / change, lmk.
awong
Wow! I just did a quick test, and this actually seems to work! There is a equivalent for colorsets, and that also seems to work too!

These functions actually exist in 2012 as well, so they'll probably work in older versions too. Do you know if there are any downside to using them? I'm certain I asked Maya's support before if there's a way to do this. :?

This is really exciting. Thanks for the tip! I'll look into this as soon as I finish with my current task.
cklosters
That's really great news Andrew. It's been in there since Maya85, but never documented or listed anywhere. Thanks to visual assist I found the definition and looked for examples online. There were a couple of examples that followed a similar structure to what is used inside the engine plugin, so thought I'd give it a go. I was already on my way to implement a rather cumbersome pipeline for supporting multiple uv sets and color.

I have no idea if there is any downside to using them, maybe get back to Autodesk and tell 'm to get their act together

Cheers Coen!
grayOlorin
Hey Andrew, I am going to shamelessly poke my head in and see if you had an update on multiple UV set output?
awong
Not yet. ops: I've been trying to get to it.
Looks like my other thing is going to take a while, so maybe I'll put that on hold and jump onto this…
grayOlorin
The game creation industry will be eternally grateful… thanks man!
awong
Support for outputting multiple UVs is finally here! The change is in today's build (14.0.483).

If a mesh is inputted into Houdini Engine, the original Maya UV names are stored in a set of detail attributes (maya_uv_name and maya_uv_mapped_uv). When the mesh is outputted back into Maya, these detail attributes are used to name the output UVs. This should preserve the original names of the original UVs.

A minor note is that the output mesh will always have the “map1” UV set. If your output mesh uses it, then the UVs will be there. But if your output mesh doesn't use it, the UV set will just be empty. (This is a default UV set on a mesh, and I can't seem to find a way to delete it.)

There's a really small compatibility break here. It's easily fixable by just pressing sync. The attribute for outputting mesh data is changed from outputPartMesh to outputPartMeshData. This means if you open a scene that's saved in previous Engine versions, the mesh won't appear until you press sync. Hopefully this isn't too big of a problem.

One thing to watch for is that the “current UV set” name is only updated during sync. This is only an issue if your asset tries to change the default UV set procedurally.

Also, the plugin will now try to preserve UV borders. Previously, when a mesh is inputted into Engine, the UV sharing/sewing/stitch information would be lost. This results in all the UVs becoming UV borders. The plugin will now try to store this information in a vertex attribute (uvNumber). When the mesh is outputted back into Maya, the plugin will use this attribute to try to restore the UV sharing. If the mesh topology changed, the plugin will still make an attempt to sew the UVs together.

Big thanks to cklosters for pointing out the undocumented API that makes all this possible!
grayOlorin
A big thanks to you Andrew for getting this working! it is a huge improvement in the Maya plug in which is going to open a LOT of doors for us! thank you!

I will download the latest build when I get to work and try it out!
grayOlorin
BTW will this be in the release of 15 ?
awong
It won't be in the initial gold release of 15.0, but it will be in the first daily build.
grayOlorin
Hey Andrew! I finally got a chance to try this in 15.0.270. you have no idea what a happy moment this was for me

One thing I did noticed though is that UV Sets which are currently created in Houdini and did not exist in maya (which do not have the uvNumber attribute) will come through split. Is this as expected, or do you expect that coincidentally positioned UVs created in Houdini should be sewn in maya? If not, should I try to create the uvNumber attribute myself?

this is great! very excited to have this available! Are you thinking you may attempt to also do the color sets as well? at that point I could represent any per point attribute in Maya as color sets

thank you again!
awong
grayOlorin
One thing I did noticed though is that UV Sets which are currently created in Houdini and did not exist in maya (which do not have the uvNumber attribute) will come through split. Is this as expected, or do you expect that coincidentally positioned UVs created in Houdini should be sewn in maya? If not, should I try to create the uvNumber attribute myself?
Yeah, that's expected. The Maya plugin sew the UVs together according to the uvNumber. And the plugin also handles the case where the UVs were originally sewn together (i.e. same uvNumber), but the UV coords are not longer the same (i.e. the UV topology changed). You could abuse this to get the UVs sewn is to create a “uvNumber” attribute, and set all the values to the same number (e.g. 0). Then, the Maya plugin will try to fuse all the UV, because they share the same uvNumber. This is probably the easiest way, but it'll probably be slow because the plugin has to do a lot of searching.

If you could set the uvNumber on the Houdini side correctly, then that's even better. In the future, it'd be nice if Houdini itself is aware of this “uvNumber”.

grayOlorin
Are you thinking you may attempt to also do the color sets as well? at that point I could represent any per point attribute in Maya as color sets
Yeah, I've been trying to get to it, but I got sidetracked to other things (again). Soon…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB