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

本文介绍了一种使用Shader实现的纹理混合技术,通过多种纹理输入和颜色混合,可以在游戏中创建复杂且变化丰富的地形效果。该技术利用了不同纹理图之间的线性插值来达到平滑过渡的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值