Search Issue Tracker
By Design
Votes
8
Found in [Package]
10.0.0-preview.27
Issue ID
1307861
Regression
Yes
Material is rendered black when switching from Shader Graph to HDRP or URP Shader during runtime in the Build
How to reproduce:
1. Open the user's attached "ShaderChangeBug" project
2. Open the Build Settings (File->Build Settings...)
3. Make sure that the "Scene" is in the Scenes In Build list
4. Build And Run
5. Press space twice
Expected results: The bushes are the same color they were before pressing space
Actual results: The bushes are solid black in color
Reproducible with: 10.0.0-preview.27 (2020.2.0b5), 10.2.2 (2020.2.2f1), 11.0.0 (2021.1.0b3, 2021.2.0a3)
Not reproducible with: 4.10.0-preview (2018.4.31f1), 7.5.2 (2019.4.19f1), 8.3.1 (2020.1.17f1), 9.0.0-preview.71 (2020.2.0b5)
Notes:
- The issue has been tested and reproduced on Windows 10
- Reproducible with URP and HDRP, sometimes the material might turn pink instead of black
Comments (4)
-
mkrmediauk
Jan 21, 2021 13:24
please fix this, it is so annoying!
-
IrishJohnGaming
Jan 21, 2021 13:21
Yes Please!
-
aylinibryamov1
Jan 21, 2021 11:51
Can you please fix this bug asap thanks :)
-
ianch8w
Jan 21, 2021 11:48
Please fix this issue asap. thx
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Locked tabs end up selecting the same asset when another window is maximized and unmaximized
- ListView element is rendered in solid black after docking if UI Builder window was already opened prior to project launch
- [WebGPU] error with compute shader and read-only RWTexture
- Capacity-size memory is copied instead of Length-size when using UnsafeUtility.memCpy()
- Console displays "SerializedObjectNotCreatableException: Object at index 0 is null" error during Unity theme change while "Tile Palette" window is opened
Resolution Note:
Think I figured out the issue.
It's because you are using Shader.Find(...) to find the shader, which isn't guaranteed to work in a player. I think in practice it only works if the Shader happends to be loaded.
I think what is happening is as soon as you replace all of the HDRP/lit shaders in the scene with ShaderGraph shaders, then the HDRP/lit shader is not referenced by anything and is free to be unloaded, or at least unload some important bits of the shader.
If you simply keep around a reference to HDRP/lit in one of your scripts, it will keep it from being unloaded. And probably better to skip using Shader.Find outside of editor scripts. For this use case you could have each script store off the original shader and restore it, which keeps the reference alive.
Let us know if this doesn't work for you.