颜色插值

通常,要在屏幕上绘制的输出中会有不止一种颜色。 组合两种颜色的一种简单方法是根据其他参数在它们之间进行插值。
本教程将基于简单的纹理着色器,但是您可以将该技术与包括表面着色器在内的任何着色器一起使用。
基于颜色的插值
我们实现着色器的第一个版本将基于值在两个纯色之间进行插值。 因此,我们现在不需要连接到uv坐标或纹理的变量,而是添加了第二个颜色变量和一个简单的值,该值将确定材质是否显示第一个或者第二个颜色。 我们将该混合属性定义为“范围”,以便在编辑器中获得一个不错的滑块。

//编辑器显示属性
Properties
{
   
	_Color("Tint",Color) = (0,0,0,1)
	_SecondaryColor("Secondary Color",Color) = (1,1,1,1) 
	_Blend("Blend Value",Range(0,1)) = 0 //0显示第一个颜色 1显示第二个
}
//两个颜色之间用来混合的值
float _Blend;
//纹理着色
fixed4 _Color;
fixed4 _SecondaryColor;
作为第一个版本,我们可以根据混合值将第二种颜色添加到第一种颜色中。
//片段着色器方法
fixed4 frag(v2f i):SV_TARGET
{
   
	fixed4 col = _Color+_SecondaryColor*_Blend;
	return col;
}

们已经可以看到颜色发生了变化,但没有更改为辅助颜色。 这是因为当考虑到辅助颜色时,主要颜色仍然存在(这类似于将两个不同颜色的光指向一个点)。为了解决这个问题,我们可以在增加混合值时减轻原色的影响。 混合值为0时,我们看不到任何第二色和所有的原色;混合值为1时,我们则看不到所有第二色,而看不到任何原色。 为了存档,我们将原色乘以1减去混合值,将1设为0,将0设为1。

//片段着色器方法
fixed4 frag(v2f i):SV_TARGET
{
   
	fixed4 col = _Color*(1-_Blend)+_SecondaryColor*_Blend;
	return col;
}

此过程也称为线性插值,并且hlsl内置了一个函数,称为lerp。 它需要一个值进行插值,要插值到的值以及一个插值。

//片段着色器方法
fixed4 frag(v2f i):SV_TARGET
{
   
	fixed4 col = lerp(_Color,_SecondaryColor,_Blend);
	return col;
}

完整的着色器如下

Shader "UnityShader/Blender_Color"{
   
	//编辑器显示属性
	Properties
	{
   
		_Color("Tint",Color) = (0,0,0,1)
		_SecondaryColor("Secondary Color",Color) = (1,1,1,1) 
		_Blend("Blend Value",Range(0,1)) = 0 //0显示第一个颜色 1显示第二个
	}

	SubShader
	{
   
		//这个材质完全不透明 并且与其他不透明的几何体同时渲染
		Tags{
   "RenderType" = "Opaque" 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值