using System; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.Rendering.Universal; using UnityEngine.Serialization; namespace Framework.RenderFeature { public class GaussBlurFeature : ScriptableRendererFeature { [Serializable] public class Setting { public bool enable = true; public Material grayMaterial = null; public Color grayColor = Color.white; public bool isGray = true; public bool isBlur = true; public Material blurMaterial = null; [Range (0, 1)] public float blurProgress = 1; [Range (0, 1)] public float grayScale = 1; [Range (0 , 1)] public float colorChannel_R = 1; [Range (0 , 1)] public float colorChannel_G = 1; [Range (0 , 1)] public float colorChannel_B = 1; [Range (1, 10)] public int blurPasses = 1; // [TitleGroup("模糊设置"), Title("分辨率精度(越小越高)"), Range(1, 4)] public int downsample = 1; } public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingTransparents; public GaussBlurFeature.Setting setting; public string cmdName = "GaussBlurFeature"; private GaussBlurPass m_ScriptablePass; public override void Create () { // return; this.m_ScriptablePass = new GaussBlurPass ().Init (this.setting, cmdName); this.m_ScriptablePass.renderPassEvent = this.renderPassEvent; } public override void AddRenderPasses (ScriptableRenderer renderer, ref RenderingData renderingData) { this.m_ScriptablePass.ConfigureInput (ScriptableRenderPassInput.Color); renderer.EnqueuePass (this.m_ScriptablePass); // var supportsCameraStackingType = renderer.SupportsCameraStackingType ( CameraRenderType.Base); // if (supportsCameraStackingType) // { // renderer.EnqueuePass (this.m_ScriptablePass); // } } public override void SetupRenderPasses (ScriptableRenderer renderer, in RenderingData renderingData) { // 只对游戏摄像机应用后处理(还有预览摄像机等) if (renderingData.cameraData.cameraType == CameraType.Game) { // 设置向pass输入color (m_RenderPass父类) m_ScriptablePass.ConfigureInput (ScriptableRenderPassInput.Color); // 设置RT为相机的color m_ScriptablePass.SetTarget (renderer.cameraColorTargetHandle); } } } }