【Unity Shader】(7)渐变纹理 控制漫反射光照效果 (动漫风、插画风的理论)

本文详细介绍了如何在Unity Shader中利用渐变纹理来控制漫反射光照效果,创建动漫风和插画风的视觉体验。通过渐变纹理的色点突变和颜色过渡,实现独特的阴影和材质表现。文中还讨论了纹理选择的重要性,建议使用Clamp模式以避免颜色失真。此外,逐步解析了实现这一效果的Shader代码,包括Properties的声明、Pass的光照模式设置、顶点和片元着色器的定义等。

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

在Unity Shader中实现渐变纹理,并控制漫反射光照效果

回顾我们之前写过的基础纹理贴图,我们设置了一个固定的“BaseColor”来控制材质球的基底颜色。那有没有一种可能,让我们的材质球,根据不同阴影部分或者顶点信息,来改变我们的基地颜色呢?——答案是渐变纹理

渐变纹理

渐变纹理最早出现在Gooch等人在1998年发表的一片著名的论文《A Non-Photorealistic Lighting Model For Automatic Technical illustration》提出,作者提出了一种给予冷到暖色调(Cool-To-Warm Tones)的着色技术,来营造一种插画风格的渲染效果。

1
可以看出,上面三图是分别对于各自的渐变纹理进行的效果展示。最右侧的便是卡通风格的渐变纹理——该渐变纹理中的色点是突变的,且没有平滑的颜色过渡,以此来模拟卡通中的阴影色块。

纹理的选择

对于纹理的选择,我们这里并不是单纯的使用三个颜色来直接更改我们的颜色过渡。而是使用纹理的形式(将在后面使用颜色调整来实现)。而我们也知道,图片纹理的类型Wrap Type可以分为如下几种:
6
对于我们的渐变纹理,这里建议使用Clamp,而不是Repeat。
因为在接下来的代码,我们会使用fixed2(halfLambert,halfLambert)来对渐变纹理进行采样,但是使用Repeat将会超出[0,1]的范围,比如采样取值为1.0001后,经过[0,1]截取,就会变成0.0001,但是使用0.0001的值,将会得到纹理最左侧的颜色。而使用Clamp却不会发生这种事情。



代码实现

①在Properties之中声明如下属性:

Properties{
   
   
	_Color("Base Color",Color) = (1,1,1,1)
	_RampTex("Ramp Tex",2D) = "white"{
   
    }
	_Specular("Specular",Color) = (1,1,1,1)
	_Gloss("Gloss",Range(8.0,256)) = 20
}

其中RampTex就是用来存放我们的渐变纹理的,原理与基础纹理是类似的。

②声明Pass的光照模式

SubShader{
   
   
	Pass{
   
   
		Tags{
   
   "LightMode"="ForwardBase"}

③声明顶点着色器和片元着色器,再包含我们需要的Unity内置文件

#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"

④设置我们在Properties之中的变量类型

fixed4 _Color;
sampler2D _RampTex;
float4 _RampTex_ST;
fixed4 _Specular;
float _Gloss;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值