shader 区域过度(SurfaceShader)

效果如图:
在这里插入图片描述
Dis能控制颜色过度的距离
StartPoint能控制颜色覆盖的高度
Tint能控制颜色,如图中的绿色,也可选其他颜色
UnderInfluence能控制颜色的深浅

代码:

Shader "Custom/11"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
		_Dis("Dis",Range(0.1,10))=1
		_StartPoint("StartPoint",Range(-10,10))=1
		_Tint("Tint",Color)=(1,1,1,1)
		_UnderInfluence("UnderInfluence",Range(0,1))=0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM

        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;
		fixed4 _Tint;
		half _StartPoint;
		half _Dis;
		half _UnderInfluence;

        struct Input
        {
            float2 uv_MainTex;
			float3 worldPos;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        UNITY_INSTANCING_BUFFER_START(Props)
        UNITY_INSTANCING_BUFFER_END(Props)

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
			float temp = saturate((IN.worldPos.y + _StartPoint) * _Dis);
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
			float clampTemp = clamp(temp, _UnderInfluence, 1);
			fixed4 color = lerp(_Tint, c, clampTemp);
            o.Albedo = color.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

由于这是根据世界坐标的y轴的值进行颜色覆盖的,所以物体的世界坐标的y值不一样的化,颜色覆盖物体的范围也不一样。

扩展:可将控制颜色的Tint改为一张纹理贴图,最后的效果就是纹理之间的融合了,有兴趣的可以自行去试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值