Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 78 additions & 63 deletions Assets/BlurryRefraction/GrabBlurPass.cs
Original file line number Diff line number Diff line change
@@ -1,84 +1,99 @@
using System;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Experimental.Rendering.LightweightPipeline;
using UnityEngine.Rendering;
using UnityEngine.Rendering.LWRP;


public class GrabBlurPass : MonoBehaviour, IAfterOpaquePass
// Render features MUST be in a namespace to workaround crash in inspector UI
namespace CustomRenderPasses
{
private GrabBlurPassImpl m_grabBlurPass;

public ScriptableRenderPass GetPassToEnqueue(RenderTextureDescriptor baseDescriptor, RenderTargetHandle colorHandle, RenderTargetHandle depthHandle)
[CreateAssetMenu]
public class GrabBlurPass : ScriptableRendererFeature
{
if (m_grabBlurPass == null) m_grabBlurPass = new GrabBlurPassImpl(colorHandle);
return m_grabBlurPass;
}
}
private GrabBlurPassImpl m_grabBlurPass;

public override void Create()
{
m_grabBlurPass = new GrabBlurPassImpl(RenderPassEvent.AfterRenderingOpaques);
}

public class GrabBlurPassImpl : ScriptableRenderPass
{
const string k_RenderGrabPassTag = "BlurredGrabPass";
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
m_grabBlurPass.Setup(renderer.cameraColorTarget);
renderer.EnqueuePass(m_grabBlurPass);
}
}

public Shader m_BlurShader;
private RenderTargetHandle m_ColorHandle;
private CommandBufferBlur m_Blur;
int m_BlurTemp1;
int m_BlurTemp2;

public GrabBlurPassImpl(RenderTargetHandle colorHandle)
public class GrabBlurPassImpl : ScriptableRenderPass
{
m_ColorHandle = colorHandle;
m_Blur = new CommandBufferBlur();
const string k_RenderGrabPassTag = "BlurredGrabPass";

m_BlurTemp1 = Shader.PropertyToID("_Temp1");
m_BlurTemp2 = Shader.PropertyToID("_Temp2");
}
public Shader m_BlurShader;
private CommandBufferBlur m_Blur;
int m_BlurTemp1;
int m_BlurTemp2;

