unity_native_render_plugin/Assets/Scripts/Features/ShadowEdgeRemapSetupPass.cs

49 lines
1.5 KiB
C#
Raw Normal View History

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