using Echovoid.Runtime.Behavior.Rendering; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; namespace SLSUtilities.Rendering.PostProcessing { public enum RadialBlurQuality { RadialBlur_4Tap_Fatest = 0, RadialBlur_8Tap_Balance = 1, RadialBlur_12Tap = 2, RadialBlur_16Tap_Quality = 3, } [System.Serializable, VolumeComponentMenu("SLS/Postprocessing/Radial Blur")] public class RadialBlur : ScriptablePostProcessorVolume { public override CustomPostProcessInjectionPoint InjectionPoint => CustomPostProcessInjectionPoint.BeforePostProcess; public override int OrderInInjectionPoint => 10; public EnumParameter 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); public override string GetShaderName() => "SLS/Postprocessing/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); } }