Blush on faces: UsdPreviewSurface, textures merging, and animation

UsdPreviewSurface appears the most portable way to do materials with USD (with MaterialX being where most are heading… ?).

I would like to apply a blush texture to face skin. I wanted to do it once (inside the shader) for a range of characters.

To smoothly blend in the blush on another platform, I wanted to animate the opacity weight but it was not supported, so instead I created 4 strengths of blush and cycled between the levels (using texture tiles and X,Y offsets etc - which is supported in UsdPreviewSurface. But it meant I needed custom textures created per character. Doable, but a pain. I was wondering if there was anything better in USD? (while being portable)

E.g., my ideal would be to have a shader with a “blush” strength. I would use a “face texture” file per character using the shader, and a single blush texture file for all characters. It would use transparency to mix in well with the underlying skin texture (the blush strength would adjust the opacity level of the blush image - all my characters use pretty consistent face textures).

Any clever approaches? I know there is the transform operation in UsdPreviewSurface, so the old tiling approach is my fallback position.

(Another example of the same problem is I had an Iris image, with transparency, but I wanted to put an eyeball texture behind it, with options like bloodshot eyes. But I could not work out how to merge textures. So again it felt like I would have to create a texture file that had the eye white and iris in the one texture file, and swap the texture (using tiling again) to replace with bloodshot eyes.)

Hi @alankent , UsdPreviewSurface was intentionally extremely limited in scope and complexity, as part of an understanding with the MaterialX community that OpenUSD/UsdPreviewSurface does not want to duplicate and compete on an expanding set of advanced features, because we believe MaterialX competently does or will provide features such as material and texture layering.

When it was designed in 2017, it pretty much covered what was ingestible into public game engines. Seven years later, we’re in a place where commonly supported material models have advanced alot, and folks are using USD in contexts that expect those advanced models, that are handled by MaterialX. The good news is that the AOUSD is forming a Materials working group to tackle these issues, define what should be considered supported and standard in OpenUSD, especially by way of the MaterialX integration. But… until MaterialX is supported in all the applications that are using OpenUSD, there’s still pain for folks like you trying to build and deliver assets.

There have been some encouraging signs in MaterialX support/adoption, such as Apple’s recent announcement of support in Reality Composer Pro for MaterialX graphs authored to UsdShade networks.

1 Like