Hello! I have the great fortune to be working on a joint Apple/(unnamed brand) app. I am teamed up with a photogrammetry vendor, and will be assembling a scene in Maya, using a UDIM workflow from retouched assets in Substance Painter. This will be for an immersive environment, similar to Joshua Tree and the Hawaiian environments on AVP, which are great.
We did a first pass, bringing USDZ files into Reality Composer Pro and sending to headset - very cool. However the models have a specular component that is washing everything out. After further researching, I learned that I need to not be using a Physically based shader, but instead, an Unlit shader. I had to manually create this in RCP, then it viewed properly. The issue is, every time I need to add a new asset, will I now have to manually create numerous custom shaders? Ideally, I am wanting to either figure out how to get an Unlit shader specified in Substance Painter that will get exported out properly, in addition to getting it to export from Maya. I tried using a Maya SurfaceShader - which is essentially unlit - but that does not export properly. I found that a Maya StandardSurface will export properly, however, it still imports as Physically Based shader. The conundrum is, I'll be working with a UDIM workflow, and would like to avoid having to manually create and hookup what could be between 10-40 textures per USDZ file.
I guess what I'm trying to ask is - what is the preferred shader to use in Maya when exporting to USDZ that will import as Unlit? Or, is there a way to easily switch from Physically Based to Unlit inside RCP? And NOT doing it in Xcode/Swift, because the files I need to deliver need to be USDZ, the the developer will be assembling themselves.
I'm using Maya because I need to work on my PC for the heavy GPU lifting, and also, it's just easier to assemble everything there VS Reality Composer Pro, which is like the iMovie of game engines. ;) (please take that constructively, it really needs to be more industry standard). I just need to make sure I can use Maya with the proper shaders to export my pieces, quickly send to RCP (with proper Unlit specification) then over to headset so I can check stuff in realtime with my photogrammetry vendor.
Any help or advice is greatly appreciated! I'm really excited to be working on my first Vision Pro app. Thx!
Hey Steve!
So there are a few options. Though first I'd mention that UDIMs aren't supported (they're not very realtime friendly as a concept in general), you have to have a material per UDIM effectively. Though for best performances, I'd really recommend reducing your texture size and count down.
Option 1: Change it over manually
Easiest way to switch without any custom work is to export using a USDPreviewSurface (, and then in Reality Composer Pro do the following:
- Select your material and change the Shader from Physically Based to Shader Graph
- Remove the Preview Surface and hook up a Unlit surface and reconnect the nodes
Option 2: Use LookDevX in Maya
If You are using Maya, we have some MaterialX nodes that are available here https://developer.apple.com/documentation/ShaderGraph that include the Unlit. This will work in Maya if you use LookDevX to assign the shaders, and you'll find a RealityKit Unlit shader in there that'll just import in as is.
Option 3: Use a post process script in Maya or Blender, or external to your DCC
Both Maya and Blender support export chasers/hooks that let you change the exported USD during the export.
Alternatively, you could do the same to the USD with Python outside the DCC.
If you prepare a single USD file with your Unlit shader network, you could reference that into your USD files on your Material prim out of Maya and then set the texture parameters there to change what texture you need.
Though of course this does require a little bit of coding to do, but doesn't require anything more than the USD API that is available in your DCC or from pypi , so could be done on your windows machine as well.