98 lines
2.7 KiB
C#
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)
|
|
{
|
|
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 != 0) ? 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);
|
|
}
|
|
}
|
|
}
|