I was attempting to export materials from our internal software. For example, the diffuse component includes both a color and a weight parameter, where the weight can either be a scalar value or driven by a texture map. Currently, we export our shaders as UsdPreviewSurface, but it appears there is no corresponding UsdShadeShader node to represent this setup. I’m wondering if there’s an appropriate way to handle this scenario when exporting to USD.
If the desire is to have two completely independent signals that may be surface-varying, and multiply together to feed the diffuse input, then that cannot be represented in the intentionally simple UsdPreviewSurface family of shaders. You could pull off the “single weight” effect by using the inputs:scale of a UsdUvTexture node feeding diffuseColor, creating a single-pixel texture when you want to have a constant color source rather than a texture. But that’s limiting (can’t drive the signal with primvars) and can’t be surface varying.
If you can’t pre-bake the effect and you need it, you might want to consider exporting a MaterialX network, which actually has a UsdPreviewSurface implementation, and can be expressed directly in UsdShade nodes, or you can reference a .mtlx Material into your asset.