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.Camera, targetDepthBuffer = CustomPass.TargetBuffer.Camera, }; CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.BeforeRendering, _utsPass); CustomPassVolume.RegisterUniqueGlobalCustomPass(CustomPassInjectionPoint.BeforePostProcess, _outlinePass); NotifyRendererSettingChanged(); } public static void UnregisterGlobalCustomPass() { CustomPassVolume.UnregisterGlobalCustomPass(_utsPass); CustomPassVolume.UnregisterGlobalCustomPass(_outlinePass); } public static void NotifyRendererSettingChanged() { if (_utsPass == null || _outlinePass == null) { return; } _utsPass.EnableHairShadow = _renderSetting.hairShadowSetting.enable; _utsPass.HairShadowQuality = _renderSetting.hairShadowSetting.quality; _utsPass.EnableHairBlending = _renderSetting.hairBlendingSetting.enable; _utsPass.HairBlendingQuality = _renderSetting.hairBlendingSetting.quality; _outlinePass.enabled = _renderSetting.outlineSetting.enable; } } }