using UnityEngine; using UnityEngine.Rendering.HighDefinition; namespace Misaki.HdrpToon { #if UNITY_EDITOR [UnityEditor.InitializeOnLoad] #endif public static class UTSRenderPassRegistrar { private static UTSRenderPassSettings _renderSetting; private static UTSPass _utsPass; private static UTSHairShadowPass _hairShadowPass; private static UTSOutlinePass _outlinePass; static UTSRenderPassRegistrar() => RegisterCustomPasses(); [RuntimeInitializeOnLoadMethod] public static void RegisterCustomPasses() { _renderSetting = UTSRenderPassSettings.GetOrCreateSettings(); if (_renderSetting == null) { return; } _utsPass = new UTSPass() { name = "UTS Pass", targetColorBuffer = CustomPass.TargetBuffer.None, targetDepthBuffer = CustomPass.TargetBuffer.None, }; _hairShadowPass = new() { name = "UTS Hair Shadow Map", targetColorBuffer = CustomPass.TargetBuffer.None, targetDepthBuffer = CustomPass.TargetBuffer.None, }; _outlinePass = new() { name = "UTS Outline", targetColorBuffer = CustomPass.TargetBuffer.None, targetDepthBuffer = CustomPass.TargetBuffer.None, }; CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.BeforeRendering, _utsPass); CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.AfterOpaqueDepthAndNormal, _hairShadowPass); CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.BeforePostProcess, _outlinePass); NotifyRendererSettingChanged(); } public static void UnregisterGlobalCustomPass() { CustomPassVolume.UnregisterGlobalCustomPass(_utsPass); CustomPassVolume.UnregisterGlobalCustomPass(_hairShadowPass); CustomPassVolume.UnregisterGlobalCustomPass(_outlinePass); } public static void NotifyRendererSettingChanged() { if (_hairShadowPass == null || _outlinePass == null) { return; } _hairShadowPass.enabled = _renderSetting.hairShadowSetting.enable; _hairShadowPass.CurrentShadowQuality = _renderSetting.hairShadowSetting.shadowQuality; if (!_renderSetting.hairShadowSetting.enable) { _hairShadowPass.Release(); } _outlinePass.enabled = _renderSetting.outlineSetting.enable; } } }