Forward渲染路径总结
现在可以总结一卜适应于Forward渲染路径的ForwardBase和ForwardAdd的情况。
7.4.1 Forward渲染路径下材质的适应性
这两类Pass不能在Camera为VertexLit时被演染,但可以被渲染路径为Forward和Deferred的Camera渲染。
7.4.2 Unity如何为Forward渲染路径设置光源
在ForwardBase的Pass内,_WorldSpaceLightPos0和_LightColor0只会含有第一个Pixel行光的有效组合。在没有Pixel平行光时,_WorIdSapceLightPos0也可能含有1个Pixel点光源的位置数据,但是并没有有效的_LightColor0数据。在ForwardAdd内,_WorldSpaceLightPos0和_LightColor0只会含有Pixel光源,而且按照强度大小,平行光优先的顺序依次对每一个Pixe!光源执行一次。
在ForwardBase内,当没有ForwardAdd Pass时,unity_4LightPos[X, Y, Z]0 和 unity_LightColor[4]的组合含有点光源的数据,按照Pixel强度的原则排序,但不包含平行光;当有ForwardAdd时,则ForwardBase内unity_4LightPos[X, Y, Z]0只含有Vertex点光源。在ForwardAdd内,unity_4LightPos[X, Y, Z]0不包含有效数据。unity_LightAtten0数据则用在1.0和0.0之间切换,表示对应的unity_4LightPos[X,
Y, Z]0是否是有效的光源数据。
unity_LightPosition[4]在ForwardBase和ForwardAdd内从不包含任何有效数据,奇怪的是其x分量总是为1.0,只有在从Camera的VertexLit模式切换回Forward和Deferred模式时才会包含一些未及时清除的死数据。
讲了这么多,其实对于Forward渲染路径,你可以简单地使用UnityCG.cginc中的Shade4PointLights函数在ForwardBase中计算Vertex光源的照明。对于Pixel光源,你必须使用_WorldSpaceLightPos0和_LightColor0来计算。