You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/Top Down/Standard Assets/Image Effects (Pro Only)/AntialiasingAsPostEffect.js

180 lines
5.3 KiB
JavaScript

2 months ago
#pragma strict
@script ExecuteInEditMode
@script RequireComponent (Camera)
@script AddComponentMenu ("Image Effects/Antialiasing (Fullscreen)")
enum AAMode {
FXAA2 = 0,
FXAA3Console = 1,
FXAA1PresetA = 2,
FXAA1PresetB = 3,
NFAA = 4,
SSAA = 5,
DLAA = 6,
}
class AntialiasingAsPostEffect extends PostEffectsBase {
public var mode : AAMode = AAMode.FXAA3Console;
public var showGeneratedNormals : boolean = false;
public var offsetScale : float = 0.2;
public var blurRadius : float = 18.0;
public var edgeThresholdMin : float = 0.05f;
public var edgeThreshold : float = 0.2f;
public var edgeSharpness : float = 4.0f;
public var dlaaSharp : boolean = false;
public var ssaaShader : Shader;
private var ssaa : Material;
public var dlaaShader : Shader;
private var dlaa : Material;
public var nfaaShader : Shader;
private var nfaa : Material;
public var shaderFXAAPreset2 : Shader;
private var materialFXAAPreset2 : Material;
public var shaderFXAAPreset3 : Shader;
private var materialFXAAPreset3 : Material;
public var shaderFXAAII : Shader;
private var materialFXAAII : Material;
public var shaderFXAAIII : Shader;
private var materialFXAAIII : Material;
function CurrentAAMaterial () : Material
{
var returnValue : Material = 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;
}
function 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;
}
function OnDisable()
{
if(materialFXAAPreset2)
Destroy(materialFXAAPreset2);
if(materialFXAAPreset3)
Destroy(materialFXAAPreset3);
if(materialFXAAII)
Destroy(materialFXAAII);
if(materialFXAAIII)
Destroy(materialFXAAIII);
if(nfaa)
Destroy(nfaa);
if(ssaa)
Destroy(ssaa);
if(dlaa)
Destroy(dlaa);
}
function OnRenderImage (source : RenderTexture, destination : RenderTexture) {
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;
var interim : RenderTexture = 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);
}
}
}