SetReplacementShader will not render objects if their original materials don't contain any properties required by the replacement shader. For example, if your replacement shader uses _MainTex, and there is an object in the scene that doesn't have _MainTex, it won't be rendered at all.
SetReplacementShader will use the Materials of the existing objects in the scene1). However, it only seems to apply keywords that are registered as multi_compile
. Per-material keywords registered with shader_feature
do not get applied. For example, if you call SetReplacementShader with the default URP Lit.shader
, these keywords will all be turned off:
Shaders can be replaced in the SceneView using SceneView.SetSceneViewShaderReplace
.