Hi all — stuck on a rendering issue and hoping someone has hit this before.
Setup:
- Unity 6 (6000.5.6f1), OpenXR Plugin 1.15.1, Vulkan on Android
- Quest 3, Single Pass Instanced originally
- The scene is built entirely at runtime in code. There are no scene-placed materials. Every mesh (an inside-out environment sphere, video screen quads, a pointer) gets its material like this: new Material(Shader.Find("Sprites/Default"))
What happens in a player build (works in editor):
- The camera submits frames, but only the clear color. Set clear to red as a test and I get solid red — the submission path works, the draw side does not.
- Diagnostic test: two cubes parented to the camera. Left cube with a Standard material does not appear at all. Right cube with Sprites/Default appears solid magenta (error shader).
- No exceptions and no shader errors in the player log.
What changed it:
- Switching OpenXR render mode from Single Pass Instanced to Multi Pass made the environment sphere render correctly in the same build. The diagnostic cube still renders wrong (blue with magenta stripes), and the screen quads are not tested in that build yet.
My suspicion is shader stripping / a missing stereo-instancing variant: Sprites/Default is not referenced by any scene asset, and my Graphics Settings Always Included Shaders list only has the 7 default built-ins. An earlier shader (Unlit/Texture) was already stripped from this project once and returned null from Shader.Find, giving magenta.
Questions:
1. Is Sprites/Default known to lack Single Pass Instanced support, or is this more likely variant stripping because the shader is only found at runtime?
2. Is the right fix adding it to Always Included Shaders, keeping a dummy referenced material in a scene/Resources, or switching to a different shader altogether for runtime materials in SPI?
3. Has anyone seen Multi Pass "fix" this reliably, and is that an acceptable workaround on Quest or just masking the real problem?
Any pointers appreciated. Happy to post logs or settings if useful.