聚焦团队最佳实践:在 Unity 中制作可信的视觉效果

作为聚光灯团队的一员,我有幸参与了一些非常有趣的项目。Unity 的 Spotlight 团队与我们的客户一起开发游戏,而我的一项重要职责就是帮助开发人员实现他们的项目所需的外观和质量。我听到了很多来自整个行业的故事,并能发现内容创作者面临的共同问题。我曾参与过的几个项目都以相当逼真的视觉效果为目标。鉴于项目的美术内容,我们如何在 Unity 中制作一个看起来可信的场景?
要制作出可信的视觉效果,需要涵盖众多主题。在本篇文章中,我将讨论灯光和渲染设置。接下来,我还将与大家分享我们的聚光灯隧道示例场景,并介绍如何使用它来学习和实验。
了解如何使用 Unity 的渲染功能来逼真地模拟现实世界,将有助于您实现项目的视觉目标。
线性渲染模式
简单来说,Unity 使用物理上精确的数学方法进行照明和阴影计算,然后将最终输出转换为最适合显示器的格式。
指定伽玛或线性工作流程、
转到 "编辑">"项目设置 ">"播放器",然后打开 "播放器设置"。
然后转到 "其他设置">"渲染",将色彩空间更改为线性。
确定色彩空间应该是项目中最早做出的决定之一,因为它对最终的阴影和照明效果有重大影响。
渲染模式。
在聚光灯隧道示例场景中,我们使用了延迟渲染路径。这样,内容创作者就可以高效地处理多个动态光源,组合多个反射立方体贴图,并能够使用 Unity 2017+ 中现有的屏幕空间反射功能。
要进行设置,请转至图形设置 > 渲染路径或相机 > 渲染路径
有关渲染模式的更多信息,请参阅Unity 文档的这一部分。
高动态范围 (HDR) 摄像机。
与现实生活中一样,在渲染可信的照明时,内容创作者需要处理亮度高于 1(高动态范围)的照明值和发射表面。然后需要将这些值重新映射到适当的屏幕范围(这称为色调映射)。这一设置对于 Unity 摄像机处理这些高数值而不对其进行剪辑至关重要。
要启用此功能,请选择场景中的主摄像机,并确保在所选摄像机的 "检查器 "选项卡中勾选了 HDR。
HDR 光图编码。可选
Spotlight Tunnel 示例场景没有使用烘焙光照,但是如果您计划使用高强度(HDR)烘焙光照,我们建议您将光照贴图编码设置为 HDR 光照贴图,以确保烘焙光照效果一致。
可在 "编辑">"项目">"播放器设置">"其他设置">"光贴图编码"(仅限 Unity 2017.3+)下找到该选项。
有关 Lightmap 编码的详细信息,请参阅手册。
场景的色调映射器(后处理堆栈的一部分)。
要正确显示 HDR 灯光,需要在项目中启用色调映射器。
请确保先从 Asset Store 安装Unity Post Processing Stack(版本 1)。
在项目中创建一个 "后处理配置文件资产",并对其进行如下配置:
- 启用色彩分级>调色板 >ACES
(学院色彩编码标准) - 启用抖动。抖动可使场景减轻 HDR 场景 8 位/通道输出带来的带状伪影。现代引擎使用这种技术来规避 1600 万色输出的限制。暂时不对调色板中的其他设置进行调整。
- 选择 "主摄像机 "并添加组件 "后期处理行为"。
- 将之前创建的后处理预案分配给预案槽。 如果您想使用 Post Processing Stack 第 2 版,请参阅软件包的自述文件,因为它目前还处于测试阶段。
- 启用视口图像效果。
这样,您在使用场景视图时就可以一直看到色调图。
请注意,在色调映射场景中,高光表现和暗道值分离都有所改进。如果您看一下非色调映射的场景,就会发现高光部分并没有汇聚成统一的颜色(在本例中为微黄的灼热太阳)。
这种设置本质上是试图复制数码相机如何通过固定曝光(未启用曝光适应/眼睛适应功能)来捕捉场景。

