# 优化反射

> Speed up baking time and rendering time for Reflection Probes.

由于诸多原因，渲染反射探针的立方体贴图需要大量的处理器时间：

1. 必须使用探针原点处的“摄像机”单独渲染立方体贴图六个面中的每一面。

2. 对于反射的每个反弹级别，探针都需要单独的时间进行渲染（请参阅[高级反射探针](/engine/6000.0/manual/lighting-overview/reflections/advanced-ref-probe.md)的文档以了解更多详细信息）。

3. 立方体贴图的各种 Mipmap 级别必须经过模糊处理才能进行光泽反射。

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

## 一般提示##general-tips

以下问题会同时影响脱机烘焙*和*运行时性能。

### 分辨率##resolution

立方体贴图的分辨率越高，渲染时间就越长。可以通过在反射细节不太重要的位置设置较低分辨率来优化探针（例如，如果反射对象较小和/或较远，自然就会显示较少的细节）。在细节明显的位置仍应当使用较高的分辨率。

### 剔除遮罩##culling-mask

提高普通摄像机性能的一项标准技术是使用\_\_剔除遮罩 (Culling Mask)\_\_ 属性来避免渲染无关紧要的对象；该技术同样适用于反射探针。例如，如果场景包含许多小对象（例如，岩石和植物），可以考虑将它们全部放在同一层上，然后使用剔除遮罩来避免在反射中渲染它们。

### 纹理压缩##texture-compression

要优化渲染时间并降低 GPU 内存消耗，请使用纹理压缩。要控制烘焙反射探针的纹理压缩，请打开光照 (Lighting) 窗口（菜单：**窗口 (Window)** > **渲染 (Rendering)** > **光照 (Lighting)**），导航到\_\_环境光照 (Environmental Lighting)\_\_ > **反射 (Reflections)**，然后使用\_\_压缩 (Compression)\_\_ 下拉菜单。请注意，在内存中不会压缩实时反射探针，这些探针在内存中的大小取决于分辨率和 HDR 设置。因此，采样实时反射探针通常比采样烘焙反射探针更耗费资源。

## 实时探针优化##real-time-probe-optimization

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

### 刷新模式 (Refresh Mode)##refresh-mode

通过\_\_刷新模式 (Refresh Mode)\_\_ 可选择探针的更新时间。就处理器时间而言，最耗费资源的选项是\_\_每帧 (Every Frame)\_\_。此模式可通过最少的编程工作提供最频繁的更新，但如果对所有探针都使用此模式，可能会遇到性能问题。

如果将此模式设置为\_\_唤醒时 (On Awake)\_\_，探针将在运行时更新，但只在场景开始时更新一次。如果场景（或场景的一部分）在运行时设置好，而在其生命周期内不再改变，则此模式非常有用。

最后一个模式\_\_通过脚本 (Via Scripting)\_\_ 允许您从脚本控制探针更新。尽管在编写脚本时需要耗费一些精力，但这种方法确实可以实现有用的优化。例如，您可以根据经过对象的表观大小更新探针（即，小对象或远处的大对象不值得更新）。

### 时间切片 (Time Slicing)##time-slicing

当上述\_\_刷新模式 (Refresh Mode)\_\_ 设置为\_\_每帧 (Every Frame)\_\_ 时，处理负载可能相当繁重。**时间切片 (Time Slicing)** 允许您在几个帧之间分摊更新成本，从而减少任何给定时间的负载。此属性有三个不同的选项：

1. **All Faces at Once** 将立即渲染立方体贴图的六个面（在同一帧上），但六个第一级 Mipmap 中每一个的模糊操作将在不同的帧上进行。然后，剩余的 Mipmap 将在单个帧上进行模糊处理，并将结果复制到另一个帧上的立方体贴图。因此，完整更新需要九帧才能完成。

2. **Individual Faces** 与 **All Faces at Once** 的工作方式相同，只是立方体贴图每个面的初始渲染都在自己的帧上进行（而不是所有六个面都在第一帧上进行渲染）。完整更新需要十四帧才能完成；此选项对帧率的影响最小，但是假如光照条件突然改变时（例如，突然开灯），更新时间可能明显会相对较长。

3. **No Time Slicing** 完全禁用时间切片操作，因此每次探针更新都在一个帧内进行。这样确保了反射与周围对象的外观精确同步，但是处理成本可能过高。

与其他优化一样，您应该考虑在反射不太重要的位置使用质量较低的选项，而在能注意到细节的位置保留 **No Time Slicing** 选项。

\--- \*

*
