AntiAliasingShader.shader 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. Shader "Custom/AntiAliasingShader"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Texture", 2D) = "white" {}
  6. }
  7. SubShader
  8. {
  9. Tags { "RenderType"="Opaque" }
  10. Pass
  11. {
  12. CGPROGRAM
  13. #pragma vertex vert
  14. #pragma fragment frag
  15. #include "UnityCG.cginc"
  16. struct appdata
  17. {
  18. float4 vertex : POSITION;
  19. float2 uv : TEXCOORD0;
  20. };
  21. struct v2f
  22. {
  23. float2 uv : TEXCOORD0;
  24. float4 vertex : SV_POSITION;
  25. };
  26. sampler2D _MainTex;
  27. v2f vert (appdata v)
  28. {
  29. v2f o;
  30. o.vertex = UnityObjectToClipPos(v.vertex);
  31. o.uv = v.uv;
  32. return o;
  33. }
  34. fixed4 frag (v2f i) : SV_Target
  35. {
  36. fixed4 color = tex2D(_MainTex, i.uv);
  37. // 取周围像素的平均值来模拟抗锯齿效果
  38. float2 uvOffset = 1.0 / _ScreenParams.xy;
  39. color += tex2D(_MainTex, i.uv + float2(-uvOffset.x, -uvOffset.y));
  40. color += tex2D(_MainTex, i.uv + float2(-uvOffset.x, uvOffset.y));
  41. color += tex2D(_MainTex, i.uv + float2(uvOffset.x, -uvOffset.y));
  42. color += tex2D(_MainTex, i.uv + float2(uvOffset.x, uvOffset.y));
  43. color /= 5.0;
  44. return color;
  45. }
  46. ENDCG
  47. }
  48. }
  49. }