Part1.效果图
Part2.方法简介
渐变纹理是一种可以用来实现卡通渲染效果的技术,其原理十分简单,使用光照模型计算结果,在一个一维的渐变纹理上进行采样
以半兰伯特模型为例,其表达式为 0.5 * ( Normal · LightDirection) + 0.5,可以看到如果光照方向对于某顶点越接近于直射,其半兰伯特模型计算结果越大,越接近1,对应的在渐变纹理上采样得到的颜色结果也会越深,如果把采样纹理离散化,比如下图的模式
(取值越接近0越靠左,越接近1越靠右)
这样以来,连续的光照计算结果,在经过纹理采样后的颜色值将被离散化,从而模拟卡通风格的块状阴影和高光的美术风格
Part3.代码逐段分析
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex("Main Tex",2D) = "white"{} //主纹理
_RampTex("Ramp Tex", 2D) = "white" {} //渐变纹理
_Specular("Specular", Color) = (1,1,1,1)
_Gloss("Gloss", Range(8.0,256)) = 20
}
在属性块,需要额外定义一个渐变纹理,不要忘了在CG代码片中也要定义相同的变量
struct a2v{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
在顶点着色的输入结构体中,我们需要获取顶点位置&#x