unity的光源

光源类型
  • 平行光
  • 点光源
  • 聚光灯 spot light 可以用于表示由一个特定位置出发、向特定方向延伸的光,锥形区域的半径由面板的Range属性决定,而锥形体的张开角度由spot angle属性决定
  • 面光灯 area light
光源属性
  • 位置 position
  • 方向 direction
  • 强度 instensity
  • 颜色 color
  • 衰减 attenuation 到某点的衰减,与该点到光源的距离有关
shader实现
1
2
3
4
5
6
7
8
9
Pass{
Tags{"LightMode"="ForwardBase"}
CGPROGRAM
#pragma multi_compile_fwbase
#pragma vertex vert
#pragma fragment frag
//保证在shader中使用光照衰减等光照变量可以被正确赋值
ENDCG
}
notes

如果场景中有多个平行光,那么unity会选择最亮的平行光传递给BasePass进行逐像素处理,其他平行光会按照逐顶点或在Additional Pass中按照逐像素的方式处理,如果场景中没有平行光,那么base pass会当成全黑的光源处理。basepass处理的逐像素光源类型一定是平行光。可以使用_WorldLightPos0来得到这个平行光的方向,可以使用 _LightColor0来得到它的颜色和强度,衰减值为1