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); // } } }