5/27:怎么回事,爱言叶 IV 这么快就出了。但仔细一看,III 居然已经是 4 年前的事情了,时间过的是不是太快了啊。歌词里的各种串烧一点情怀都没有,串烧的歌我可是一直听到现在的啊。
5/29:学这个系列容易犯困。
所以今天我们要来学习 Creative Core 的第二部分 - 光照。
1. 光照基础
1.1 判断下图场景中有哪些光源
- 其实有三种:路灯,霓虹灯,和天空光。
1.2 光照是如何工作的
在 Unity 中,光照是对现实光照的模拟。即使你想做一个不遵循现实物理规则的光照效果,了解其在 unity 的工作模式也有助于你修改其表现。
1.2.1 光源的属性
所有的光照都有一个光源,所以我们先捋一捋光源的一些属性:
光源有三个关键属性:
- 形状:光源的形状会影响光照的方向。
- 大小:光源的大小会影响光照影响到的区域。
- 强度:光源的强度会影响光线能传播多远,以及有多亮。
上图中的两个光源的对比:
- 路灯的形状使其方向单一,且呈现一个圆形。月亮则是呈现一个球体发散的方向。
- 路灯比较小,因此只影响到小部分区域。月亮会影响整个地面。
- 但是路灯的强度足够让其照射的区域很亮。月亮的强度很高,但不够高,因为离地面太远。
1.3 我们如何感知光线
为了模拟光线,我们有一个光源 source,以及一个感受器 sensor(人眼,照相机等等)。
我们看到物品,是因为光线照在物体上,反射到人眼上,或者照相机的底片里。
1.4 如何改变光线的方向
光线有两种改变方向的方式:
- 反射
- 折射:白光只是一系列的光谱组合,当白光通过三菱镜后,不同颜色的光谱因为折射度不同被分开,我们就看到了彩虹。
在本教程中,主要集中于反射。
2. Unity 光照起步
打开教程演示项目,进入户外场景。我们这里选择上方工具栏里的 window->rendering->light explorer
这里可以看到场景中灯光的一些重要属性,以及可以在这里进行一些调整。 (一般建议是把这个 tab 放在左下角的布局)
然后,我们再看另一个窗口 window->rendering->lighting。
在这里,我们可以在 scene level 上进行设置。 (一般建议是放在右边,inspector 的附近)
2.1 直接光和间接光的区别
直接光就是光线从光源里出来,只经过一次反射后,到达 sensor。
间接光就是一些反射多次的光线,或者非太阳直射的天空光(因为已经在云层里反射过了)。
2.2 全局光照(Global illumination,也称 GI)
在游戏引擎中,全局光照包含直接光和间接光,用于模拟真实光照。
Unity 中有两种 GI 系统:烘焙 GI 系统和实时 GI 系统。(才怪,接着看吧)
2.2.1 烘焙 GI 系统
烘焙 GI 系统包括:
- Lightmapping(光照贴图):看名字也知道这和贴图相关。其实原理很简单,就是预先计算好光照的信息(也就是场景上各表面上光照的强度等信息),储存在 texture 上,这个 texture 就叫做 lightmap。Unity 的 GI 系统有一个专门的 lightmapping 系统叫做 progressive lightmapper(渐进式光照贴图,也称 PLM)。
- Light Probes(光照探针):光照贴图是完全静态的,而光照探针则是用来处理部分动态的光照效果。
- Reflection Probes(反射探针):用于模拟更真实的反射。
unity 里所有的 pipeline 都支持烘焙 GI 系统。
2.2.3 实时 GI 系统
Unity 目前根本没有一个成熟的实时 GI 系统。我就说教程写的这么模糊,各种已废弃,或者废弃后又重新捡起,却又加了一句 2024 年前还要再次废弃是在搞什么。官方手册含糊其辞,网上也找不到说法。结果搞半天根本就没有一个成熟的系统,只有一个不知道会不会被废弃的功能。
现在确实是有一个叫做 enlighten real-time GI 的功能,不过这个功能即将在 2024 LTS 废弃。现在有,只是为了在替代品出来之前,让你能用上实时的间接光照而已。
2.2.4 注意 enlighten real-time GI 和 enlighten baked GI 的不同:
前者是这个东西:
- 没错,根本就没写 enlighten 这个单词,但是官方手册上叫这个功能为 enlighten real-time GI,非常迷惑。
不开启的话,unity 就只会计算实时的直接光照,开启的话 unity 就会自动计算实时的间接光照。此外,开启这个之后,light probes 的一些表现也会发生变化,等等。
(但是呢,这个功能即将在 2024 年废弃,可能 unity 官方觉得自己能在那之前做出一个类似于 虚幻5 的 lumen 那种全局光照系统出来吧)
后者则是 enlighten lightmapper: 这个玩意已经早就废弃了,留在这里只是为了一些兼容性考量。(HDRP 直接就删了)
你可真会起名字啊,unity。(辱骂)
real-time GI 和 lightmapper 没有冲突关系
当你勾选了 real-time GI 之后,只是会改变一些光照表现行为诸如动态的间接光照,以及 lightmapper 里的 light probes 的表现等,具体请看手册。
real-time lighting 和 baked lighting 又是另一个东西
即使我们不勾选 (enlighten) real-time GI,在 unity 中仍然同时包含 real-time 和 baked 光照。就像刚刚提到的,即使在 baked GI 系统中(也就是不勾选 (enlighten) real-time GI),虽然没有实时的间接光照,但我们有实时的直接光照啊,这依然是 real-time lighting,只不过系统不是 real-time GI。
也就是说 real-time lighting 与 baked lighting,和 GI 没有关系。GI 是对一个整体光照系统的表现的设置(所以叫全局)。real-time lighting 和 baked lighting 则是具体到实际游戏的时候的表现,只是用于描述光照的信息在什么时候计算而已。
unity 里,不同物体可以应用不同的计算方式,可以有的用 real-time lighting,有的用 baked lighting。
2.3 real-time lighting 和 baked lighting
unity 里,real-time lighting 指那些在运行时计算的光照,每一帧都会重新计算光照信息。因此移动物体的时候,光照效果也会跟着改变。
但是 real-time 的性能消耗较大,因此有些情况我们会提前计算好光照信息,存储在 lightingmap 上。运行时直接使用即可。
把光照信息储存为 lightmap 这一行为叫做烘焙(baking 或者 lightmapping)。在现版本的 unity 中,我们使用 PLM(progressive lightmapper)来计算光照贴图。
不过问题在于光照效果并不会发生变化,移动光源,光还照在之前的地板上。
3. directional light(定向光) 和 skybox(天空盒子)
当我们新创建一个 unity 项目的时候,sampleScene 里可以看到一个蓝色的天空,此外,场景中有一个物体叫做 directional light。
3.1 光源的种类
照明设计的一个初始步骤是识别光源的种类,光源分为:
- 自然光(natural lighting):通常是太阳或者月亮。
- 模拟照明(motivated lighting):模拟真实物理世界的光。如路灯,车头灯等。
- 主光照(key lighting):通常不知道光源是啥,但是聚焦于场景中某个处于焦点中的物体上。(也就是摄影中的主光灯)
- 环境光(ambient lighting):在 unity 里也被叫做 diffuse environmental lighting。也是来自于一个不确定光源的光。
还有更多种类的光,但本教程只涉及这几类,在设计照明的时候,可以从这几个角度出发来想。(可以参考影视照明)
3.2 配置定向光
实际上,directional light 正是模拟自然光,模拟太阳光和月亮光的。
之所以叫定向光,因为光线全都是平行的直线,正如太阳光一样(虽然太阳本身是个点光源,但是由于太大了,照在地球上就是个平行光线)
gizmos 上也展示出了这一平行的特性,还会告诉你光线的朝向:
- 定向光线的位置是无所谓的,结果都一样,毕竟是自然光。
- 不过方向是有用的,可以改变光线的方向。
3.3 一些高级用法
定向光也有一些别的用法,诸如多个定向光,昼夜交替等等,这些不会在本教程中涉及到。
3.4 天空盒基础
在 unity 中,天空背景使用的是一种特殊的材质来创建的,叫做 skybox。skybox 是在不同面上有着不同的 texture 的立方体。
当你选择用 skybox 来渲染天空的时候,unity 会先把整个场景放在一个立方体中。unity 会最先渲染这个立方体,因此场景中的所有东西都被渲染在 skybox 前面(所以 skybox 能作为背景)。
unity 尽管只提供了一个蓝色的天空,但你可以让其包含一些远景特征来增加深度和空间感,诸如:
- 背景里放一些远处的山水。
- 放一些建筑物。
skybox material
skybox 的材质比较特殊,需要使用专门的 skybox shader,skybox shader 分为两类:
- Textured:使用一个或多个 texture 来生成 skybox。
- Procedural:使用材质上的属性来生成 skybox。
3.5 创建一个新的 procedural skybox
这里我们创建一个自己的 skybox 来试试:
- 创建一个 material。
- shader 改为 Skybox Shader/Procedural。(其他 3 个都属于 Textured 类)
- 赋予给 lighting->environment->skybox material。
然后我们来调整各个属性来看看其表现:
- sun:可以看到天空中有一个太阳,这个属性只会影响这个太阳的大小,并不会影响光照效果。
- atomosphere density:大气层密度,这个属性越高,大气层吸收的光线就越多。
- color tint 和 Ground:改变天空和地面的颜色。
- Exposure:调整天空盒的曝光,越高就越亮。
4. 添加其他光源
刚刚我们创建了自然光,现在我们要给场景中添加一些其他光源了。
4.1 点光源和聚光灯 motivated lighting
这里介绍另外两种光源类型:point light 和 spot light。效果很明显,拖出来看一看就知道。前者是个发散的光源(如灯泡等),后者是一个圆锥型(如舞台灯,手电筒)。
一些属性的效果:
- range:光线能传播到多远。
- itensity:有多亮。
- indirect multiplier:间接光每次反射后强度的改变。如果低于 1,则每次反射后强度会变低(这也是真实世界的情况),如果高于 1,则每次反射后强度会变高。(不符合真实物理规则)
- color:顾名思义。
4.2 光和颜色如何运作
让我们来看看光和颜色运作的物理科学。
4.2.1 我们如何感知颜色?
虽然这些都是初中学过的。但不妨再回忆一下。
太阳光是白色的,而这是所有光谱颜色混合在一起,被人眼感知的结果。而一个黄色物体,是因为它吸收了除了黄色光以外的所有颜色。
4.3 检查色彩空间
如果出现灯光的亮度不成比例的话,可以去检查是否为线性色彩空间。
URP 中,默认是线性色彩空间。
普通模板中,是 gamma 色彩空间。
gamma 色彩空间是对人眼进行调校的结果,而线性空间则是更精确没有校正的结果。具体可参阅手册。
切换色彩空间
Edit->Project Setting->Player->Other Setting->Color Space。
4.4 配置环境光
环境光是没有特定来源的光。Unity 的环境实时光照会被计算存储在 lightmap 里。
前往 lighting -> environment ,之前我们在这里设置过 skybox material。现在我们关注 environment lighting。
skybox 环境光
可以看到 environment->source 现在被设置为 skybox,这表示环境光由 skybox 提供。这一做法一般来讲简单有效。 下面的 intensity mutiplier 可以调整环境光的强度。
注:物体想要被计算环境光贴图,需要事先被设置为 static 才行。因为要保证在运行的时候不会乱动。
gradient 环境光
将 source 改成 gradient。
- sky color:天空的环境光,影响物体上方的光照颜色。
- equtor:附近的环境光,影响物体周围的光照颜色。
- ground:地面的环境光,影响物体下方以及周围的光照颜色。
color 环境光
简化的 gradient 环境光,影响物体所有表面的光照颜色。
5. 配置场景中的阴影
阴影和光照如影随形。
5.1 配置 render pipeline asset
在 unity 中,所有的阴影被储存在一个叫做 shadow map 的 texture 里。这个 texture 的分辨率越高,则阴影越清晰。当游戏渲染的时候,阴影会被渲染在画面之上。
我们首先去在 render pipeline asset 里设置阴影的总体效果:
来看一下这些配置:
- max distance:顾名思义,就是设置阴影离照相机多远的时候才会被渲染。越大,画面中阴影就会越多,越小就越少。除了性能考量,还会有一些特殊 artstyle 的需求。暂且不表。
- 最下面有两个 bias,depth bias 和 normal bias,这两个是为了解决阴影失真的情况(shadow acne)。有时候阴影和光照的位置并不对,或者会有阴影中夹杂着光照的情况,这种情况叫做阴影失真,具体可以参考这个知乎问题。
- soft shadows:勾选后,会进一步处理阴影,让阴影看起来更平滑。不过现在设置不一定能看到效果,为什么要下一小节再讲。
- cascade count:这个属性控制 shadow cascade(阴影级联)的数量。摄像机近处的阴影比远处的阴影分辨率更低,会有一些明显的锯齿产生,这一情况被叫做透视阴影(perspective aliasing)。解决这一现象的方式就是 shadow cascade。增加 cascade count 可以有效改善近处阴影的分辨率。(不过阴影级联只对定向光有效)
阴影级联(shadow cascade)
我们再细讲一下阴影级联吧。也可以参阅 unity 手册上的该部分。
首先我们看一下透视阴影的表现:
B 处比 A 处锯齿更多。这是因为这两个地方用的是同一个阴影分辨率。当然,你可以直接通过增加阴影的分辨率来完成这一效果,不过这样性能消耗就比较大,因为远处用不到这么高的分辨率。
在说解决方案之前,我们来解释一下这个现象的原因。
这是因为在 unity 中,我们的摄像机是应用了透视效果的视椎体。也就是近大远小。远处的大物体和近处的小物体是一样的尺寸,如下图:
上图显示的是实际场景的尺寸大小,可以看到这个球非常大,摄像机的视椎体投射到后面的时候已经非常宽了。读者可以试想一下现在摄像机屏幕的样子是什么样的,实际上,上图红色实现部分的梯形中,左边和右边在摄像机眼里是一样的长度的。
那么,这种情况会造成什么问题呢?我们再考虑一下阴影贴图的情况:
- 首先我们要知道,这一帧,摄像机会并根据设置的阴影分辨率来读取阴影贴图,然后渲染到画面上。
- 然而,上图中可以看到(假设背景的格子是阴影贴图),远处的地方读取了 20 个格子的阴影数据。因此效果非常好。而近处只读取到了 4 个格子的阴影数据,因此很模糊。(因为在屏幕中都是一样的大小,你把 4 个格子部分的阴影放大 5 倍来看,自然分辨率就会很低了) 解决这一问题的其中一种方案是使用 soft shadws 或者增加阴影分辨率:
- 也就是把以上的格子直接增加 5 倍密度,让 4 个格子的部分拥有之前 20 格子的质量,当然就能解决。不过还是那句,这样性能消耗过大。远处根本不需要这么高的分辨率。
另一种方式就是使用 shadow cascade,其实就是讲视椎体分成多个部分,提高近处部分的分辨率:
- 左边近处部分应用了更高的分辨率。
- 这也是可以理解的,近处的物体自然需要更高的分辨率来提高真实感。
- 提高级联数量(cascade count)会增加分割份数,会更真实平滑,当然也会提高性能消耗。不过无论如何,这也比直接提高总体阴影质量要好。
总结
虽然理论说的很复杂的样子,但实际上很好理解。把一个分辨率低的图缩小就会感觉比较清晰(对应在游戏中,就是屏幕远处的地方)。因此我们让远处的图分辨率还是那么低,但是近处的图分辨率提高。
5.2 设置定向光的 soft shadow
我们在 pipeline 里设置了 soft shadow,但是这个是一个全局的设置。具体到每个光源产生的阴影还是要各自配置的。也因此为什么刚刚勾选后,不是所有的阴影都改变了。
我们可以去到 directional light 里看看,有一个 shadow type 的选项:
可以看到我们给定向光设置的还是 hard shadow,自然全局开不开 soft shadow 和它也没有关系了。我们改成 soft shadow,就可以看到软阴影的效果。下面还可以看到一些别的设置,都是对单独光源阴影的设置。
同理,也可以根据自己喜好单独更改那些 motivated lighting 光源的阴影效果。
注:软阴影虽然比起级联阴影还是要多消耗性能,但比直接提高阴影分辨率还是要好一些的。如果对边缘清晰度没那么高的要求的时候可以开。
5.3 后处理(post processing)
就像是在拍照之后,发现照片与实际的颜色光照效果有区别,想要使用滤镜来弥补或者提高表现力。这种就是后处理,不过现代照相机一般直接提供比较简单的一键处理效果。如果用过 LR 这种软件来处理相片的话,会知道专业的后处理其实包含很多种属性的调整。
不过,具体的后处理之后会单开一篇文章来讲,这里就不说了。
不过教程给的示例场景中已经有一个叫做 postprocessing 的物体,可以点开看看试试。
6. 烘焙光照贴图
之前我们做的都是实时光照,现在开始试着烘焙光照。这个学完之后,我们就学完了基础的户外光照知识了。
然后我们在稍微提一下实时光照和烘焙光照:
- 实时光照会在每一帧重新计算,会根据光源的位置和物体的位置来计算。比较消耗性能。
- 烘焙光照则是预先计算好光照,运行的时候 unity 无需计算,而只需要把贴图映射到场景中。烘焙光照自然也无法动态地发生变化。
- 计算光照的过程会为整个场景计算 UV 坐标(正如材质映射纹理的 UV 坐标一样)。这个特殊的纹理贴图被称为光照贴图,这一过程叫做 lightmapping 或者烘焙(baking)。
烘焙光照不仅高效,也会生成更加逼真的光效。(间接光照有了)
6.1 改变灯光模式(ligth mode)
在 unity 中,light mode 也就是 baked,real-time,mixed 这三种。
如果是跟着示例项目走的,目前场景中所有灯光应该都是 real-time。
- 去到定向光,把 light mode 改成 baked。
- 你可能会想把其他光源也用同样的方式改成 baked,但你还记得 light explorer 吗?这个时候使用 light explorer 其实更加方便。
6.2 把光源改为 static
虽然 light mode 改成 baked 了,但此时你移动光源,发现还是实时的。我们还有两步要走。
第一步是,如果要使用烘焙光照,首先我们要保证这个光源,以及照射到的物体不能移动,不然运行的时候就会露馅。因此我们需要把光源设置成 static。还有光源照到的物体也要同样设置为 static。(其实只要是在运行时保证不会动的物体,都应该设置为 static,不只是光照计算,也可以避免做一些别的不必要的计算)
- 把整个 environment 设置为 static。
- 把所有光源设置为 staic。
6.3 烘焙
第一步走完了,依然看不到效果,因为我们现在还没有开始烘焙呢,只不过是做好了烘焙的准备。
所以第二步就是正式烘焙光照了。
- 开始之前,我们先在场景里放一个光源,不要改成 static。再创建一个非 static 的 cube,放在非 static 光源之下,用来对比。 然后正式烘焙:
- 点击 lighting->scene->lighting settings->new lighting setting 创建一个新的光照设置。命个名,如 BakedLighting。
- 改变 Mixed Lighting->Lighting mode 为 baked indirect。
- 点击下方的 generate lighting,等待一段巨长的时间,下方有进度条。(如果太慢的话,可以把 PLM 设置成 GPU)
- generate 之前检查是不是该设置的都设置了,免得等半天发现一个物体忘了该 static 或者啥的,又要重来一遍。
6.3.1 测试:
- 移动静态光源,发现光照还在原地。
- 移动静态物体,发现光照永远在物体的固定位置上。
- 移动之前创建的非静态光源,发现光照是可以变化的。
- 观察刚创建的 cube,因为没有 static,虽然在光源下面,却是一个全黑的样子。(因为定向光也被我们改成 baked 了)
- 移动那个实时光源,发现这个光源可以照亮所有的东西,无论是不是 static。照在烘焙过光照的物体上会有光照叠加效果,只要不移动那个物体也不会显得违和。
6.3.2 结论
根据上面现象可以得到以下结论(这个结论只讨论在 baked 模式 + baked indirect 模式。如果是 mixed 模式效果会很复杂的):
- 光源被设置为 static,再点击烘焙之后,光源就可以说没用了,这个时候你把光源删掉,光照效果都还在。
- 没有设置 static 的物体上不会被烘焙光照贴图,只能被实时光源照亮。
- 实时光源不管你物体是啥,都能造成实时光照效果。 可以说,烘焙光照的效果就像是把光源给掐灭了,然后在 static 物体上画出一些亮光的颜色。
6.4 添加 area light
之前一直没有提到 area light,是因为 area light 只能被烘焙。area light 的形状是一个矩形或者圆形。
由于没有实时效果,因此很难调整,可以打开 gizmos 来帮助判断最后的效果。
6.5 mixed
light mode 里还有一种效果 mixed,也是之前一直不提。
mixed 如名字一样,介乎于实时和烘焙之间。根据设置有不同的效果,在 lighting->mixed lighting->lighting mode 中可以更改。不同的模式效果在下面有说明。
- baked indirect:就是之前烘焙的时候更改过的,现在知道为啥是放在 mixed lighting 下了吧。如果是 mixed 的光源,表现为实时的直接光 + 烘焙的间接光。如果是 baked 光源那就是全部烘焙光。这种模式适合中档硬件。
- subtractive:这种模式的话,mixed 光源同时烘焙直接光和间接光。但是如果光源下的物体是动态的话,会受到实时光照的效果,但是不会投射阴影,不过会有一个 directional light 投射下来的阴影。(表现为一个动态物体在一个 mixed 光源下,有实时光照,但是阴影却不是这个实时光照的阴影,而是定向光的阴影),专门为定向光空出一个位置是为了不让阴影显得过于奇怪,有些时候这种表现手法也是可以接受的。如果物体是静态的,那就和 baked 模式一个效果,当然静态物体反正也不能动不需要实时阴影。读者应该也能猜到,这种模式适合比较低档的设备。
- shadowmask:和 baked indirect 一样,属于实时的直接光 + 烘焙的间接光。但是会自动融合实时阴影和烘焙阴影。这种效果最真实,同时性能消耗最大。适合高档设备。
还想了解具体信息可以参考手册。不过只要遵循静态物体不要动,以及了解不同模式适合什么档位的设备,对于小项目来说足够了。
7. 使用 light probes(光照探针)来改善光照效果
假设我们有一个静态物体,我们首先想到的是使用烘焙光照。不过问题在于,物体是不动了,但你没法确保没有动态物体经过这里啊,人走过,汽车开过都应该有投射。但是难道因此我们就要屈服,改成实时光照吗?
不会,因为我们有 light probes。
7.1 什么是 lighrt probes
如果把光照贴图理解为物体表面的颜色信息的话,那么 light probes 就是光源和物体之间那段空间的光照信息。有了这个信息,有物体穿过这个空间的时候,就可以计算出光照信息了。在游戏运行时,如果有物体经过某个 light probe 附近(多个 probes 找最近的),那么就会用这个探针的信息来计算该移动物体的光照。
light probes 为什么有用
比起实时光照更高效,也更真实,又带有不错的动态光照信息(如果放置合理的话)。
light probes 一般用于静态光源+动态物体的情况。不过如果有些场景光源改变很大的话,也很有用。玩家也不想看到光源变了,动态物体还不变。
7.2 light probes 放在哪儿呢?
light probe group 组成 light probe groups。每一个 light probe group 里又包含多个 light probe,每个 light probe 都包含它和它周围的 light probes 之间的光照信息。
最简单的方式是在你想衡量的光照空间内(比如说路灯和其照射的范围内),组成一个普通网格形状。这个网格应该至少包含两个垂直层,因此也被成为 3D 体积。(3D Volume)。比如:
有了这么一个 light probe group,我们可以复制它,连在一起组成 light probe groups。
当然,不是说所有的 groups 都要一样。完全可以独立设定,某些地方可能光线变化比较大,就让探针密集一点。
听起来很复杂,也确实很复杂。但是可以帮助你有效地优化光照效果。
7.3 放置 light probes
那么,我们要自己试着放置了。
- 在 hierarchy 里新建 light->light probe group。
- 移到能看的到的地方,可以改变位置大小啥的。
- 点击 edit light probes(那个图标)
- 选择 select all,然后 deplicate selected,然后就可以拖动来扩展了。当然你要是愿意也可以一个一个拖。
- 我们让其布满我们想要抓取数据的空间。
- 记得要包裹住光源。
效果:
- 有一个问题,球体的所有面都发光了,但按理来说背面不应该发光。
- 我们可以尝试取消勾选 remove ringing,这个勾选上有可能会导致探针信息不对。一般是在 ringing 现象出现的时候才会勾上。
下面这个是错误示范:
- 没有光源的地方也有一大堆探针。
- 只覆盖了光源周围的空间,没有覆盖到下面的空间(光能照到的部分)。
- 因此可以看到球体并没有被照亮。把球体往上移动才会被照亮。
7.4 使用工具测试 light probes 的有效性
虽然拖一个球体来看也不错啦。但是 unity 有专门提供工具来进行测试。
可以在 light explorer->light probes 里看到探针的状态
还可以在 scene 上方的工具栏里切换 draw mode 为 contributors/receivers。(之前设置 wireframe 的时候用过) 不同的颜色代表不同含义写在右下角。/ 左边表示是否对 GI 有贡献,/ 右边表示是否接收 GI,如果有接收了哪里来的 GI。
看不到路灯是因为路灯和地面都是蓝色,换个角度就能看见了:
7.4.1 颜色的含义
- :因为球体是非 static 类型物体,对 lightmap 没有贡献。但是接收了 light probes 的光照信息。
- :static 物体,会参与 lightmap 的计算,同时也会接受 lightmaps 的信息。烘焙过的物体正常来说都应该是这个颜色。
- :该物体参与 lightmap 的计算,而且还能接收 light probes 的光照信息。
使用这个 draw mode 可以让你更好地分辨出场景中存在的问题,光照是否按照你想的那样运作。
7.5 其他光照设置
lighting-scene 窗口还有很多属性我们没用上,可以自己探索,以下是一些比较重要的属性:
- bounces:控制光照的最小和最大弹跳数。与间接光照有光,越多需要计算的也越多。
- lightmap resolution:顾名思义,分辨率。和阴影分辨率一样,越大越好。不过性能消耗也会越多。
- albedo boost:提高反射率,虽然这个一般是我们在 material 上控制的。但是我们也可以在光照这里总体再提升一下。
- indirect intensity:顾名思义,间接光的强度。
可以自己尝试改变一下看看效果,此外,鼠标移到属性上也会显示这个属性的解释。不过基本上来说,增加光照效果的都会同时增加性能消耗,这点需要注意。