Huge response incoming!
We’ve been using vray in production on many creatures with udim textures into the dye color of the hair shader and it all works as expected.
Are you working with packed .abc? If yes, then you just need your uv attribute to be promoted to live as a primitive attribute called “uv” before you write out the alembic.
If you’re not using packed .abc then you should be for various reasons.
If you have the “uv” attribute on points or vertex and do not promote it to a primitive attribute called “uv” before writing out the .abc it will not read when rendering using the packed .abc.
Also (this is a Houdini behavior) if you do write out the .abc with the “uv” attribute stored on primitives, and now read in the .abc, unpacking it will not show the “uv” primitive attribute anymore.
A “uv” primitive attribute gets lost when unpacking.I believe this is due to the fact that a “uv” is not normally something you associate with primitives, but points and vertex.
So when unpacking the .abc its lost either due to Houdini things or Alembic things. This has nothing to do with vray.
What we do for our workflow is take the current “uv” attribute stored on the points and promote it to be stored on primitives and it’s called “uv”. Next, we do not delete the original point “uv” attribute, but we rename it from “uv” to “uvToPromote”.
Now we have a point attribute called uvToPromote and a primitive attribute called uv. (It’s extra data to maintain but this way we have everything for the hair asset in one portable file)
This way when we write out the .abc of our asset we have the proper uv for rendering and when we unpack for cfx shot work we can access the “uvToPromote” point attribute to re-promote to prims and rename “uv” when we output CFX shot caches.
Alternatively, you can use the guideskin attribute lookup sop to transfer uvs from the skin back to hair curves as needed instead of storing the point “uv” renamed to “uvToPromote”
But we found that the versions of the grooms and mdl skin uv’s was easier to become out of sync.
I hope this made sense, I was closely involved with the grooming pipeline here and vray does work for hair quite well.
Some big gotchas to know when doing shot work with hair and vray (and chaos is aware of these issues already)
One is motion blur discrepancies with the skin and hair.
We currently generate a .abc sequence per frame for our animated grooms. We calculate velocity and store it on the points before writing out the .abc. For the skin, we’d also calculate velocity but write out a single .abc for the anim.
This was an issue though as the single .abc velocity attribute was being ignored even when specifying to use it. So instead vray was doing its own linear interpolation for motion blur with the skin and then reading the pre-calculated velocity for the hair.
This caused the motion blur to not align on some frames.To solve for this we just calculate velocity the same way for the hair and skin and then write out the .abc sequence per frame for both the hair and the skin.
Now vray will read the motion blur the same way and it all aligns.
Next gothca is only read in and write out the files in the same scale, if you transform the packed .abc of the hair, all the attributes get broken and will not render with vray correctly. Even if you tell the transform sop to exclude those attributes, it doesn’t matter.
We work in the houdini standard of treating each unit as a meter.
Do not have both a point and primitive attribute called the same. ie do not have a point attribute called “uv” and the primitive attribute called “uv” before writing the .abc. It will break many things. That’s why we rename our point attribute to “uvToPromote”
Lastly do not confuse the attribute called “primuv” as the same thing as an attribute called “uv” on primitives, They are very different things.
I hope this is helpful and it may seem like a lot to digest, but this works. Good luck.
David Eschrich
Global Head of 3d
Zoic Studios