Unity使用着色器实现颜色渐变

效果演示:

在这里插入图片描述
当前效果需要自己手动写一个shader,效果与unity版本无关,模型没有特别要求

在unity创建一个SurfaceShader类型的shader,命名为CotrolGradient_3Color,双击进入vs进行编辑,shader内容如下:

Shader "Custom/CotrolGradient_3Color"
{
	Properties
	{
		[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
		_ColorTop("Top Color", Color) = (1, 1, 1, 1)
		_ColorMid("Mid Color", Color) = (1, 1, 1, 1)
		_ColorBot("Bot Color", Color) = (1, 1, 1, 1)
		_Middle("Middle", Range(0.001, 0.999)) = 1
		_test("Test", Range(0.001, 0.999)) = 1
	}
		SubShader
		{
		Tags {"Queue" = "Background"  "IgnoreProjector" = "True"}
		LOD 100
		ZWrite On
		Pass
		{
		CGPROGRAM
#pragma vertex vert  
#pragma fragment frag
#include "UnityCG.cginc"
		fixed4 _ColorTop;
	fixed4 _ColorMid;
	fixed4 _ColorBot;
	float  _Middle;
	float _test;
	struct v2f
	{
		float4 pos : SV_POSITION;
		float4 texcoord : TEXCOORD0;
	};
	v2f vert(appdata_full v)
	{
		v2f o;
		if (v.vertex.y > _test)
		{
			v.vertex.y = _test;
	}
		o.pos = UnityObjectToClipPos(v.vertex);
	o.texcoord = v.texcoord;
	return o;
	}
		fixed4 frag(v2f i) : COLOR
	{
		fixed4 c = lerp(_ColorBot, _ColorMid, i.texcoord.y / _Middle) * step(i.texcoord.y, _Middle);
	c += lerp(_ColorMid, _ColorTop, (i.texcoord.y - _Middle) / (1 - _Middle)) * step(_Middle, i.texcoord.y);
	c.a = 1;
	return c;
	}
		ENDCG
		}
		}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值