Shader "SuYou/CustomTerrain"
|
|
{
|
|
Properties
|
|
{
|
|
_Splat0 ("Layer 1", 2D) = "white" {}
|
|
_Splat1 ("Layer 2", 2D) = "white" {}
|
|
_Splat2 ("Layer 3", 2D) = "white" {}
|
|
_Splat3 ("Layer 4", 2D) = "white" {}
|
|
_Control ("Control (RGBA)", 2D) = "white" {}
|
|
}
|
|
|
|
CGINCLUDE
|
|
sampler2D _Splat0, _Splat1, _Splat2, _Splat3, _Control;
|
|
ENDCG
|
|
|
|
SubShader {
|
|
Tags { "SplatCount" = "4" "RenderType" = "Opaque" }
|
|
|
|
Pass {
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata_t
|
|
{
|
|
float4 vertex : POSITION;
|
|
float2 texcoord : TEXCOORD0;
|
|
float2 texcoord1 : TEXCOORD1;
|
|
};
|
|
|
|
struct v2f
|
|
{
|
|
half4 pos : SV_POSITION;
|
|
half2 uv_Control : TEXCOORD0;
|
|
half4 uv_Splat0 : TEXCOORD1;
|
|
half4 uv_Splat1 : TEXCOORD2;
|
|
#ifdef LIGHTMAP_ON
|
|
half2 lmuv : TEXCOORD3;
|
|
#endif
|
|
UNITY_FOG_COORDS(4)
|
|
};
|
|
|
|
|
|
half4 _Splat0_ST, _Splat1_ST, _Splat2_ST, _Splat3_ST;
|
|
v2f vert (appdata_t v)
|
|
{
|
|
v2f o;
|
|
o.pos = UnityObjectToClipPos (v.vertex);
|
|
o.uv_Control = v.texcoord;
|
|
|
|
o.uv_Splat0.xy = TRANSFORM_TEX(v.texcoord, _Splat0);
|
|
o.uv_Splat0.zw = TRANSFORM_TEX(v.texcoord, _Splat1);
|
|
o.uv_Splat1.xy = TRANSFORM_TEX(v.texcoord, _Splat2);
|
|
o.uv_Splat1.zw = TRANSFORM_TEX(v.texcoord, _Splat3);
|
|
|
|
#ifdef LIGHTMAP_ON
|
|
o.lmuv = v.texcoord1 * unity_LightmapST.xy + unity_LightmapST.zw;
|
|
#endif
|
|
UNITY_TRANSFER_FOG(o,o.pos);
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag (v2f i) : COLOR0
|
|
{
|
|
fixed4 splat_control = tex2D (_Control, i.uv_Control).rgba;
|
|
|
|
fixed3 lay1 = tex2D (_Splat0, i.uv_Splat0.xy);
|
|
fixed3 lay2 = tex2D (_Splat1, i.uv_Splat0.zw);
|
|
fixed3 lay3 = tex2D (_Splat2, i.uv_Splat1.xy);
|
|
fixed3 lay4 = tex2D (_Splat3, i.uv_Splat1.zw);
|
|
fixed4 resultColor;
|
|
resultColor.rgb = (lay1 * splat_control.r + lay2 * splat_control.g + lay3 * splat_control.b + lay4 * splat_control.a);
|
|
|
|
#ifdef LIGHTMAP_ON
|
|
fixed3 lm = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.lmuv));
|
|
resultColor.rgb *= lm;
|
|
#endif
|
|
|
|
UNITY_APPLY_FOG(i.fogCoord, resultColor);
|
|
return resultColor;
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
}
|
|
|
|
Fallback Off
|
|
}
|