using UnityEngine; using UnityEngine.Rendering.HighDefinition; namespace Unity.Toonshader { #if UNITY_EDITOR [UnityEditor.InitializeOnLoad] #endif public static class RegisterUTSRenderPass { private static readonly UTSRenderPassSettings _renderSetting; private static readonly UTSOutlinePass _outlinePass; private static readonly UTSHairShadowPass _hairShadowPass; static RegisterUTSRenderPass() { _renderSetting = UTSRenderPassSettings.GetOrCreateSettings(); if (_renderSetting == null) { return; } _outlinePass = new() { name = "UTS Outline", renderingLayerMask = _renderSetting.outlineSetting.renderingLayer }; _hairShadowPass = new() { name = "UTS Hair Shadow Map", renderingLayerMask = _renderSetting.hairShadowSetting.CasterRenderingLayer, targetColorBuffer = CustomPass.TargetBuffer.None, targetDepthBuffer = CustomPass.TargetBuffer.None, }; RegisterCustomPasses(); } [RuntimeInitializeOnLoadMethod] public static void RegisterCustomPasses() { CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.AfterOpaqueAndSky, _outlinePass); CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.AfterOpaqueDepthAndNormal, _hairShadowPass); _outlinePass.enabled = _renderSetting.outlineSetting.enable; _hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable); } public static void UnregisterGlobalCustomPass() { CustomPassVolume.UnregisterGlobalCustomPass(_outlinePass); CustomPassVolume.UnregisterGlobalCustomPass(_hairShadowPass); _hairShadowPass.Release(); } public static void NotifyRendererSettingChanged() { _outlinePass.enabled = _renderSetting.outlineSetting.enable; _outlinePass.renderingLayerMask = _renderSetting.outlineSetting.renderingLayer; _hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable); _hairShadowPass.renderingLayerMask = _renderSetting.hairShadowSetting.CasterRenderingLayer; } } }