至此,内容创作者已经完成了适当的基础场景渲染设置,可以为各种内容提供可信的效果。
Unity 可满足多种不同的照明策略/系统和项目方案。我们建议您查看我们有关照明模式和设置的大量文件,以了解所有不同的选项。
然而,为了实现快速迭代和简便性,响应式视觉反馈是必要的。
因此,聚光灯隧道示例场景使用了实时全局光照 (GI) 技术。这将为我们提供不错的镜面响应范围和良好的反弹照明,还能让我们随时更换灯光。
使用实时 GI + 灯光探头进行实时照明


回到照明本身,一个典型的场景,在白天,在室外区域,可以分为三个照明组成部分:
1) 半球(天空贡献)。
2) 直射光(太阳光+局部光)。
3) 间接照明(GI 照明)。
在这一阶段,内容创作者被假定拥有正确纹理的网格和已组装好的场景。
初始半球照明
室外照明的第一个组件是半球照明,在 Unity 中称为环境照明。这是天窗的别称。夜空的贡献极小,而白天的贡献则非常大。半球设置可在 "照明 "选项卡下找到(窗口 > 照明 > 设置 > 环境)。
首先,最好使用程序天空盒材质,而不是 HDRI 立方地图。在项目中创建一个新材质,命名为 SkyMaterial,然后将其设置为 Skybox / Procedural。

在 "照明 "选项卡 >"场景 "中将其指定为 "环境天空盒材质"。

此时,"场景 "已被点亮。有环境照明,但不完全是适当的半球照明。我们暂时不讨论这个问题。
定向光
典型的太阳光或月光是接近无穷远距离的光源,其光照方向与阴影平行。它们通常用定向灯来表示。

间接照明/全局照明。
单靠定向光和环境光是无法营造出可信的照明效果的。适当的半球照明需要天窗照明的遮挡。我们还需要模拟阳光从场景中的物体上反射出来的效果。目前,天空只为 "场景 "呈现单一颜色值,使其变得平淡无奇。这时需要使用实时全局照明或烘焙照明来计算遮挡和间接反弹照明。为此,请遵循以下步骤:
- 确保所有需要为实时 GI 或烘焙做出贡献的网格都标记了 "启用静态光影贴图 "和 "静态反射探针"。这些通常是大型静态网格。
- 然后,在 "照明 "选项卡 >"场景">"实时照明 "中启用实时全局照明(保持默认中等设置)。
- 点击 "生成照明 "或选中 "自动生成"。

哇,光照生成结束后,场景现在变暗了。更糟糕的是,场景中的一些元素显得格格不入--请注意背景上的电车和门。
场景中的静态物体目前有适当的半球遮挡和定向光的间接反弹响应,但其他物体缺乏适当的照明设置。
光探针和反射探针。
要让动态物体或非光贴图物体接受实时/烘焙全局光照,需要在场景中分布光探针。确保将场景中的灯光探针组有效地分布在动态照明物体所在或将经过的区域(如播放器)附近。在手册中了解有关光探针组的更多信息。
再次点击 "生成照明",如果选中了 "自动生成",则等待预计算完成。

有轨电车和背景门的接地较好,但反光看起来不合适。天空倒影遍布各处,并在隧道内显现出来。这就是反射探头的作用所在。根据需要在场景中有效地放置反射探头,以达到适当的覆盖范围。在上述场景中,主房间使用一个反射探头即可,每个隧道内部使用两个即可。
使用盒式投影的 128 像素 Cubemap 分辨率通常是典型情况下的良好基准,可保证内存和反射烘烤时间。
下面是有关 Reflection Probe 的更多信息。

现在,场景看起来有了适当的基础和凝聚力,这是可信场景的重要组成部分。但是,一切都比以前更加黑暗,质量也远远无法令人信服。
HDR 照明值
许多内容创作者没有意识到,实际上半球照明和太阳光都是非常明亮的光源。它们比数值 1 要亮得多。这就是 HDR 照明发挥作用的地方。
现在,先关闭定向光,然后将天空材质曝光设置为 16。
这样您就能很好地了解适当的半球照明对场景的影响。

事情开始变得可信起来。把这种状态想象成阴天,阳光完全散射在天空中,没有方向性的光线。
此时,您可以以更高的数值将阳光重新引入场景。首先试试强度 5。尽管太阳看起来几乎是白色的,但正确选择定向光的颜色非常重要,因为强烈的阳光所产生的间接色彩的影响会极大地改变场景的外观。

