using UnityEngine; namespace RoR2; [RequireComponent(typeof(Camera))] public class BlurOptimized : MonoBehaviour { public enum BlurType { StandardGauss, SgxGauss } [Range(0f, 2f)] public int downsample = 1; [Range(0f, 10f)] public float blurSize = 3f; [Range(1f, 4f)] public int blurIterations = 2; public BlurType blurType; [HideInInspector] public Material blurMaterial; public void Start() { blurMaterial = new Material(LegacyShaderAPI.Find("Hidden/FastBlur")); base.enabled = false; } public void OnRenderImage(RenderTexture source, RenderTexture destination) { float num = 1f / (1f * (float)(1 << downsample)); blurMaterial.SetVector("_Parameter", new Vector4(blurSize * num, (0f - blurSize) * num, 0f, 0f)); source.filterMode = FilterMode.Bilinear; int width = source.width >> downsample; int height = source.height >> downsample; RenderTexture renderTexture = RenderTexture.GetTemporary(width, height, 0, source.format); renderTexture.filterMode = FilterMode.Bilinear; Graphics.Blit(source, renderTexture, blurMaterial, 0); int num2 = ((blurType != 0) ? 2 : 0); for (int i = 0; i < blurIterations; i++) { float num3 = (float)i * 1f; blurMaterial.SetVector("_Parameter", new Vector4(blurSize * num + num3, (0f - blurSize) * num - num3, 0f, 0f)); RenderTexture temporary = RenderTexture.GetTemporary(width, height, 0, source.format); temporary.filterMode = FilterMode.Bilinear; Graphics.Blit(renderTexture, temporary, blurMaterial, 1 + num2); RenderTexture.ReleaseTemporary(renderTexture); renderTexture = temporary; temporary = RenderTexture.GetTemporary(width, height, 0, source.format); temporary.filterMode = FilterMode.Bilinear; Graphics.Blit(renderTexture, temporary, blurMaterial, 2 + num2); RenderTexture.ReleaseTemporary(renderTexture); renderTexture = temporary; } Graphics.Blit(renderTexture, destination); RenderTexture.ReleaseTemporary(renderTexture); } }