Created
August 7, 2023 21:04
-
-
Save justcore69/54cb4c4e45840f2c6dd546769d061df0 to your computer and use it in GitHub Desktop.
Scriptable Renderer Feature that applies a material to a whole screen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEngine.Rendering; | |
using UnityEngine.Rendering.Universal; | |
public class FullscreenShaderFeature : ScriptableRendererFeature | |
{ | |
[SerializeField] | |
private Material material; | |
class CustomRenderPass : ScriptableRenderPass | |
{ | |
[SerializeField] | |
private Material material; | |
private RTHandle tempTex, srcTex; | |
public CustomRenderPass(Material mat) : base() | |
{ | |
material = mat; | |
} | |
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) | |
{ | |
srcTex = renderingData.cameraData.renderer.cameraColorTargetHandle; | |
tempTex = RTHandles.Alloc(new RenderTargetIdentifier("_TempTex"), "_TempTex"); | |
} | |
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) | |
{ | |
CommandBuffer cmd = CommandBufferPool.Get("FullscreenShaderFeature"); | |
RenderTextureDescriptor desc = renderingData.cameraData.cameraTargetDescriptor; | |
desc.depthBufferBits = 0; | |
cmd.GetTemporaryRT(Shader.PropertyToID(tempTex.name), desc, FilterMode.Point); | |
Blit(cmd, srcTex, tempTex, material); | |
Blit(cmd, tempTex, srcTex); | |
context.ExecuteCommandBuffer(cmd); | |
CommandBufferPool.Release(cmd); | |
} | |
public override void OnCameraCleanup(CommandBuffer cmd) | |
{ | |
tempTex.Release(); | |
} | |
} | |
CustomRenderPass m_ScriptablePass; | |
public override void Create() | |
{ | |
m_ScriptablePass = new CustomRenderPass(material); | |
m_ScriptablePass.renderPassEvent = RenderPassEvent.BeforeRenderingPostProcessing; | |
} | |
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) | |
{ | |
renderer.EnqueuePass(m_ScriptablePass); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment