Skip to main content

光照

这里有视频

欢迎来到本教程系列的第四课,本章节将为我们的房间创建合适的照明!

在之前的课程中,我谈到了寻找参考照片来影响纹理选择的重要性。作为初学者,您不应该尝试创造自己的风格,而应该尝试模仿已被证明有效的风格。例如,在我的"海上世界"房间中,我研究了海滩房子的照片,找到了我喜欢的元素,然后试图将它们融入到自己的场景中。这些元素包括色彩调性、大量使用白色和灰色、一些黑色的装饰以及浅蓝和米色的组合。

在创建自己的房间时,最好避免混合不同风格,在开始阶段至少要保持一致。例如,不要让纽约式的内部砖墙与佛罗里达西班牙风格的建筑相冲突。选择一种风格,并专注于其中的有效元素,以营造出所需的空间氛围。在这个教程系列中,我将采用极简主义的斯堪的纳维亚公寓风格,因为对于我们正在打造的小房间来说更为适合。同时,由于其简洁性,这种风格在3D模型中也相对容易实现。

总之,查看参考图像来指导您的建模工作、纹理选择,以及我们将在本节课末讨论的照明方面。

在寻找参考图片时,建议使用一些图片浏览网站,如 PinterestHouzz(国内推荐 花瓣网)。这些网站能够轻松搜索类似的室内设计,并保存您喜欢的图片。Houzz的一个优点是,通常会有每个住宅的多张图片可供查看。当您浏览斯堪的纳维亚公寓风格时,请留意一些使这种风格独特的特点:极简主义、内部结构和物体的几何形状,以及场景中几乎没有颜色。这种分析只是触及视觉组成的表面

如果想要了解更多相关知识,推荐观看 Blender Guru 关于颜色、构图和照明的视频。

额外的软件,比如 PureRefAllusion,可以用来查看和浏览保存在计算机中的参考图像。

另外,还有一些特殊技巧可以帮助你轻松调整材料,使其更符合你的喜好。比如,我在textures.com(需要账户)上找到了一种常见的石膏纹理,但觉得有点暗。针对这种材质,由于基础纹理缺乏细节,我可以将基础纹理与颜色分离开来,选择自己喜欢的油漆颜色,同时保留其他PBR地图的细节。如果不希望材料看起来太粗糙,可以减小法线贴图的强度。最后,为了获得正确的平铺,你实际上不需要打开单独的计算器,因为可以在框内进行自助计算。

照明

现在让我们谈谈照明。照明与我们的材质选择相结合,影响着场景的视觉效果。我们要做的是创建 baked lighting(预烘焙照明);这个操作会在你的计算机上预先计算照明效果,避免在玩家计算机上的实时光照计算,从而提高性能和照明质量。这是通过计算所有 static objects(静态对象)的照明,并将阴影烘焙到 lightmap(光照贴图)中来实现的。至于动态对象(比如角色),可以通过使用光探头来进行照明。

首先,确保场景中的所有 static objects(静态对象)都在 Inspector(检查窗口)中被标记为 Static(静态)(或者至少是要使用烘焙照明的静态对象,以便告知 Unity 我们希望这些对象使用预烘焙照明)。

将场景中所有光源设置为 Baked(烘焙)

然后,点击右下角的 auto-generate lighting(自动生成照明)或通过 Window>Rendering>Lighting(窗口>渲染>照明)打开 lighting(照明)窗口。可能会出现一个浮动选项卡,但你可以将其停靠在你喜欢的位置。个人建议将其放在右侧检查器的同一空间,这样可以轻松在这两个选项卡之间切换。

在“实时照明”下,关闭实时全局照明。不会在这里详细展开这一话题,因为这是一个初学者教程系列。然而,除非您明确知晓相关操作,最好禁用这一功能。

在“混合照明”下,启用“烘焙全局照明”,并将“照明模式”设置为“烘焙间接”。这意味着我们不会为动态对象提供实时照明,但这也是我们所需要的,因为实时照明会对性能造成一定压力。

现在让我们讨论光照贴图的设置。首先是光照贴图器选项,建议将其改为渐进式GPU。目前,GPU光照贴图器仍处于预览阶段,尚未完全准备投入实际应用。如果您在使用过程中遇到错误或故障,可以切换至渐进式CPU。然而,为了更快的迭代速度,GPU光照贴图器比CPU版本更快。

关于光照贴图分辨率,建议在您自己的场景中进行可视化,而不仅仅是简单解释。在场景视图中,点击右上角的下拉菜单,选择“烘培光照贴图”。您将看到光照贴图中纹理元素的可视化。光照贴图器的作用是为每个纹理元素计算光照并将其作为像素放入光照贴图中。完成烘焙后,您将看到结果,便于更好地进行可视化。

光照贴图分辨率以texels/单位表示。通过向左或向右拖动以减小或增加数值,您可以看到场景中纹理元素数量的变化。这个数值基本上代表我们希望为对象提供多少光照分辨率。较高的分辨率意味着更高的质量和更少的像素化,同时也意味着光照贴图将占用更多存储空间并需要更长的烘焙时间。建议将该数值设定为20,以便加快烘焙速度,最后再作出调整。

在对象的渲染组件中,可以调整其光照贴图比例。其他重要设置包括:

  • Prioritize view(优先查看):启用后,将优先烘焙场景选项卡中的视图。
  • Light bounces(光反弹):反弹次数越多越逼真。室外场景可能不需要太多反弹,而室内场景则需要。建议初始设置为2左右,直到最终烘焙完成后再逐渐增加。
  • Lightmap size(光照贴图大小):设置为最大值可以提高性能,因为光照贴图会减少。
  • Ambient Occlusion(环境光遮蔽):启用可生成逼真的环境阴影。

完成设置后,点击底部的 generate lighting(生成照明),然后等待。对于更大的场景可能需要一段时间,但由于我们的场景较小,使用GPU光照贴图器应该不会花费太多时间。现在您应该能够更好地理解烘焙光照的工作原理,可以在下一次烘焙前根据需要调整光照设置。

通过使用渐进式光照贴图器的 Prioritize view(优先查看)功能,可以在烘焙过程中预览结果外观及噪点的情况。

在场景中,合理添加灯光。右键单击层次结构中的对象,转到“照明”选项,您将看到Unity中四种不同类型的照明:

  1. Directional light(方向光):类似太阳,光线具有无限距离,阴影将始终保持平行。每个场景应最多只有一个。
  2. Point light(点光源):具有有限范围,在所有方向上都有光源。
  3. Spot light(聚光灯):有限范围锥形光源,角度在0-180度之间。
  4. Area light(区域光源):覆盖区域的平坦二维光源,仅用于烘焙,非实时。

对于我们的场景来说,点光源似乎是最合适的选择。添加一个新的点光源,并将其放置在靠近天花板的位置,但不要放在天花板内部,因为光源是从放置点模拟的。

点击 Bake(烘焙)。现在应该能够在木材上看到反射效果。但是,如果移动相机,反射效果不会随之移动。这是因为默认情况下,立方体贴图被投影为似乎来自无限远处的光线,对于室外场景是合适的,因为那里没有明显的视差。然而,对于室内场景,这样的投影方式会导致反射效果不正确。启用反射探测器的框投影可以解决这个问题,该方法将立方体贴图投影到反射探测器的边界,模拟视差,同时保持投影的清晰。这是室内空间的理想设置。

好的,现在我们已经为静态物体添加了灯光,那么动态物体呢?右键点击“Hierarchy”中的“Lighting”>“Light Probe Group”。它现在应该出现在你的场景中,像一个由8个球体组成的网状结构。每个球体都是一个探测器,对于每个探测器,Unity会计算它在该空间点上的阴影效果。当动态物体移动到光探测器之间时,它们会混合最近的光照数据。

