一、光照概述
1.基础概念
①直接光:光源直接照射在某一物体上的光
②间接光:光源反射或折射后,照射到某一物体上的光
③全局光照:直接光和间接光的综合效果(Unity中的全局光照控制,主要指间接光的启用和禁用)
④光照贴图:为了减少运行时的性能消耗,将静态物体所受的光照效果预先计算出来,以类似于贴图的形式呈现在物体表面
2.Unity项目的初始光照
新建一个项目后,Unity会自动提供以下几种光照:
①Directional Light:平行光源,类似于太阳光
②Environment Lighting:环境光,来自于天空盒
③Environment Reflections:环境反射光,来自于天空盒
以上是新建项目的所有光照来源,①是作为物体存在,②③则是作为环境存在,需要找到Window-Rendering-Lighting面板进行调整,将②③的强度系数全部调成0后,可以排除掉环境光的影响进行光照调试
3.动/静态物体所受光照
物体是否接受间接光的影响,取决于物体被标记为光照动态还是光照静态。默认情况下,我们在Unity中所创建的物体都是动态物体,可以将其标记为光照静态“Lightmap Static”(2018及以前版本)或“Contribute GI”(2019版),标记为光照静态的物体不仅可以接受间接光,其本身的颜色还会影响间接光的效果(即2019版本的,贡献全局光照)。以下为标记光照静态的两种方式
①动态物体:只受直接光影响,物体背向光源的面始终是黑的(见下图右侧物体)。注意,我们项目刚开始创建的动态物体,每个面都是亮的,是因为上文提到的②③环境光照射的结果。排除掉环境光的干扰后,可以看到物体只受直接光的影响,背光面绝对黑暗。
②静态物体:受直接光和间接光的综合影响,即受到全局光照影响(见下图左侧物体)。对于创建的动态物体,我们只需要将其标记为“Lightmap Static”(2018及以前版本)或“Contribute GI”(2019版),就可以将其设定为光照静态的物体。对于这些物体,在开启全局光的条件下,Unity会自动计算全局光对其的影响,由于间接光的效果都是在游戏运行前预计算的,而且每当修改过物体后,编辑器会自动更新物体光照,因此编辑Unity项目时,编辑器右下角常可以看到计算光照的进度条。
4.全局光照系统(GI,即Global Illumination)
Unity的全局光照系统分为两种:实时全局光照(Realtime GI)和烘焙全局光照(Baked GI)。
使用不同的全局光照,只需要将光源的模式调整为Realtime或Baked,然后在Lighting面板开启对应的全局照明即可。
(1)适用情景:
①Baked:适用于静态光源,一旦光源移动或旋转,就需要重新烘焙,因此游戏运行时光源无法变动。
②Realtime:适用于动态光源,光照的数量和类型、位置、方向和其他属性都可以更改,间接光照也会相应更新,因此可以用于模拟日升日落的光照动态变化。
(2)使用方式:
①Baked:在开启Baked GI的条件下,将光源设置为Baked,再将物体标记为光照静态,物体才能接受烘焙光照。(一旦禁用了Baked GI,Baked类型光源会自动转换成Realtime)
②Realtime:Unity中创建的光源默认都是Realtime类型,Realtime的直接光始终存在,而在启用Realtime GI的条件下,Realtime光源会产生间接光
③2019版本开始,Realtime GI被标记为弃用状态(原因不清楚),Unity建议使用Mixed Lighting(即Baked GI),Mixed Lighting提供了Realtime类型的直接光,而间接光通过烘焙或光照探针来提供。