对于linghtmode==vertex的pass来说,最有效的读取光源信息的方法是从unity_LightPosition[4]和unity_LightColor[4]这2个数组中读取。
有几点要注意:
- 这2个数组中包含平行光信息和点光源信息;
- unity_LightPosition中光源的位置向量或者方向向量都是处于CameraSpace中的。
下面这个简单的shader将物体的颜色置为第一个光源的信息:
Shader "Custom/VertexSimple" {
SubShader {
pass{
Tags{ "LightMode"="Vertex"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
struct vertOut{
float4 pos:SV_POSITION;a
float4 color:COLOR;
};
vertOut vert(appdata_base v)
{
vertOut o;
o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
o.color=unity_LightColor[0];
return o;
}
float4 frag(vertOut i):COLOR
{
return i.color;
}
ENDCG
}
}
}