如果你点击光探测器组,你应该在检查器中看到你可以按下一个按钮来切换探测器编辑模式。从这里,你可以点击并移动单个探测器,按住shift键点击它们以将它们添加到选择中,使用ctrl+d复制它们。现在我们的目标是使用光探测器填充房间。但是我们应该怎么填充呢?最简单的方法是在房间里填充探测器,就像一个3D网格,但是这样我们不会得到最准确的照明。放置光探测器的最佳方法是在照明发生变化的地方放置一个探测器!

让我们在明显的地方放置它们,比如阳光照在地板上的地方。就在地板上方,将光探测器放置在阳光的四个角上,然后在阳光外的四个角上放置光探测器。在窗户上也要这样做。现在将光探测器放置在场景中的其他光源周围,以及任何阴影的边缘。

在照明窗口的顶部,你会注意到环境照明,那里写着“Skybox”。这将决定用于场景回溯反射的立方体贴图,或者当物体超出反射探测器的范围时。现在,Unity会烘焙一个天空盒的立方体贴图,这不是我们想要的,因为如果所有物体都放在房间里,天空盒就不会是我们场景的适当反射。点击“Skybox”并将其设置为自定义。然后在项目选项卡中导航到反射探测器(它应该在“Scenes”>“Scene name”下),并将其拖入插槽中。

如果你再次查看斯堪的纳维亚风格的公寓,你会注意到很多公寓都没有人造光源。他们的照明来自外部,但不是直接光源,这会产生尖锐的阴影。

让我问你一个问题:当你在白天外面的时候,光是从哪里来的?显而易见的答案是太阳,它是地球上最强烈的光源,但事实是光来自四面八方。这就是为什么在晴朗的日子里,阴影中的表面会有蓝色的光晕,因为环境照明来自天空。

既然斯堪的纳维亚地区多云,我们可以肯定地说很多这些照片是在多云的日子里拍摄的,这就是为什么(以及可能的窗帘)照明是分散的。我们可以在Unity中复制这种多云天气的照明;这就是为什么照明选项卡中的环境照明变得非常重要。

默认情况下,环境照明的来源是天空盒。在下一课中,我将向你展示如何导入外部资产,包括一个多云的天空盒,但现在我们可以通过右键点击项目选项卡并选择“Create”>“Material”来创建自己的灰色天空盒。然后更改着色器为“Skybox”>“6-sided”并将颜色更改为稍微亮一点的灰色。现在禁用所有其他光源,点击“Bake”,你现在就拥有了美丽的漫射室内照明。如果你认为它有点暗,你可以增加间接强度,这将使天空盒变亮。这在物理上是不正确的,但我们是艺术家,不是科学家;我们不需要遵守物理定律,我们可以弯曲它们来满足我们的需求!

最后一个要提到的重要优化是遮挡剔除,它将通过不渲染不在玩家视野中的对象来提高世界的性能。转到“Window”>“Rendering”>“Occlusion Culling”并单击“Bake”。如果你点击“Visualization”选项卡顶部的“Visualization”,选择你的相机,移动它,你可以看到Unity现在如何绘制场景。

为了获得更好的遮挡剔除效果,右键点击“Hierarchy”>“Lighting”>“Occlusion Area”,然后调整这个体积以适应场景中玩家可能站立的地方。

最好在编辑场景中的静态物体时清除遮挡剔除数据,然后在上传之前进行烘焙。如果它没有正常工作(物体在应该仍然可见时消失),那么重新烘焙或者调整“Occlusion”选项卡中“Bake”下的设置。请注意,遮挡剔除仅影响物体的可视渲染,因此即使它们在视野之外,对它们的处理仍然会进行!

调整光源设置,以更高的设置再次烘焙,你的房间现在应该有美丽且性能良好的烘焙照明!下一课将讲解如何将外部模型添加到场景中。