Unity学习笔记(一)图形篇 1.光照

一、光照概述

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类型的直接光,而间接光通过烘焙或光照探针来提供。