49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using System;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Rendering.Universal;
|
|
using X.Rendering.Assets;
|
|
|
|
namespace X.Rendering.Scene
|
|
{
|
|
internal class ShadowEdgeRemapSetupPass : ScriptableRenderPass, IDisposable
|
|
{
|
|
[Serializable]
|
|
public class ShadowEdgeRemapSettings
|
|
{
|
|
public bool Enable = true;
|
|
public GradientTexture ShadowRemapTex;
|
|
public RenderPassEvent InjectionPoint = RenderPassEvent.BeforeRendering;
|
|
}
|
|
|
|
const string ShadowRemap = "_ShadowRemapON";
|
|
private ShadowEdgeRemapSettings settings;
|
|
private CommandBuffer commandBuffer;
|
|
|
|
public ShadowEdgeRemapSetupPass(ShadowEdgeRemapSettings settings, SceneEffect sceneEffect)
|
|
{
|
|
this.settings = settings;
|
|
renderPassEvent = settings.InjectionPoint;
|
|
commandBuffer = CommandBufferPool.Get(nameof(ShadowEdgeRemapSetupPass) + sceneEffect.name);
|
|
}
|
|
|
|
public override void FrameCleanup(CommandBuffer cmd)
|
|
{
|
|
cmd.DisableShaderKeyword(ShadowRemap);
|
|
}
|
|
|
|
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
|
{
|
|
var cmd = commandBuffer;
|
|
cmd.EnableShaderKeyword(ShadowRemap);
|
|
cmd.SetGlobalTexture("_ShadowRemap", settings.ShadowRemapTex.GetTexture());
|
|
context.ExecuteCommandBuffer(cmd);
|
|
cmd.Clear();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
commandBuffer.Dispose();
|
|
}
|
|
}
|
|
}
|