Files
Cielonos/Assets/Shaders/ScriptablePostProcessor/PostProcessing/RadialBlur.cs
SoulliesOfficial ef7b479712 initial
2025-11-25 08:19:33 -05:00

40 lines
1.7 KiB
C#

using Echovoid.Runtime.Behavior.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace SLSFramework.Rendering.PostProcessing
{
public enum RadialBlurQuality
{
RadialBlur_4Tap_Fatest = 0,
RadialBlur_8Tap_Balance = 1,
RadialBlur_12Tap = 2,
RadialBlur_20Tap_Quality = 3,
RadialBlur_30Tap_Extreme = 4,
}
[System.Serializable, VolumeComponentMenu("Custom/Radial Blur")]
public class RadialBlur : ScriptablePostProcessorVolume
{
public override CustomPostProcessInjectionPoint InjectionPoint => CustomPostProcessInjectionPoint.BeforePostProcess;
public override int OrderInInjectionPoint => 10;
public EnumParameter<RadialBlurQuality> qualityLevel = new (RadialBlurQuality.RadialBlur_8Tap_Balance);
public ClampedFloatParameter blurRadius = new(0f, -1f, 1f);
public ClampedFloatParameter radialCenterX = new(0.5f, 0f, 1f);
public ClampedFloatParameter radialCenterY = new(0.5f, 0f, 1f);
protected override string GetShaderName() => "Hidden/Custom/RadialBlur";
public override void Render(CommandBuffer cmd, ref RenderingData renderingData, RTHandle source, RTHandle target)
{
if (material == null) return;
cmd.SetGlobalVector(InternalShaderHelpers.ID._RadialBlurParams,
new Vector4(blurRadius.value * 0.02f, radialCenterX.value, radialCenterY.value));
Blitter.BlitCameraTexture(cmd, source, target, material, (int)qualityLevel.value);
}
public override bool IsActive() => !Mathf.Approximately(blurRadius.value, 0);
}
}