Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/UnityStandardAssets/ImageEffects/BloomOptimized.cs
2026-03-04 10:03:45 +08:00

98 lines
2.7 KiB
C#

using UnityEngine;
namespace UnityStandardAssets.ImageEffects
{
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
[AddComponentMenu("Image Effects/Bloom and Glow/Bloom (Optimized)")]
public class BloomOptimized : PostEffectsBase
{
public enum Resolution
{
Low = 0,
High = 1
}
public enum BlurType
{
Standard = 0,
Sgx = 1
}
[Range(0f, 1.5f)]
public float threshold = 0.25f;
[Range(0f, 2.5f)]
public float intensity = 0.75f;
[Range(0.25f, 5.5f)]
public float blurSize = 1f;
private Resolution resolution;
[Range(1f, 4f)]
public int blurIterations = 1;
public BlurType blurType;
public Shader fastBloomShader;
private Material fastBloomMaterial;
public override bool CheckResources()
{
CheckSupport(needDepth: false);
fastBloomMaterial = CheckShaderAndCreateMaterial(fastBloomShader, fastBloomMaterial);
if (!isSupported)
{
ReportAutoDisable();
}
return isSupported;
}
private void OnDisable()
{
if ((bool)fastBloomMaterial)
{
Object.DestroyImmediate(fastBloomMaterial);
}
}
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (!CheckResources())
{
Graphics.Blit(source, destination);
return;
}
int num = ((resolution == Resolution.Low) ? 4 : 2);
float num2 = ((resolution == Resolution.Low) ? 0.5f : 1f);
fastBloomMaterial.SetVector("_Parameter", new Vector4(blurSize * num2, 0f, threshold, intensity));
source.filterMode = FilterMode.Bilinear;
int width = source.width / num;
int height = source.height / num;
RenderTexture renderTexture = RenderTexture.GetTemporary(width, height, 0, source.format);
renderTexture.filterMode = FilterMode.Bilinear;
Graphics.Blit(source, renderTexture, fastBloomMaterial, 1);
int num3 = ((blurType != BlurType.Standard) ? 2 : 0);
for (int i = 0; i < blurIterations; i++)
{
fastBloomMaterial.SetVector("_Parameter", new Vector4(blurSize * num2 + (float)i * 1f, 0f, threshold, intensity));
RenderTexture temporary = RenderTexture.GetTemporary(width, height, 0, source.format);
temporary.filterMode = FilterMode.Bilinear;
Graphics.Blit(renderTexture, temporary, fastBloomMaterial, 2 + num3);
RenderTexture.ReleaseTemporary(renderTexture);
renderTexture = temporary;
temporary = RenderTexture.GetTemporary(width, height, 0, source.format);
temporary.filterMode = FilterMode.Bilinear;
Graphics.Blit(renderTexture, temporary, fastBloomMaterial, 3 + num3);
RenderTexture.ReleaseTemporary(renderTexture);
renderTexture = temporary;
}
fastBloomMaterial.SetTexture("_Bloom", renderTexture);
Graphics.Blit(source, destination, fastBloomMaterial, 0);
RenderTexture.ReleaseTemporary(renderTexture);
}
}
}