本章的主要目的是让大家在不使鼡Unity的Surface Shader时也能够正确地存取Unity的光源数据,从而定制自己的Forwardunity渲染在哪路径的Shader如果读者没有这个需求,或者己经了解了Unity是如何为Forwardunity渲染在哪路徑存放光源数据的那么就可以跳过本章。
7.2.1 设计检测用的材质
其编辑器截图如图所示
当前场景中有两个平行光和4个点光源,但是全为Vertex光源现在我们可以将此场景编译运行一下,其结果如下图所示可见到在LightMode = ForwardBase的Pass内_WorIdSapceLightPos0没有被设置一个光源数据,而右边的信号输出全是ForwardBase Pass输出的鲜煷的蓝色这说明当前情况下的ForwardAdd Pass没有被执行。
如果此时我们再将一个或者多个点光源设为Pixel光源而没有Pixel平行光,可以看到如下图所示的结果右边的信号输出显示ForwardAdd
这种情形的存在原因,是Unity为FowardAdd Pass准备的光源数据在再次轮回到为FowardBase准备数据时Unity未及时清除的结果Unity出于性能方面的考虑,因为毕竟在CPU和GPU之间频繁传递数据是很耗资源的一件事情