版本:Unity 6 (6000.0)
语言:English
启用反射的反射
反射故障排除

优化反射

渲染反射探针一种渲染组件,它会捕获其周围环境的球形视图,类似于相机。捕获的图像随后存储为立方体贴图,可供具有反射材质的对象使用。 更多信息
请参阅术语表
立方体贴图六个正方形纹理的集合,可以表示环境中的反射或几何体后面绘制的天空盒。六个正方形形成了围绕对象的虚构立方体的面;每个面代表沿世界轴方向(上、下、左、右、前和后)的视图。 更多信息
请参阅术语表
需要大量的处理器时间,原因如下。

  1. 每个六个立方体贴图面都必须使用探针原点处的“相机一个组件,用于创建场景中特定视点的图像。输出要么绘制到屏幕上,要么捕获为纹理。 更多信息
    请参阅术语表
    ”单独渲染。

  2. 对于每个反射反弹级别,都需要单独渲染探针(有关更多详细信息,请参阅有关高级反射探针的文档)。

  3. 立方体贴图的各个mipmap级别必须经过模糊过程才能实现光泽反射。

渲染探针所需的时间会影响编辑器中的烘焙工作流程,更重要的是,会影响播放器的运行时性能。以下是一些关于如何将反射探针的性能影响降到最低的提示。

常规提示

以下问题会影响离线烘焙运行时性能。

分辨率

立方体贴图的分辨率越高,其渲染时间就越长。您可以通过在反射细节不太重要的位置设置较低的分辨率来优化探针(例如,如果反射物体很小和/或很远,那么它自然会显示更少的细节)。在细节显眼的地方仍然应该使用更高的分辨率。

剔除遮罩

提高普通相机性能的标准技术是使用剔除遮罩允许您根据图层包含或省略要由相机渲染的对象。
请参阅术语表
属性来避免渲染不重要的对象;此技术对于反射探针同样有效。例如,如果您的场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,从本质上讲,将游戏分段设计和构建。 更多信息
请参阅术语表
包含许多小型对象(例如,岩石和植物),您可能会考虑将它们全部放在同一图层上,然后使用剔除遮罩来避免在反射中渲染它们。

纹理压缩

为了优化渲染时间并降低 GPU 内存消耗,请使用纹理压缩。要控制烘焙反射探针的纹理压缩,请打开“灯光”窗口(菜单:窗口 > 渲染 > 灯光),导航到环境灯光 > 反射并使用压缩一种存储数据的方法,可以减少其所需的存储空间。请参阅纹理压缩动画压缩音频压缩构建压缩
请参阅术语表
下拉菜单。请注意,实时反射探针不会在内存中压缩,并且其在内存中的大小取决于分辨率和 HDR 设置。因此,采样实时反射探针通常比采样烘焙反射探针更占用资源。

实时探针优化

对于实时探针,渲染开销通常比编辑器中烘焙的探针更显着。更新的频率可能非常高,如果管理不当,这可能会影响帧率。考虑到这一点,实时探针提供了以下属性,让您尽可能高效地处理探针渲染

刷新模式

刷新模式允许您选择探针何时更新。就处理器时间而言,最占用资源的选项是每帧。这提供了最频繁的更新,并且编程工作量最少,但如果您对所有探针都使用此模式,则可能会遇到性能问题。

如果模式设置为在唤醒时,探针将在运行时更新,但仅在场景开始时更新一次。如果场景(或其一部分)在运行时设置但在其生命周期内不发生更改,这将很有用。

最后一种模式通过脚本允许您从脚本控制探针更新。尽管编写脚本需要一些工作,但这确实可以实现有用的优化。例如,您可以根据经过对象的明显大小更新探针(即,小对象或远处的大对象不值得更新)。

时间切片

当上面描述的刷新模式设置为每帧时,处理负载可能相当大。时间切片允许您将更新的成本分散到多个帧上,从而减少任何给定时间的负载。此属性有三个不同的选项

  1. 所有面一次将导致六个立方体贴图面立即渲染(在同一帧上),但随后六个第一级mipmap的每个模糊操作将在单独的帧上进行。然后,其余的mipmap将在单个帧上进行模糊,并将结果复制到另一个帧上的立方体贴图。因此,完整更新需要九帧才能完成。

  2. 单个面的工作方式与所有面一次相同,只是每个立方体贴图面的初始渲染发生在其自己的帧上(而不是所有六个都在第一帧上)。完整更新需要 14 帧才能完成;此选项对帧率的影响最小,但当例如照明条件突然变化时,例如灯突然打开,相对较长的更新时间可能会很明显。

  3. 无时间切片完全禁用时间切片操作,因此每个探针更新都在单个帧内发生。这确保了反射与周围对象的出现完全同步,但处理成本可能过高。

与其他优化一样,您应该考虑在反射不太重要的位置使用较低质量的选项,并将无时间切片选项保存到细节会引起注意的位置。



  • 在 5.6 中更新

  • 2017 年 6 月 6 日 页面发布

启用反射的反射
反射故障排除