4 namespace UnityStandardAssets.ImageEffects
18 [RequireComponent(typeof (Camera))]
19 [AddComponentMenu(
"Image Effects/Other/Antialiasing")]
22 public AAMode mode = AAMode.FXAA3Console;
24 public bool showGeneratedNormals =
false;
25 public float offsetScale = 0.2f;
26 public float blurRadius = 18.0f;
28 public float edgeThresholdMin = 0.05f;
29 public float edgeThreshold = 0.2f;
30 public float edgeSharpness = 4.0f;
32 public bool dlaaSharp =
false;
34 public Shader ssaaShader;
35 private Material ssaa;
36 public Shader dlaaShader;
37 private Material dlaa;
38 public Shader nfaaShader;
39 private Material nfaa;
40 public Shader shaderFXAAPreset2;
41 private Material materialFXAAPreset2;
42 public Shader shaderFXAAPreset3;
43 private Material materialFXAAPreset3;
44 public Shader shaderFXAAII;
45 private Material materialFXAAII;
46 public Shader shaderFXAAIII;
47 private Material materialFXAAIII;
50 public Material CurrentAAMaterial()
52 Material returnValue = null;
56 case AAMode.FXAA3Console:
57 returnValue = materialFXAAIII;
60 returnValue = materialFXAAII;
62 case AAMode.FXAA1PresetA:
63 returnValue = materialFXAAPreset2;
65 case AAMode.FXAA1PresetB:
66 returnValue = materialFXAAPreset3;
86 public override bool CheckResources()
90 materialFXAAPreset2 = CreateMaterial(shaderFXAAPreset2, materialFXAAPreset2);
91 materialFXAAPreset3 = CreateMaterial(shaderFXAAPreset3, materialFXAAPreset3);
92 materialFXAAII = CreateMaterial(shaderFXAAII, materialFXAAII);
93 materialFXAAIII = CreateMaterial(shaderFXAAIII, materialFXAAIII);
94 nfaa = CreateMaterial(nfaaShader, nfaa);
95 ssaa = CreateMaterial(ssaaShader, ssaa);
96 dlaa = CreateMaterial(dlaaShader, dlaa);
98 if (!ssaaShader.isSupported)
108 public void OnRenderImage(RenderTexture source, RenderTexture destination)
110 if (CheckResources() ==
false)
112 Graphics.Blit(source, destination);
119 if (mode == AAMode.FXAA3Console && (materialFXAAIII != null))
121 materialFXAAIII.SetFloat(
"_EdgeThresholdMin", edgeThresholdMin);
122 materialFXAAIII.SetFloat(
"_EdgeThreshold", edgeThreshold);
123 materialFXAAIII.SetFloat(
"_EdgeSharpness", edgeSharpness);
125 Graphics.Blit(source, destination, materialFXAAIII);
127 else if (mode == AAMode.FXAA1PresetB && (materialFXAAPreset3 != null))
129 Graphics.Blit(source, destination, materialFXAAPreset3);
131 else if (mode == AAMode.FXAA1PresetA && materialFXAAPreset2 != null)
133 source.anisoLevel = 4;
134 Graphics.Blit(source, destination, materialFXAAPreset2);
135 source.anisoLevel = 0;
137 else if (mode == AAMode.FXAA2 && materialFXAAII != null)
139 Graphics.Blit(source, destination, materialFXAAII);
141 else if (mode == AAMode.SSAA && ssaa != null)
145 Graphics.Blit(source, destination, ssaa);
147 else if (mode == AAMode.DLAA && dlaa != null)
152 source.anisoLevel = 0;
153 RenderTexture interim = RenderTexture.GetTemporary(source.width, source.height);
154 Graphics.Blit(source, interim, dlaa, 0);
155 Graphics.Blit(interim, destination, dlaa, dlaaSharp ? 2 : 1);
156 RenderTexture.ReleaseTemporary(interim);
158 else if (mode == AAMode.NFAA && nfaa != null)
163 source.anisoLevel = 0;
165 nfaa.SetFloat(
"_OffsetScale", offsetScale);
166 nfaa.SetFloat(
"_BlurRadius", blurRadius);
168 Graphics.Blit(source, destination, nfaa, showGeneratedNormals ? 1 : 0);
173 Graphics.Blit(source, destination);