summaryrefslogtreecommitdiff
path: root/UnityEngine.PostProcessing/ChromaticAberrationComponent.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-13 11:00:58 +0800
committerchai <215380520@qq.com>2024-03-13 11:00:58 +0800
commit6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch)
treeb38119d2acf0a982cb67e381f146924b9bfc3b3f /UnityEngine.PostProcessing/ChromaticAberrationComponent.cs
+init
Diffstat (limited to 'UnityEngine.PostProcessing/ChromaticAberrationComponent.cs')
-rw-r--r--UnityEngine.PostProcessing/ChromaticAberrationComponent.cs53
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);
+ }
+}