遮罩纹理的作用
- 传统的遮罩纹理只是为了在同一个采样或者光照模型下,某些会被照亮的区域,我们并不希望他被完全照亮时,我们就会使用遮罩纹理进行调节。遮罩纹理就起到了一个遮罩的作用,让这些区域变的更亮或者更暗一点。
- 在目前的游戏项目中,遮罩纹理其实更像一个调节器,,更自由的控制颜色最终的生成,而不是仅仅根据模型去计算。给予美术人员更高的自由度。
- 纹理的每个像素都有四个通道,在现代项目中,这四个通道会被赋予不同的值。每个值都将在模型的采样或者光照计算中发挥一定的调节作用。比如调节光照强度,边缘光的强度,高光反射指数等等。
怎么在高光计算中使用遮罩纹理
- 我们将遮罩纹理像素的R通道,用来调节高光的指数
- 将计算出的高光乘以R通道的值,R=0的时候,模型的颜色计算不受高光影响,R=1的时候完全采用模型的高光计算
Shader代码
- 这里只分析一下片元着色中的高光计算模型
//计算半角高光
fixed3 halfDir = normalize(tangentLightDir + tangentViewDir);
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(tangentNormal, halfDir)), _Gloss);
//采样遮罩纹理R通道值,并且接受_SpecularScale高光强度影响
fixed specularMask = tex2D(_SpecularMask, i.uv).r * _SpecularScale;
//最终的高光颜色
specular *= specularMask;
总结
我们同样可以使用不同的通道去记录不同的模型调节系数。事实上很多大型游戏项目也在这么使用。而并不是完全使用一张纹理去调节一个属性,这是完全浪费的。