untiy 3d ShaderLab_第7章_ Forward渲染路径_4_Forward渲染路径总结

Forward渲染路径总结

        现在可以总结一卜适应于Forward渲染路径的ForwardBaseForwardAdd的情况。
7.4.1   Forward渲染路径下材质的适应性
       这两类Pass不能在Camera为VertexLit时被演染,但可以被渲染路径为ForwardDeferred的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来计算。

你可能感兴趣的:(3D,shaderlab,untiy,ForwardBase,Forward渲染路径)