71 lines
1.8 KiB
C#
71 lines
1.8 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Rendering.Universal;
|
|
|
|
public class SceneEffect : MonoBehaviour
|
|
{
|
|
public RenderPassEvent injectionPoint = RenderPassEvent.BeforeRendering;
|
|
|
|
[Serializable]
|
|
class Settings
|
|
{
|
|
public GradientTexture ShadowRemapTex;
|
|
}
|
|
[SerializeField]
|
|
private Settings settings;
|
|
SetupPass pass;
|
|
private void OnEnable()
|
|
{
|
|
pass = new(settings);
|
|
pass.renderPassEvent = injectionPoint;
|
|
RenderPipelineManager.beginCameraRendering += OnBeginCamera;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
RenderPipelineManager.beginCameraRendering -= OnBeginCamera;
|
|
}
|
|
|
|
|
|
private void OnBeginCamera(ScriptableRenderContext context, Camera cam)
|
|
{
|
|
if (pass == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (cam.cameraType != CameraType.Game && cam.cameraType != CameraType.SceneView)
|
|
{
|
|
return;
|
|
}
|
|
|
|
cam.GetUniversalAdditionalCameraData().scriptableRenderer.EnqueuePass(pass);
|
|
}
|
|
|
|
private class SetupPass : ScriptableRenderPass
|
|
{
|
|
const string ShadowRemap = "_ShadowRemapON";
|
|
private Settings settings;
|
|
|
|
public SetupPass(Settings settings)
|
|
{
|
|
this.settings = settings;
|
|
}
|
|
|
|
public override void FrameCleanup(CommandBuffer cmd)
|
|
{
|
|
cmd.DisableShaderKeyword(ShadowRemap);
|
|
}
|
|
|
|
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
|
{
|
|
var cmd = CommandBufferPool.Get("DissolveEffect");
|
|
cmd.EnableShaderKeyword(ShadowRemap);
|
|
cmd.SetGlobalTexture("_ShadowRemap", settings.ShadowRemapTex.GetTexture());
|
|
context.ExecuteCommandBuffer(cmd);
|
|
cmd.Clear();
|
|
}
|
|
}
|
|
}
|