光照(Light)是场景的一个基础组成部分。mesh和纹理定义了场景的形状和外观,Light定义3D环境的色彩和气氛。
一个场景中可能会使用多个光照,使用多个光照可能得练习一下,然而效果会很棒的。
Light也是一种GameObject,其属性如下:
这样创建的光是实时渲染的,如果光线是确认不变的,那么可以使用LightMapping.
光照可以用来模拟阳光,燃烧的火柴光,手电筒,炮火,爆炸等。
Type,在Unity中有4种光照:
- 方向光(Directional light),放置在无限远处,影响场景中的所有物体,就像太阳光和月光。对GPU开销很小,
- 点光(Point light),射向所有方向的光都相同,就像电灯泡。对GPU开销一般,但是Point light的shadow开销很大。
- 聚光(Spot light),从一个方向射出一个圆锥体(cone),就像是车的前灯,手电筒。开销很大。
- 区域光(Area light),光从平面的一个矩形区域的一侧投射出,光会投射到光的范围内所有的物体上,只适用于光照贴图(lightmap) 烘焙。
矩形的大小由Width和Height以及平面的法线(Z轴的正方向)决定。
光由整个矩形表面发射出,所以来自受影响的物体的阴影比来自Point和方向光源的更柔软。
Range,光源到物体的距离,只用于Point Light 和 Spot Light。
Spot Angle,只用于Spot Light,表示圆锥体的的角度。
Color,光源的颜色。
Intensity,光的强度。Point/Spot/Area的默认是1,方向光默认是0.5。
Cookie,纹理的alpha通道,被用作于遮罩,通过光照投影,alpha mask调节光亮。如果光照是Spot或方向光,必须是2D纹理,如果是Point光,必须是Cubemap。常用于制作复杂的大气环境。但是VertexLit不支持Cookie.
Cookie Size,Cookie的投影的缩放级别,只用于方向光。
Shadow Type,光照会会投射No, Hard 或 Soft 的阴影 shadows。移动端不支持 Soft 阴影(开销很大)。
- Strength,阴影的黑暗程度。值在0到1之间。
- Resolution,阴影的细节级别。
- Bias,Offset used when comparing the pixel position in light space with the value from the shadow map. SeeShadow Mapping and the Bias Property below
- Softness,Scales the penumbra region (the offset of blur samples). Directional light only
- Softness Fade,Shadow softness fade based on the distance from the camera. Directional light only
Draw Halo,选中后,一个球形的光环将会被绘制在一个与Range相同大小的半径内, Halo与 Render Settings
Flare,在光源处闪耀的 Flare
Render Mode,光的重要性。影响光的保真度和性能,选项包括:
- Auto,运行时通过光的亮度和当前的质量设置确定。Quality Settings.
- Important,永远以逐像素的方式渲染。只在重要效果下使用(比如车的前灯)。
- Not Important,永远以最快的方式渲染,顶点/对象的光模式。
Culling Mask,用于选择性地从光的影响下排除一些对象。see Layers。
Lightmapping,Lightmapping 模式: RealtimeOnly, Auto 或 BakedOnly; see Dual Lightmaps .
Width,(Area lights only).
Height,(Area lights only)
性能考虑
Light可以通过两种方式渲染:
- 顶点光照,只计算模型顶点的光照,并通过模型的表面插值光照。
- 像素光照。通过每个屏幕像素计算光照,所以开销很大,老显卡不支持。支持一些特别的特效,比如法线映射,light cookie和实时阴影。
光照是渲染速度的重要影响因素,所以需要在光照质量和游戏速度之间做一个权衡。
提示
- 用了cookie的Spot lights 在制作从窗口进光效果时极其有用。
- 低强度的 point lights 可以很好地提供场景深度。
- 要用 VertexLit shader 做到性能最好。此 shader 只用顶点 lighting 在低端显卡上。
- 自动地光照可以通过光照贴图投射动态阴影,而不用添加额外的光亮。