Unity Shader入门精要 阅读笔记十

渐变纹理
不同渐变纹理所带来的效果不同。

纹理一

效果一
纹理二

效果二
首先从分析半兰伯特模型开始:
半兰伯特模型在之前计算光照的时候被应用,主要是为了解决blinn模型不能计算阴影面的问题,而这个问题的表述在于在计算光照的时候,算法直接将计算结果的负数剪掉,从而在背面其实也就不计算光照。

那么在半兰伯特模型中,采用了先缩放再平移的方式将本该在[-1,1]的受光照范围扩展到了[0,1]。这样的计算就能保证整个模型,包括背影都能受到光照。

在渐变纹理中,也引入了半兰伯特模型,这样的方法是为什么呢?首先看代码:

            fixed halfLambert = 0.5 * dot(worldNormal, worldLightDir) + 0.5;
            fixed3 diffuseColor = tex2D(_RampTex, fixed2(halfLambert, halfLambert)).rgb * _Color, rgb;
            fixed3 diffuse = _LightColor0.rgb * diffuseColor;

首先将发现和光照方向的点乘放置到[0,1]的空间中,然后将结果作为渐变纹理的UV坐标系取值。在这里因为UV坐标现在成了半兰伯特模型计算的结果,因此,会出现现在的颜色分层结果:色带前面的对应阴影部分,而越到后面对应光照强度越强。因为在片元着色器中是逐像素计算,所以每一个像素在光照中受光越强,那么对应halfLambert值越大,那么 tex2D(_RampTex, fixed2(halfLambert, halfLambert))的值就越靠近光带的后面。

猜你喜欢

转载自blog.csdn.net/u011618339/article/details/79372636