您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

162 行
4.8 KiB

using UnityEngine;
using System.Collections;
public enum AAMode {
FXAA2 = 0,
FXAA3Console = 1,
FXAA1PresetA = 2,
FXAA1PresetB = 3,
NFAA = 4,
SSAA = 5,
DLAA = 6,
}
[ExecuteInEditMode]
[RequireComponent (typeof(Camera))]
[AddComponentMenu ("Image Effects/Other/Antialiasing")]
public class Antialiasing : PostEffectsBase {
public AAMode mode = AAMode.FXAA3Console;
public bool showGeneratedNormals = false;
public float offsetScale = 0.2f;
public float blurRadius = 18.0f;
public float edgeThresholdMin = 0.05f;
public float edgeThreshold = 0.2f;
public float edgeSharpness = 4.0f;
public bool dlaaSharp = false;
public Shader ssaaShader;
private Material ssaa;
public Shader dlaaShader;
private Material dlaa;
public Shader nfaaShader;
private Material nfaa;
public Shader shaderFXAAPreset2;
private Material materialFXAAPreset2;
public Shader shaderFXAAPreset3;
private Material materialFXAAPreset3;
public Shader shaderFXAAII;
private Material materialFXAAII;
public Shader shaderFXAAIII;
private Material materialFXAAIII;
public Material CurrentAAMaterial (){
Material returnValue = null;
switch(mode) {
case AAMode.FXAA3Console:
returnValue = materialFXAAIII;
break;
case AAMode.FXAA2:
returnValue = materialFXAAII;
break;
case AAMode.FXAA1PresetA:
returnValue = materialFXAAPreset2;
break;
case AAMode.FXAA1PresetB:
returnValue = materialFXAAPreset3;
break;
case AAMode.NFAA:
returnValue = nfaa;
break;
case AAMode.SSAA:
returnValue = ssaa;
break;
case AAMode.DLAA:
returnValue = dlaa;
break;
default:
returnValue = null;
break;
}
return returnValue;
}
public override bool CheckResources (){
CheckSupport (false);
materialFXAAPreset2 = CreateMaterial (shaderFXAAPreset2, materialFXAAPreset2);
materialFXAAPreset3 = CreateMaterial (shaderFXAAPreset3, materialFXAAPreset3);
materialFXAAII = CreateMaterial (shaderFXAAII, materialFXAAII);
materialFXAAIII = CreateMaterial (shaderFXAAIII, materialFXAAIII);
nfaa = CreateMaterial (nfaaShader, nfaa);
ssaa = CreateMaterial (ssaaShader, ssaa);
dlaa = CreateMaterial (dlaaShader, dlaa);
if(!ssaaShader.isSupported) {
NotSupported ();
ReportAutoDisable ();
}
return isSupported;
}
void OnRenderImage ( RenderTexture source , RenderTexture destination ){
if(CheckResources()==false) {
Graphics.Blit (source, destination);
return;
}
// .............................................................................
// FXAA antialiasing modes .....................................................
if (mode == AAMode.FXAA3Console && (materialFXAAIII != null)) {
materialFXAAIII.SetFloat("_EdgeThresholdMin", edgeThresholdMin);
materialFXAAIII.SetFloat("_EdgeThreshold", edgeThreshold);
materialFXAAIII.SetFloat("_EdgeSharpness", edgeSharpness);
Graphics.Blit (source, destination, materialFXAAIII);
}
else if (mode == AAMode.FXAA1PresetB && (materialFXAAPreset3 != null)) {
Graphics.Blit (source, destination, materialFXAAPreset3);
}
else if(mode == AAMode.FXAA1PresetA && materialFXAAPreset2 != null) {
source.anisoLevel = 4;
Graphics.Blit (source, destination, materialFXAAPreset2);
source.anisoLevel = 0;
}
else if(mode == AAMode.FXAA2 && materialFXAAII != null) {
Graphics.Blit (source, destination, materialFXAAII);
}
else if (mode == AAMode.SSAA && ssaa != null) {
// .............................................................................
// SSAA antialiasing ...........................................................
Graphics.Blit (source, destination, ssaa);
}
else if (mode == AAMode.DLAA && dlaa != null) {
// .............................................................................
// DLAA antialiasing ...........................................................
source.anisoLevel = 0;
RenderTexture interim = RenderTexture.GetTemporary (source.width, source.height);
Graphics.Blit (source, interim, dlaa, 0);
Graphics.Blit (interim, destination, dlaa, dlaaSharp ? 2 : 1);
RenderTexture.ReleaseTemporary (interim);
}
else if (mode == AAMode.NFAA && nfaa != null) {
// .............................................................................
// nfaa antialiasing ..............................................
source.anisoLevel = 0;
nfaa.SetFloat("_OffsetScale", offsetScale);
nfaa.SetFloat("_BlurRadius", blurRadius);
Graphics.Blit (source, destination, nfaa, showGeneratedNormals ? 1 : 0);
}
else {
// none of the AA is supported, fallback to a simple blit
Graphics.Blit (source, destination);
}
}
}