using System.IO; using UnityEngine; using UnityEngine.Rendering.HighDefinition; namespace Unity.Toonshader { #if UNITY_EDITOR [UnityEditor.InitializeOnLoad] #endif public static class RegisterUTSRenderPass { private static readonly UTSRenderPassSetting _renderSetting; private static readonly UTSOutlinePass _outlinePass; private static readonly UTSHairShadowPass _hairShadowPass; static RegisterUTSRenderPass() { var assetPath = Path.GetFileNameWithoutExtension(UTSRenderPassSetting.RENDERER_SETTING_ASSET_PATH); _renderSetting = Resources.Load(assetPath); if (_renderSetting == null) { return; } _outlinePass = new() { name = "UTS Outline", layerMask = _renderSetting.outlineSetting.layerMask }; _hairShadowPass = new() { name = "UTS Hair Shadow Map", layerMask = _renderSetting.hairShadowSetting.casterLayerMask, 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.layerMask = _renderSetting.outlineSetting.layerMask; _hairShadowPass.SetEnable(_renderSetting.hairShadowSetting.enable); _hairShadowPass.layerMask = _renderSetting.hairShadowSetting.casterLayerMask; } } }