Light(光照)
在真实场景中,一般存在两种类型的光照效果:直接光源和间接光源。
直接光源:顾名思义,就是光直接来自于一个光源(灯、太阳或其他)。
间接光源:是指光来自于另一个物体。
在Hierarchy视图点击右键可以看到该界面:
Directional Light:自然光,直接光源。
Unity3D中的直接照明主要来源于各种灯光物体,而灯光物体本质上是空物体加上灯光组件。直接照明可以产生阴影,但光线不会反射、也不会折射,但可以穿透半透明材质物体。
Type:灯光类型,所有类型的灯光都共用这个组件。
Color:灯光颜色,所有类型的灯光都共用这个组件。
Mode:灯光照明模式,每种模式对应Lighting面板中一组设定,Spotlight,Point Light,Directional Light共用这个组件。
Realtime:对应Realtime Lighting
Mixed:对应Mixed Lighting
Baked:对应Lightmapping Setting
Realtime Lighting是新出现的一种烘焙光照技术,它并不像传统的烘焙技术一样直接烘焙间接光照颜色和亮度信息到光照贴图上,而是烘焙物体和物体之间的关系信息,比如A面对B面有漫反射效果,B面对C面有漫反射效果等等。
这样一来,只要物体之间的关系不变(也就是所有的静态物体都不移动位置),就不需要重新烘焙,从而使得我们可以在场景中随意运用动态光源(dynamic lights)。
而传统的Lightmapping光照贴图方式则不支持动态光源效果(改变光源不会改变场景光照)。Realtime Lighting比Lightmapping要更耗费系统资源,所以手游上就不要考虑了。
Intensity:灯光强度,所有类型的灯光都共用这个组件。
Indirect Multiplier:在计算该灯光所产生的间接光照时的强度倍乘,所有类型的灯光都共用这个组件。
Shadow Type:阴影贴图的类型,Spotlight,Point Light,Directional Light共用这个组件。Hard Shadow和No Shadow对性能消耗的比较小。硬或软的阴影,将是由灯光所投射的。只适用于编译桌面目标程序(PC)。软阴影更为耗资源。3D物体的MeshRenderer组件上CastShadows可对单个物体控制是否有阴影,前提是灯光开了阴影。
No Shadows:无阴影贴图
Hard Shadows:硬阴影贴图
Soft Shadows:光滑阴影边缘(也就是阴影模糊效果)
Strength:阴影的黑暗程度,数值在0~1之间,1时阴影最明显,0时无阴影。
Resolution:阴影的分辨率。
Use Quality Setting:表示在游戏开始时根据玩家的选择来设置阴影质量。其他四个依次代表从低分辨率到高分辨率。阴影质量通过Edit→Project Setting→Quality来打开
Shadows:在当前质量下是不渲染阴影,还是只渲染硬阴影,还是软硬阴影都渲染
Shadow Resolution:在当前质量下阴影贴图分辨率,这就对应了灯光面板中的Resolution参数。
Shadow Projection:阴影贴图的投影方式,Close Fit方式会优化近处的阴影质量,缺点是运动状态下可能会出现一些波动,Stable Fit方式不会有波动,但质量比较差。有的时候阴影贴图会出错,比如无缘无故多出一条亮缝之类,通常可以选择切换到Close Fit方式来解决,如果不想切换的Close Fit方式,可以适当降低灯光阴影参数中的Normal Bias参数,或者将对应场景物体设置成双面显示。
Shadow Near Plane Offset:很近处不渲染阴影。
Shadow Cascades:阴影贴图叠加方式,可以是单层、2层或者4层。
Cascade Splits:不同层所对应场景区域的比例分配划分。
Shadow Cascades是一种阴影贴图算法,比如我们选择4层叠加,那么实际上会计算4次阴影贴图,每次对应距离摄影机一定距离范围以内的场景物体,而这个距离范围的划分就通过Cascade Splits中所显示的紫、绿、黄、红四种颜色区域所占比例来区分。紫色代表最近处的区域,而红色代表最远处的区域。紫色条越窄代表其对应的那一层阴影贴图所对应的场景区域越小,这样一来该区域的阴影贴图精度就很高了。
Bias:阴影偏移,通常适当增加这个值来修正一些阴影的artifact。值太小,物理表面会有自身阴影;当值太大,光源就会脱离物体。
Normal Bias:法线偏移,通常适当减少这个值来修正一些阴影的artifact(不同于Bias的使用场合)
Near Plane:阴影剪切平面,对于与摄影机距离小于这个距离的场景物体不产生阴影
Cookie:这个纹理的阿尔法(alpha)通道作为一个遮罩,使光线在不同的地方有不同的亮度。如果灯光是聚光灯或方向光,这必须是一个2D纹理。如果灯光是一个点光源,它必须是一个立方图(Cubemap)。相当于在灯光上贴黑白图,用来模拟一些阴影效果,比如贴上网格图模拟窗户栅格效果。
Cookie Size:缩放Cookie投影。只用于方向光。
Draw Halo:灯光是否显示辉光,不显示辉光的灯本身是看不见的
Flare:Flare可以使用一张黑白贴图来模拟灯光在镜头中的“星状辉光”效果
Render Mode:渲染模式
Culling Mask:这个用来照亮选择性的部分场景。
Point Light(点光源):点光源模拟一个小灯泡向四周发出光线的效果,点光源在其照亮范围内随距离增加而亮度衰减
Range:光线射出的范围,超出这个范围则不会照亮物体。除Directional外其他灯光共用。
Spotlight(聚光灯):聚光灯模拟一个点光源仅沿着一个圆锥体方向发出光线的效果,聚光灯在其照亮范围内随距离增加而亮度衰减。
Spot Angle:灯光射出的张角范围。灯光的聚光角度。
Area Light(区域光):
区域光模拟一个较大的发光表面对周围环境的照明效果,通常区域光的灯光亮度衰减很快,阴影非常柔和。unity3D的区域光仅在烘焙光照贴图时有效,并不像Maya的Area Lights一样能动态照亮场景。它只能作用于静态物体(通过在Inspector视图 > 勾选Static来设置),通过烘焙来生成光照贴图,从而减少了性能的开销。
Width:区域光宽度。
Height:区域光的高度。
Reflection Probe(反射探头):Reflection Probe
Unity3D中并没并真实的Raytrace反射,而是通过反射贴图来模拟所有的反射效果。
如果我们在场景中放置一个非常强反射的小球,我们就能看到这个小球上实际反射的是我们的Skybox,完全不会反射场景物体。这样一来不仅影响到场景中反光物体的反射正确性,同时也会严重影响整体场景的光照准确性。
我们可以为场景添加Reflection Probe来矫正不正确的反射贴图。
Reflection Probe可以看做是一个带有6个摄影机的点,它会渲染该点的6个方向(前后左右上下),将渲染结果拼成一个Cubemap,并应用给一个特定方框范围内的所有物体作为反射贴图。
对于比较复杂的环境,比如有多个区域的大房间,我们可以放置多个Reflection Probe并手动设置其影响范围。
Reflection Probe默认不会计算动态物体,仅计算烘焙物体,我们可以修改属性让其将动态物体也包括在内,同时还可以修改属性为Every Frame使其每帧更新以准确反射动态物体的运动过程,还可以增加Lighting Setting中的Reflection Bounces提高反射次数(这样就不会出现强反射物体在另一个反射物体中是黑色的情况了)。但要注意,这些修改都会占用更多的系统资源,尤其是每帧更新反射贴图这样的设置。
Light Probe Group(光照探头组):Light Probes
光照烘焙对于动态物体(Dynamic Object),也就是没有被设置成Lightmap Static的物体来说都是不起作用的,如果希望动态物体也能被正确的照明,则需要创建Light Probe Group。Light Probe可以被认为是在场景中的一个小“光源”,而多个Light Probe组成的网络,就是Light Probe Group。这些小光源通过烘焙得到场景中该点的亮度信息,然后整个网络用这个信息来照明动态物体。同一时间内只会有最靠近动态物体的那些Probes会起作用,而且Light Probe离运动物体越近,其照明效果越强。我们可以根据场景光照环境特征来设置合适的Light Probe Group。为场景添加Light Probe Group可以很好的将动态物体与静态场景融合,尤其是在光照环境复杂的室内场景中,尤其需要添加Light Probe Group。