From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- Client/Assets/Scripts/PostEffect/FastBloom.cs | 98 +++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Client/Assets/Scripts/PostEffect/FastBloom.cs (limited to 'Client/Assets/Scripts/PostEffect/FastBloom.cs') diff --git a/Client/Assets/Scripts/PostEffect/FastBloom.cs b/Client/Assets/Scripts/PostEffect/FastBloom.cs new file mode 100644 index 00000000..dc1fc745 --- /dev/null +++ b/Client/Assets/Scripts/PostEffect/FastBloom.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using System.Collections; + +[ExecuteInEditMode] +[RequireComponent(typeof(Camera))] +public class FastBloom : PostEffectsBase +{ + public enum Resolution { + Low = 0, + High = 1, + } + + public enum BlurType { + Standard = 0, + Sgx = 1, + } + + [Range(0.0f, 1.5f)] + public float threshhold = 0.25f; + [Range(0.0f, 2.5f)] + public float intensity = 0.75f; + + [Range(0.25f, 5.5f)] + public float blurSize = 1.0f; + + Resolution resolution = Resolution.Low; + [Range(1, 4)] + public int blurIterations = 1; + + public BlurType blurType = BlurType.Standard; + + public Shader fastBloomShader; + private Material fastBloomMaterial = null; + + new bool CheckResources () + { + CheckSupport (false); + + fastBloomMaterial = CheckShaderAndCreateMaterial (fastBloomShader, fastBloomMaterial); + + if(!isSupported) + ReportAutoDisable (); + return isSupported; + } + + void OnDisable() { + if(fastBloomMaterial) + DestroyImmediate (fastBloomMaterial); + } + + void OnRenderImage (RenderTexture source, RenderTexture destination) + { + if(CheckResources() == false) { + Graphics.Blit (source, destination); + return; + } + + int divider = resolution == Resolution.Low ? 4 : 2; + float widthMod = resolution == Resolution.Low ? 0.5f : 1.0f; + + fastBloomMaterial.SetVector ("_Parameter",new Vector4 (blurSize * widthMod, 0.0f, threshhold, intensity)); + source.filterMode = FilterMode.Bilinear; + + var rtW = source.width/divider; + var rtH = source.height/divider; + + // downsample + RenderTexture rt = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); + rt.filterMode = FilterMode.Bilinear; + Graphics.Blit (source, rt, fastBloomMaterial, 1); + + int passOffs = blurType == BlurType.Standard ? 0 : 2; + + for(int i = 0; i < blurIterations; i++) { + fastBloomMaterial.SetVector("_Parameter", new Vector4(blurSize * widthMod + (i * 1.0f), 0.0f, threshhold, intensity)); + + // vertical blur + RenderTexture rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); + rt2.filterMode = FilterMode.Bilinear; + Graphics.Blit (rt, rt2, fastBloomMaterial, 2 + passOffs); + RenderTexture.ReleaseTemporary (rt); + rt = rt2; + + // horizontal blur + rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); + rt2.filterMode = FilterMode.Bilinear; + Graphics.Blit (rt, rt2, fastBloomMaterial, 3 + passOffs); + RenderTexture.ReleaseTemporary (rt); + rt = rt2; + } + + fastBloomMaterial.SetTexture ("_Bloom", rt); + + Graphics.Blit (source, destination, fastBloomMaterial, 0); + + RenderTexture.ReleaseTemporary (rt); + } +} -- cgit v1.1-26-g67d0