您的位置:首页 > 其它

使用纹理制作特效 - 压缩和混合纹理贴图

2017-11-28 16:57 489 查看
Shader "TexBlending"
{
Properties
{
_MainTint("MainTint", Color) = (1, 1, 1, 1)

_ColorA("ColorA", Color) = (1, 1, 1, 1)
_ColorB("ColorB", Color) = (1, 1, 1, 1)

_RTexture("RTexture", 2D) = "" {}
_GTexture("GTexture", 2D) = "" {}
_BTexture("BTexture", 2D) = "" {}
_ATexture("ATexture", 2D) = "" {}
_BlendTex("BlendTex", 2D) = "" {}
}

SubShader
{
Tags
{
"RenderType" = "Opaque"
}

LOD 200

CGPROGRAM

#pragma surface surf Lambert
#pragma target 4.0

float4 _MainTint;

float4 _ColorA;
float4 _ColorB;

sampler2D _BlendTex;
sampler2D _RTexture;
sampler2D _GTexture;
sampler2D _BTexture;
sampler2D _ATexture;

struct Input
{
float2 uv_RTexture;
float2 uv_GTexture;
float2 uv_BTexture;
float2 uv_ATexture;
float2 uv_BlendTex;
};

void surf(Input IN, inout SurfaceOutput o)
{
float4 blendData = tex2D(_BlendTex, IN.uv_BlendTex);

float4 rTexData = tex2D(_RTexture, IN.uv_RTexture);
float4 gTexData = tex2D(_GTexture, IN.uv_GTexture);
float4 bTexData = tex2D(_BTexture, IN.uv_BTexture);
float4 aTexData = tex2D(_ATexture, IN.uv_ATexture);

float4 finalColor = lerp(rTexData, gTexData, blendData.g);
finalColor = lerp(finalColor, bTexData, blendData.b);
finalColor = lerp(finalColor, aTexData, blendData.a);
finalColor.a = 1.0;

float4 terrainLayers = lerp(_ColorA, _ColorB, blendData.r);
finalColor *= terrainLayers;
finalColor = saturate(finalColor);

o.Albedo = finalColor.rgb * _MainTint.rgb;
o.Alpha = finalColor.a;
}

ENDCG

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: