材质叠加-shader

使用lerp 方法可以叠加两个材质。

Shader "Custom/UVAnim" {
    Properties{
        _MainTex("土地贴图", 2D) = "white" {}
        _Cloud("云朵素材", 2D) = "white" {}
    }
    SubShader{
        Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
        AlphaTest Greater 0.1

        Pass{
            // 使用Vertex and Fragment Shader可编程渲染管线
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
            // 为了引入系统自带的结构体appdata_base
            #include "UnityCG.cginc"

            // 声明参数
            float4 _Color;
            sampler2D _MainTex;
            sampler2D _Cloud;
            // 获取地球材质的纹理坐标
            float4 _MainTex_ST;

            // 定义输出结构体
            struct v2f {
                float4 pos : SV_POSITION; // 视口位置
                float2 uv : TEXCOORD0;  // 贴图纹理坐标
            };

            // 操作顶点  
            v2f vert(appdata_base v)
            {
                v2f o;
                // UNITY_MATRIX_MVP
                // model    从本地坐标 到 世界坐标
                // view     从世界坐标到相机坐标
                // projection 从相机坐标到屏幕空间
                // 使用mul转化为投影坐标pos
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                // 用于带材质的写法,获取纹理坐标
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
            }
            half4 frag(v2f i) : COLOR
            {
                // 移动地球材质的x
                float u_x = i.uv.x + -2 * _Time;
                float2 uv_earth = float2(u_x, i.uv.y);
                half4 texcolor_earth = tex2D(_MainTex,uv_earth);
                // 移动白云材质的x
                u_x = i.uv.x + -4 * _Time;
                float2 uv_cloud = float2(u_x, i.uv.y);
                half4 tex_cloudDepth = tex2D(_Cloud, uv_cloud);

                // 白色透明的点 * 包含cloud纹理的R通道的色值 = 带纹理的黑白点(RGB值一样,且值为x)
                // 因为A是0,所以其实这里白云是不可见的
                // 写法等同于float4(tex_cloudDepth.x,tex_cloudDepth.x,tex_cloudDepth.x, 0 * tex_cloudDepth.x);
                half4 texcolor_cloud = float4(1,1,1,0) * (tex_cloudDepth.x);
                // 地球与白云的纹理混合,很显然包括A通道,所以才能看到白云。
                return lerp(texcolor_earth,texcolor_cloud,0.5f);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值