Possible noob queston here but I just don’t get shaders.
Which is faster, and are there better alternatives?
1:
SubShader {
LOD 400
Tags { "Queue"="Geometry+1" "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert addshadow
struct Input {
float2 uv_Tex1;
float2 uv_Tex2;
float2 uv_Tex3;
float2 uv_Tex4;
float2 uv_SplatMap;
};
sampler2D _Nor1;
sampler2D _Nor2;
sampler2D _Nor3;
sampler2D _Nor4;
sampler2D _Tex1;
sampler2D _Tex2;
sampler2D _Tex3;
sampler2D _Tex4;
sampler2D _SplatMap;
float4 _Color;
void surf (Input IN, inout SurfaceOutput o) {
half3 vSplat=tex2D (_SplatMap, IN.uv_SplatMap);
half4 vNotBlack=half4(1,1,1,1)-(vSplat.r)-(vSplat.g)-(vSplat.b);
o.Albedo = (tex2D (_Tex1, IN.uv_Tex1).rgb)*vNotBlack;
o.Albedo += ((tex2D (_Tex2, IN.uv_Tex2).rgb)*vSplat.r);
o.Albedo += ((tex2D (_Tex3, IN.uv_Tex3).rgb)*vSplat.g);
o.Albedo +=((tex2D (_Tex4, IN.uv_Tex4).rgb)*vSplat.b);
o.Emission=o.Albedo*_Color*.1;
}
ENDCG
}
2:
SubShader {
Tags { "Queue"="Geometry+2" "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert addshadow
struct Input {
float2 uv_Tex1;
float2 uv_Tex2;
float2 uv_Tex3;
float2 uv_Tex4;
float2 uv_SplatMap;
};
sampler2D _Tex1;
sampler2D _Tex2;
sampler2D _Tex3;
sampler2D _Tex4;
sampler2D _SplatMap;
void surf (Input IN, inout SurfaceOutput o) {
half4 vNotBlack=half4(1,1,1,1)-(tex2D (_SplatMap, IN.uv_SplatMap).r)-(tex2D (_SplatMap, IN.uv_SplatMap).g)-(tex2D (_SplatMap, IN.uv_SplatMap).b);
o.Albedo = (tex2D (_Tex1, IN.uv_Tex1).rgb)*vNotBlack;
o.Albedo += ((tex2D (_Tex2, IN.uv_Tex2).rgb)*(tex2D (_SplatMap, IN.uv_SplatMap).r));
o.Albedo += ((tex2D (_Tex3, IN.uv_Tex3).rgb)*(tex2D (_SplatMap, IN.uv_SplatMap).g));
o.Albedo +=((tex2D (_Tex4, IN.uv_Tex4).rgb)*(tex2D (_SplatMap, IN.uv_SplatMap).b));
}
ENDCG
}
1 Uses a temp var to store the image and reuses the var, 2 recalls the image for each drawcall as far as I know, but frankly I don’t know.
Any help much appreciated :).
James