关于本文所提及的蒙版光照相关的前置内容,详见:EtherTK 解构《武士零》 - 蒙版光照
2D 法线贴图?
对于这篇博客的标题,其实还是犹豫了一会儿的,因为在 2D 渲染过程中,对于“能够对光照效果产生影响的贴图”这种东西的叫法,就算是工作组内的同学意见也不一致;但在我看来,如果我们把不使用法线贴图的 2D 纹理看做是法线方向始终沿 Z 轴方向的话(即在光照响应时法线对光强的贡献始终为 1),那么当我们使用另外一张蒙版遮罩贴图对这张目标贴图响应光照强度的区域进行限定时,这张蒙版遮罩贴图本身就已经起到了法线的作用——如果我们的这张蒙版遮罩贴图使用 Alpha 值来描述目标纹理的光照响应区域强度,那么目标纹理在渲染时计算每个像素的光照响应强度时,与传统法线贴图使用 RGB 分量来描述空间向量相似,使用 Alpha 通道的值直接作为衰减系数对光照效果进行计算,所得到的渲染结果是一致的;综上所述,这种蒙版遮罩与法线本质相同,所以将其称之为法线也并不为过。
——听起来可能有点绕,咱们先看一下这种法线贴图在实际渲染中的效果:
而渲染上图所使用的纹理原始素材如下:
我们可以很清晰地看出,在使用法线后,光照的响应强度开始受法线贴图的 Alpha 值影响,这不仅让光源的外形更加真实,也让被渲染的目标纹理在复杂光照环境下更加立体,让画面中的物体与光效“融合”到了一起,避免了使用贴图光的剥离感。
——那么,接下来的问题便是,如何由目标纹理得到对应的法线纹理?