现在,太阳(定向光)看起来就像现实生活中的高能量光。此时此刻,"场景 "看起来相当可信。
屏幕空间环境遮蔽和屏幕空间反射
虽然 "场景 "照明目前看起来还不错,但您还可以为 "场景 "添加更多细节,使其更上一层楼。由于实时 GI 中设置的分辨率有限,要实现合理的性能,通常无法制作详细的闭塞效果。这就是屏幕空间环境闭塞可以提供帮助的地方。在 "环境遮蔽 "下的 "后期处理配置文件 "中启用 SSAO。本示例的设置为:强度 0.5、半径 1、中等采样次数(带下采样)、仅选中 "环境"。

虽然 SSAO 可以解决额外的环境光遮挡问题,但除了简单的反射探测外,反射的精确度还需要提高。
屏幕空间光线跟踪反射可以帮助改善这种情况。在后期处理配置文件中启用屏幕空间反射。

请注意,湿轨道左侧不再呈现明亮的反射,因为 SSR 为场景提供了更精确的屏幕物体反射。这两种后期处理效果都会在运行时产生性能成本,因此请明智地启用它们,并根据运行时的性能限制设置质量。
雾
在这一阶段,内容创作者已经在固定曝光的基础上实现了室外和室内数值的分离,这在一定程度上是可信的。在室内的暗处可以看到强烈的高光反射,而不是昏暗的浑浊值。

但是,尽管有很强的透视元素,场景前景元素和背景元素却没有显示出来。场景中细微的雾气可以产生巨大的差异,为场景增添立体感。

请注意,与零雾场景相比,前景栏杆的清晰度更高。
雾气在 "灯光 "选项卡 >"场景">"其他设置 "中启用。这里启用了 #6D6B4EFF、密度为 0.025 的指数雾色。在 Unity 2017 的延迟渲染中,如果没有自动激活雾,您可能还需要在后期处理配置文件中启用雾。
聚光灯/点光源
实时局部照明的主打产品是聚光灯和点光源。区域照明只能在烘焙照明时使用,除非您使用的是2018.1 测试版中引入的高清可脚本渲染管道(SRP)。在高清 SRP 模式下,可实时渲染新的区域灯光。
从根本上说,这两类灯都是从空间中的一个点发出光线,都受到射程的限制,聚光灯还受到角度的限制。有关照明的更多信息,请参阅Unity 文档的相关部分。
这两种灯的最大区别在于它们投射阴影和与饼干互动的方式。与聚光灯的单个阴影贴图相比,点光源的阴影贴图需要 6 个。因此,阴影投射点光源的成本要高得多,应尽量少用。
注意:烤灯不需要担心这个问题。
另一个区别是,聚光灯上的cookie 纹理是简单直接的二维纹理,而点光源则需要立方体贴图,通常在三维软件中制作。
光的颜色和强度
为灯光选择合适的颜色和强度时,需要遵循一些宽松的准则,以获得合理的效果。
在选择室内灯光的强度时,应尽量确保室内灯光的强度不超过太阳光的强度。根据场景的不同,这可能会造成不平衡的外观。

在这种 "样本场景 "设置下,天花板上不太可能有超过白天亮度的高亮度灯光。
选择颜色时,尽量不要完全忽略任何一个颜色通道。这样产生的光线很难汇聚到白点。

虽然从技术上讲这是一种有效的浅色,但左图中的浅色会从最终输出中去除所有蓝色。在 "场景 "中为基线设置一个有限的最终调色板并不是一个好主意,尤其是当你想在以后进行调色时。
发射表面
在 Unity 中,如果启用了实时 GI 或烘焙 GI,发射表面就能产生照明,从而产生区域照明效果。如果启用了实时 GI,这一点尤其有用。内容创作者可以修改发射面的强度和颜色,并立即获得反馈,前提是提前进行了预计算。

上图展示了天花板上的网格所产生的微妙漫射光。
Unity 旧金山 Spotlight 团队创建了 Spotlight 隧道示例场景,以帮助内容创作者进行实践学习和实验。


希望本博客能帮助内容创作者在 Unity 中实现可信的视觉效果。我们迫不及待地想看到所有 Unity 内容创作者的精彩作品。