Второй шейдер не слишком сложен, и его можно объединить с первым, просто используя код второго шейдера, чтобы изменить способ вычисления surf
первого шейдера fixed4 c
.
Вам также нужно будет включить "RetroAA.cginc"
и включить размер текстур основной текстуры в переменные шейдера.
Однако первый шейдер предполагает, что нет частичной прозрачности, ивторой шейдер требует этого, так что вы должны учесть это.Вам нужно будет использовать альфа-смешение, изменить RenderType
и Queue
на Transparent
и указать ZWrite Off
.
Вот то, что все это может выглядеть вместе:
Shader "Transparent/Cutout/Lit3dSprite" {
Properties{
_MainCol("Main Tint", Color) = (1,1,1,1)
_MainTex("Main Texture", 2D) = "white" {}
_Cutoff("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader{
// change RenderType and Queue to Transparent
Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane"}
Cull Off
ZWrite Off // Add this
LOD 200
// Enable Alpha blending here
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
// Enable Alpha blending here also
#pragma surface surf SimpleLambert alphatest:_Cutoff addshadow fullforwardshadows alpha:blend
#pragma target 3.0
#include "RetroAA.cginc" // Add this
sampler2D _MainTex;
float4 _MainTex_TexelSize; // Add this
fixed4 _MainCol;
half4 LightingSimpleLambert(SurfaceOutput s, half3 lightDir, half atten)
{
half4 c;
c.rgb = s.Albedo * _MainCol.rgb * (atten)* _LightColor0.rgb;
c.a = s.Alpha;
return c;
}
struct Input {
float2 uv_MainTex;
};
void surf(Input IN, inout SurfaceOutput o) {
// replace this line:
// fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _MainCol;
// with this
fixed4 c = RetroAA(_MainTex, IN.uv_MainTex, _MainTex_TexelSize); o.Albedo = lerp(c.rgb, c.rgb, c.a) * _MainCol;
o.Albedo = lerp(c.rgb, c.rgb, c.a);
o.Alpha = c.a;
}
ENDCG
}
Fallback "Transparent/Cutout/VertexLit"
}
Вам может понадобиться уменьшить Alpha cutoff
до нуля или другого низкого значения, чтобы АА работала хорошо.