71 lines
1.8 KiB
C#
Raw Normal View History

2025-09-11 11:04:02 +08:00
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();
}
}
}