ShaderLab学习小结(十四)点光源问题

  

之前在“ShaderLab学习小结(三)漫反射+高光+点光源”中
用了Shade4PointLights()函数来计算点光源的反射。
这个函数定义在unitycg.cginc中,其中用到的前八个参数来自于UnityShaderVariables.cginc。
在这个例子中,只一个通过就实现了平行光,点光源反射,以及高光反射。

  

后来在学习中,接触到另一种点光源反射的例子,用到两个,第一个通过实现平行光的,第二个实现点光源的

  
 <代码>材质“定制/TestLightColor0”{
  
  SubShader {
  通过{
  标记{“LightMode”=癋orwardBase”}
  CGPROGRAM
  # pragma顶点绿色
  # pragma片段的破片
  # include“unitycg.cginc”
  # include“lighting.cginc”
  struct v2f {
  float4 pos:位置;
  float3正常:正常;
  float3 wpo: TEXCOORD0;
  };
  v2f绿色(appdata_base v)
  {
  v2f o;
  o.pos=mul (UNITY_MATRIX_MVP v.vertex);
  o.normal=UnityObjectToWorldNormal (v.normal);
  o。.xyz wpo=mul (unity_ObjectToWorld v.vertex);
  返回啊;
  }
  fixed4碎片弹(v2f):颜色
  {
  float3 N=IN.normal;
  float3 L=(_WorldSpaceLightPos0) .xyz正常化;
  浮动ndotl=饱和(点(N, L));
  fixed4坳=_LightColor0 * ndotl;
  +=UNITY_LIGHTMODEL_AMBIENT上校;
  返回上校;
  }
  ENDCG
  }
  通过{
  标记{“LightMode”=癋orwardAdd”}
  混合alt=" ShaderLab学习小结(十四)点光源问题“> 
 ShaderLab学习小结(十四)点光源问题“> <br/>把两个球体放在同一个位置,分别单独显示<br/>上边的是两个通道出来的,下边的是一个通道Shade4PointLights出来的<br/>两个球体都反射了平行光和点光源,看上去两个的漫反射的效果基本一样<br/>下面的球体暗部边缘处更黑一些<br/>注:本例只做漫反射</p><h2 class=ShaderLab学习小结(十四)点光源问题