Uninomicon

Documenting the dark corners of the Unity Engine.

User Tools

Site Tools


camera

Camera

Camera.SetReplacementShader

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.


Camera.targetTexture

According to the Unity Documentation: “When rendering into a texture, the camera always renders into the whole texture; effectively rect and pixelRect are ignored.”

This behavior is inconsistent across target platforms. On windows, the camera will use the rect and/or pixelRect. On OSX, Android, and iOS, the camera rect will be ignored. (tested on Built-in Render Pipeline, Unity 6000.0.34f1)

If you have need to render into a sub-rect on render texture on those platforms, there are workarounds:

  • For BiRP, using Camera.SetTargetBuffers will render to the target buffers utilizing the rect/pixelRect. (tested on Unity 6000.0.34f1) unity discussion
  • For URP/HDRP, a similar effect can be achieved with CommandBuffer.SetViewport and CommandBuffer.EnableScissorRect. (untested) unity discussion
1)
all of the textures and instance data is still sent to the replaced
camera.txt · Last modified: 2025/05/27 20:33 by bottinogames

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki