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))的值就越靠近光带的后面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值