了解 Unity 2020.1 中图形方面的一些主要更新。有关完整详情,请查看发行说明。
通用渲染管线中的 Camera Stacking
在制作游戏时,您会遇到很多想要包括在主摄像机上下文以外渲染的内容的情况。例如,在暂停菜单中,您可能想要显示某个角色版本;而在机甲游戏中,您可能需要为座舱进行特殊的渲染设置。
现在,您可以使用 Camera Stacking 来将多个摄像机的输出分层并创建一个组合输出。这让您能够创建 2D 用户界面 (UI) 中的 3D 模型或车辆驾驶舱之类的效果。有关当前限制,请参阅文档。
光照更新
光照设置资源让用户可以同时更改多个场景使用的设置。也就是说,对多个属性的修改可以在项目中快速传播;对于可能需要在多个场景中进行全局更改的光照美术师来说,这是一个极为便利的功能。例如,现在当您在预览和生产质量的烘焙之间切换时,可以更快地在光照设置之间交换。
重要说明:光照设置不再是 Unity 场景文件的一部分;相反,它们现在位于项目内的一个独立文件中,该文件存储着与预先计算的全局光照有关的所有设置。
注意:上面的视频来自 Nedd 为 ICRC 创建的 Enter the Room 项目。

无重叠打包
现在,设置光照贴图模型变得更为简单。
要对对象进行光照贴图,必须先将其“展开”,以将几何体展平为 2D 纹理坐标 (UV)。这意味着所有面都必须映射到光照贴图中的一个唯一部分。重叠区域可能会导致渲染结果中出现渗色和其他不必要的视觉伪像。
为防止相邻的 UV 图表之间相互渗色,几何体区域需要足够的填充,以将光照值扩张到其中。这有助于确保纹理滤波的效果不会平均化来自相邻图表的值(可能不对应于 UV 边界处的预期光照值)。
Unity 的自动打包在光照贴图 UV 之间创建最小的打包边距,以允许这种扩张。这在导入时进行。但是,在场景中使用低纹素密度或在缩放对象时,光照贴图输出可能仍然没有足够的填充。
为了简化在导入时查找打包边距所需大小的过程,Unity 现在在模型导入器中提供了“Calculate”边距方法。在这里,您可以指定将使用模型的最小光照贴图分辨率以及最小比例。Unity 的解包程序根据该输入计算所需的打包边距,以避免光照贴图重叠。

GPU 和 CPU 光照贴图:改进采样
路径追踪中的相关性是这样一种现象:整个光照贴图场景中的随机样本可能看起来“成群分布”或存在噪点。在 2020.1 中,我们为 CPU 和 GPU Lightmapper 实现了更好的去相关方法。
这些去相关改进默认处于激活状态,不需要任何用户输入。最终将生成更快收敛至无噪点状态并且伪像更少的光照贴图。
我们还将 Lightmapper 的样本数量限制从 10 万个增加到了 10 亿个。对于建筑可视化等恶劣光照条件可能导致多噪点光照贴图输出的项目,这非常有用。
2020.2 将对该功能做进一步的改进,现在,您可以在 alpha 版本中预览该功能。

光照贴图优化
进行光照贴图时,我们在场景中发出遇表面将反弹的光线,从而创建用于计算全局光照的光路。光线反射次数越多,路径越长,生成样本所需的时间也越长。这会增加对场景进行光照贴图处理所需的时间。
要限制计算每条光线所花费的时间,Lightmapper 需要知道一些结束每条光线路径的条件。例如,您可以严格限制允许每条光线反射的次数。要进一步优化该过程,您可以使用一种称为“俄罗斯轮盘”的技术(随机选择要提前结束的路径)。
该方法考虑了路径对场景中全局光照的意义。每当光线遇黑暗表面反射时,提前结束该路径的几率就会增加。以这种方式剔除光线可减少总烘焙时间,而对光照质量的影响通常很小。
上面的图像来自 Nedd 为 ICRC 创建的 Enter the Room 项目。

参与者/接收者场景视图模式
现在,借助参与者和接收者场景视图,您可以查看哪些对象正在对场景中的全局光照 (GI) 产生影响。这也让您能够更轻松地快速了解是否从光照贴图或光照探针接收到了 GI。
使用该场景视图模式时,将根据网格渲染器是否对 GI 产生影响以及它们是否/如何接收 GI 来以不同颜色绘制网格渲染器。除了 Unity 的内置渲染器之外,该场景视图模式还可在所有可编程渲染管线中使用。
该模式对于光照探针尤为有用,因为它能很好地概括显示探针的使用情况。可以在“Preference”面板中自定义颜色,以提高可读性。
适用于动画网格的光线追踪(预览版)
现在,光线追踪(预览版)通过带蒙皮的网格渲染器组件支持动画。现在,通过“Renderers”菜单中的“Dynamic Geometry Ray Tracing Mode”选项支持 Alembic 顶点缓存和具有动态内容的网格(见下面的示例)。如果您有兴趣试用这些功能,请加入我们的高清渲染管线 (HDRP) 光线追踪论坛,并查看我们专门介绍 HDRP 中光线追踪功能的文章。

Streaming Virtual Texturing(预览版)
Streaming Virtual Texturing 功能可在场景中具有很多高分辨率纹理时减少 GPU 内存使用量和纹理加载时间。它的工作原理是将纹理拆分为瓦片,然后在需要时将这些瓦片逐步上传到 GPU 内存中。现在,高清渲染管线(9.x-预览版及更高版本)已支持该功能,它可与 Shader Graph 一起使用。