Unity’s documentation states that “Changing this value affects any subsequently loaded shaders”.
What about when you want the currently loaded shaders to change? I assume all currently loaded shaders need to be reloaded, but I can not find a builtin way to do this.
My current attempt is to get all currently loaded Renderers through Resources.FindObjectsOfTypeAll, iterate through them and build a hashset of all required shaders, and then unload each shader through Resources.UnloadAsset(Shader). I then re-load each shader using Shader.Find, and assign them to each renderer.
This works and loads the shader for the correct shader tier if changed. However, it seems to avoid inactive gameobjects, as their material does not get re-assigned and is pink when they are re-enabled.
tl;dr Is there a way to reload all currently loaded shaders at runtime?