diff options
author | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
commit | 6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch) | |
tree | b38119d2acf0a982cb67e381f146924b9bfc3b3f /UnityEngine.PostProcessing/ChromaticAberrationComponent.cs |
+init
Diffstat (limited to 'UnityEngine.PostProcessing/ChromaticAberrationComponent.cs')
-rw-r--r-- | UnityEngine.PostProcessing/ChromaticAberrationComponent.cs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/UnityEngine.PostProcessing/ChromaticAberrationComponent.cs b/UnityEngine.PostProcessing/ChromaticAberrationComponent.cs new file mode 100644 index 0000000..1e5b82a --- /dev/null +++ b/UnityEngine.PostProcessing/ChromaticAberrationComponent.cs @@ -0,0 +1,53 @@ +namespace UnityEngine.PostProcessing; + +public sealed class ChromaticAberrationComponent : PostProcessingComponentRenderTexture<ChromaticAberrationModel> +{ + private static class Uniforms + { + internal static readonly int _ChromaticAberration_Amount = Shader.PropertyToID("_ChromaticAberration_Amount"); + + internal static readonly int _ChromaticAberration_Spectrum = Shader.PropertyToID("_ChromaticAberration_Spectrum"); + } + + private Texture2D m_SpectrumLut; + + public override bool active => base.model.enabled && base.model.settings.intensity > 0f && !context.interrupted; + + public override void OnDisable() + { + GraphicsUtils.Destroy(m_SpectrumLut); + m_SpectrumLut = null; + } + + public override void Prepare(Material uberMaterial) + { + ChromaticAberrationModel.Settings settings = base.model.settings; + Texture2D texture2D = settings.spectralTexture; + if (texture2D == null) + { + if (m_SpectrumLut == null) + { + m_SpectrumLut = new Texture2D(3, 1, TextureFormat.RGB24, mipmap: false) + { + name = "Chromatic Aberration Spectrum Lookup", + filterMode = FilterMode.Bilinear, + wrapMode = TextureWrapMode.Clamp, + anisoLevel = 0, + hideFlags = HideFlags.DontSave + }; + Color[] pixels = new Color[3] + { + new Color(1f, 0f, 0f), + new Color(0f, 1f, 0f), + new Color(0f, 0f, 1f) + }; + m_SpectrumLut.SetPixels(pixels); + m_SpectrumLut.Apply(); + } + texture2D = m_SpectrumLut; + } + uberMaterial.EnableKeyword("CHROMATIC_ABERRATION"); + uberMaterial.SetFloat(Uniforms._ChromaticAberration_Amount, settings.intensity * 0.03f); + uberMaterial.SetTexture(Uniforms._ChromaticAberration_Spectrum, texture2D); + } +} |