Blit Render Feature for Universal RP's Forward Renderer. Set specific source/destination via camera source, ID string or RenderTexture asset. Also options for _InverseView matrix and _CameraNormalsTexture generation.
Used to apply fullscreen image effects to camera (or other source/destination) using a shader/material.
Tested with 2021.2 and 2021.3 (~ URP v12). For other versions, see branches.
Note : Unity/URP 2022.2+ now has a Fullscreen Graph and built-in Fullscreen Pass Renderer Feature which essentially replaces this feature when blitting using camera targets. (But if you want more injection points and different destinations see the 2022.1 branch)
This version uses CommandBuffer.Blit so will not work in Single-Pass Instanced VR. Try using cmd-DrawMesh version instead.
Setup:
Install via Package Manager → Add package via git URL :
Alternatively, download and put the folder in your Assets
Usage :
Adds "Blit" option to Renderer Features list on Forward/Universal asset (and 2D Renderer if in 2021.2+)
The shader/material used should sample _MainTex to obtain source. Will work with Shader Graphs too (as long as you set the texture Reference in the Blackboard / Node Settings)
Feature allows specific access to selecting the source and destination targets (via Camera, TextureID or Render Texture object)
Some usage examples :
Could be used with Camera for both source/destination to apply an shader/material as an image effect / post process
Could be used to copy the camera source to a TextureID. Similar to what the Opaque Texture / Scene Color does. (When TextureID is used in destination it automatically creates a Temporary Render Texture, and should also set it as a global texture so it can be obtained in shaders rendered later. May want to avoid using IDs that already exist)
Could be used with Render Texture object source (rendered by a second camera) and Camera destination to apply it to the Main Camera
Additional Features :
Option to set an _InverseView matrix (cameraToWorldMatrix), for shaders that might need it to handle calculations from screen space to world. For example, reconstructing world position from depth, see : https://twitter.com/Cyanilux/status/1269353975058501636
(2020.2/v10+) Enabling generation of DepthNormals (_CameraNormalsTexture)