public override void Execute(ScriptableRenderer renderer, ScriptableRenderContext context, ref RenderingData renderingData)
{
CommandBuffer cmd = CommandBufferPool.Get(k_RenderGrabPassTag);
RenderTargetIdentifier sourceColor;

using (new ProfilingSample(cmd, k_RenderGrabPassTag))
public GrabBlurPassImpl(RenderPassEvent evt)
{
// copy screen into temporary RT
int screenCopyID = Shader.PropertyToID("_ScreenCopyTexture");
RenderTextureDescriptor opaqueDesc =
ScriptableRenderer.CreateRenderTextureDescriptor(ref renderingData.cameraData);
cmd.GetTemporaryRT(screenCopyID, opaqueDesc, FilterMode.Bilinear);
cmd.Blit(m_ColorHandle.Identifier(), screenCopyID);

// get two smaller RTs
opaqueDesc.width /= 2;
opaqueDesc.height /= 2;
cmd.GetTemporaryRT(m_BlurTemp1, opaqueDesc, FilterMode.Bilinear);
cmd.GetTemporaryRT(m_BlurTemp2, opaqueDesc, FilterMode.Bilinear);

// downsample screen copy into smaller RT, release screen RT
cmd.Blit(screenCopyID, m_BlurTemp1);
cmd.ReleaseTemporaryRT(screenCopyID);

opaqueDesc.width /= 2;
opaqueDesc.height /= 2;

// Setup blur commands
m_Blur.SetupCommandBuffer(cmd, m_BlurTemp1, m_BlurTemp2);

// Set texture id so we can use it later
cmd.SetGlobalTexture("_GrabBlurTexture", m_BlurTemp1);
renderPassEvent = evt;
m_Blur = new CommandBufferBlur();

m_BlurTemp1 = Shader.PropertyToID("_Temp1");
m_BlurTemp2 = Shader.PropertyToID("_Temp2");
}

context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
public void Setup(RenderTargetIdentifier sourceColor)
{
this.sourceColor = sourceColor;
}

public override void FrameCleanup(CommandBuffer cmd)
{
if (cmd == null)
throw new ArgumentNullException("cmd");
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
CommandBuffer cmd = CommandBufferPool.Get(k_RenderGrabPassTag);

using (new ProfilingSample(cmd, k_RenderGrabPassTag))
{
// copy screen into temporary RT
int screenCopyID = Shader.PropertyToID("_ScreenCopyTexture");
RenderTextureDescriptor opaqueDesc = renderingData.cameraData.cameraTargetDescriptor;
cmd.GetTemporaryRT(screenCopyID, opaqueDesc, FilterMode.Bilinear);
cmd.Blit(sourceColor, screenCopyID);

// get two smaller RTs
opaqueDesc.width /= 2;
opaqueDesc.height /= 2;
cmd.GetTemporaryRT(m_BlurTemp1, opaqueDesc, FilterMode.Bilinear);
cmd.GetTemporaryRT(m_BlurTemp2, opaqueDesc, FilterMode.Bilinear);

// downsample screen copy into smaller RT, release screen RT
cmd.Blit(screenCopyID, m_BlurTemp1);
cmd.ReleaseTemporaryRT(screenCopyID);

opaqueDesc.width /= 2;
opaqueDesc.height /= 2;

// Setup blur commands
m_Blur.SetupCommandBuffer(cmd, m_BlurTemp1, m_BlurTemp2);

// Set texture id so we can use it later
cmd.SetGlobalTexture("_GrabBlurTexture", m_BlurTemp1);
}

context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}

public override void FrameCleanup(CommandBuffer cmd)
{
if (cmd == null)
throw new ArgumentNullException("cmd");

cmd.ReleaseTemporaryRT(m_BlurTemp1);
cmd.ReleaseTemporaryRT(m_BlurTemp2);
cmd.ReleaseTemporaryRT(m_BlurTemp1);
cmd.ReleaseTemporaryRT(m_BlurTemp2);
}
}
}

}
46 changes: 46 additions & 0 deletions Assets/CustomForwardRendererData.asset
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-2293205390202320807
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 19e693ef65bd01740932b40dd32a8d10, type: 3}
m_Name: NewPerObjectBloomPass
m_EditorClassIdentifier:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3}
m_Name: CustomForwardRendererData
m_EditorClassIdentifier:
m_RendererFeatures:
- {fileID: -2293205390202320807}
m_BlitShader: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3}
m_CopyDepthShader: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3}
m_ScreenSpaceShadowShader: {fileID: 4800000, guid: 0f854b35a0cf61a429bd5dcfea30eddd,
type: 3}
m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3}
m_OpaqueLayerMask:
serializedVersion: 2
m_Bits: 4294967295
m_TransparentLayerMask:
serializedVersion: 2
m_Bits: 4294967295
m_DefaultStencilState:
overrideStencilState: 0
stencilReference: 0
stencilCompareFunction: 8
passOperation: 0
failOperation: 0
zFailOperation: 0
8 changes: 8 additions & 0 deletions Assets/CustomForwardRendererData.asset.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Assets/PerObjectBloom/PerObjectBloom.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System;
using UnityEngine;
using CoreUtils = UnityEngine.Experimental.Rendering.CoreUtils;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using FloatParameter = UnityEngine.Rendering.PostProcessing.FloatParameter;

[Serializable]
[PostProcess(typeof(PerObjectBloomRenderer), PostProcessEvent.AfterStack, "Custom/PerObjectBloom")]
Expand Down
Loading