using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using System;
|
|
|
|
[ExecuteInEditMode, ImageEffectAllowedInSceneView]
|
|
public class FXAAEffect : MonoBehaviour {
|
|
|
|
const int luminancePass = 0;
|
|
const int fxaaPass = 1;
|
|
// public enum LuminanceMode { Alpha, Green, Calculate }
|
|
|
|
// public LuminanceMode luminanceSource;
|
|
|
|
[Range(0.0312f, 0.0833f)]
|
|
public float contrastThreshold = 0.0312f;
|
|
|
|
[Range(0.063f, 0.333f)]
|
|
public float relativeThreshold = 0.063f;
|
|
|
|
[Range(0f, 1f)]
|
|
public float subpixelBlending = 1f;
|
|
|
|
// [HideInInspector]
|
|
public Shader fxaaShader;
|
|
|
|
public bool lowQuality;
|
|
|
|
// public bool gammaBlending;
|
|
|
|
[NonSerialized]
|
|
Material fxaaMaterial;
|
|
RenderTexture luminanceTex;
|
|
|
|
void OnRenderImage (RenderTexture source, RenderTexture destination) {
|
|
if (fxaaMaterial == null) {
|
|
fxaaMaterial = new Material(fxaaShader);
|
|
fxaaMaterial.hideFlags = HideFlags.HideAndDontSave;
|
|
}
|
|
fxaaMaterial.SetFloat("_ContrastThreshold", contrastThreshold);
|
|
fxaaMaterial.SetFloat("_RelativeThreshold", relativeThreshold);
|
|
fxaaMaterial.SetFloat("_SubpixelBlending", subpixelBlending);
|
|
|
|
if (lowQuality) {
|
|
fxaaMaterial.EnableKeyword("LOW_QUALITY");
|
|
}
|
|
else {
|
|
fxaaMaterial.DisableKeyword("LOW_QUALITY");
|
|
}
|
|
|
|
// if (gammaBlending) {
|
|
// fxaaMaterial.EnableKeyword("GAMMA_BLENDING");
|
|
// }
|
|
// else {
|
|
// fxaaMaterial.DisableKeyword("GAMMA_BLENDING");
|
|
// }
|
|
|
|
// if (luminanceSource == LuminanceMode.Calculate) {
|
|
// fxaaMaterial.DisableKeyword("LUMINANCE_GREEN");
|
|
// luminanceTex = RenderTexture.GetTemporary(
|
|
// source.width, source.height, 0, source.format
|
|
// );
|
|
// Graphics.Blit(source, luminanceTex, fxaaMaterial, luminancePass);
|
|
// Graphics.Blit(luminanceTex, destination, fxaaMaterial, fxaaPass);
|
|
// RenderTexture.ReleaseTemporary(luminanceTex);
|
|
// }
|
|
// else {
|
|
// if (luminanceSource == LuminanceMode.Green) {
|
|
// fxaaMaterial.EnableKeyword("LUMINANCE_GREEN");
|
|
// }
|
|
// else {
|
|
// fxaaMaterial.DisableKeyword("LUMINANCE_GREEN");
|
|
// }
|
|
Graphics.Blit(source, destination, fxaaMaterial, fxaaPass);
|
|
// }
|
|
}
|
|
}
|