当前位置:   article > 正文

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

unity渐变效果

在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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

②声明Pass的光照模式

SubShader{
   
	Pass{
   
		Tags{
   "LightMode"="ForwardBase"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
  • 1
  • 2
  • 3

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

fixed4 _Color;
sampler2D _RampTex
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/107230?site
推荐阅读
相关标签
  

闽ICP备14008679号