Advertisement
Guest User

Calico Post Processing with stencil mask

a guest
Apr 24th, 2019
755
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.29 KB | None | 0 0
  1. //Calico post processing with stencil mask
  2.  
  3. using UnityEngine;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using UnityEngine.Rendering;
  7.  
  8. [ExecuteInEditMode]
  9. [ImageEffectAllowedInSceneView]
  10. public class ScreenMaterial : MonoBehaviour {
  11.     public DepthTextureMode depthMode = DepthTextureMode.None;
  12.  
  13.     //AfterForwardAlpha will work for most effects
  14.     public CameraEvent RenderOrder = CameraEvent.AfterForwardAlpha;
  15.     public Material effectMaterial;
  16.  
  17.     private CameraEvent tempCE;
  18.     private CommandBuffer commandBuffer;
  19.     private Camera m_Camera;
  20.     private Camera Cam
  21.     {
  22.         get
  23.         {
  24.             if (m_Camera == null)
  25.             {
  26.                 m_Camera = GetComponent<Camera>();
  27.             }
  28.             return m_Camera;
  29.         }
  30.     }
  31.  
  32.     //Update settings when edited
  33.     private void OnValidate()
  34.     {
  35.         Cam.depthTextureMode = depthMode;
  36.  
  37.         if ((RenderOrder != tempCE && commandBuffer != null))
  38.         {
  39.             Cam.RemoveCommandBuffer(tempCE, commandBuffer);
  40.             Cam.AddCommandBuffer(RenderOrder, commandBuffer);
  41.             tempCE = RenderOrder;
  42.         }
  43.         else if (RenderOrder != tempCE && effectMaterial != null)
  44.             OnEnable();
  45.     }
  46.    
  47.     private void OnEnable()
  48.     {
  49.         if (commandBuffer == null && effectMaterial != null)
  50.         {
  51.             commandBuffer = new CommandBuffer();
  52.             commandBuffer.name = "commandBuffer";
  53.  
  54.             int StencRT = Shader.PropertyToID("_Temp2");
  55.             commandBuffer.GetTemporaryRT(StencRT, -1, -1, 0);
  56.  
  57.             commandBuffer.SetRenderTarget(color: StencRT, depth: StencRT);
  58.             commandBuffer.ClearRenderTarget(false, true, Color.clear);
  59.             commandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, StencRT);
  60.             commandBuffer.SetGlobalTexture("_MainTex", StencRT);
  61.            
  62.             commandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, BuiltinRenderTextureType.CameraTarget, effectMaterial);
  63.  
  64.             Cam.AddCommandBuffer(RenderOrder, commandBuffer);
  65.         }
  66.     }
  67.  
  68.     private void OnDisable()
  69.     {
  70.         if (commandBuffer != null)
  71.         {
  72.             Cam.RemoveCommandBuffer(RenderOrder, commandBuffer);
  73.             commandBuffer = null;
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement