反射探针的类型
高级反射探针功能

使用反射探针

可将反射探针 (Reflection Probe) 组件添加到场景中的任何对象,但标准做法是将每个探针添加到单独的空游戏对象。常规的工作流程如下:

  • 创建新的空游戏对象(菜单:__GameObject__ > Create Empty__),然后将反射探针组件添加到该对象(菜单:__Component > Rendering > Reflection Probe__)。或者,如果在场景中已有现成的探针,可能直接复制该探针的做法更为方便(菜单:__Edit > __Duplicate__)。
  • 将新探针放在所需位置并设置其 Offset 点及其效果区域的大小。 *(可选)在探针上设置其他属性以自定义其行为。
  • 继续添加探针,直到分配完所有必需的位置。

要查看反射,还需要场景中至少有一个反射对象。可按如下方式创建一个简单的测试对象:

  • 将一个简单对象(如球体)添加到场景中(菜单:__GameObject__ > 3D Object > __Sphere__)。
  • 创建新材质(菜单:__Assets__ > Create > Material__)并保留默认的 Standard__ 着色器。
  • 通过将 MetallicSmoothness 属性均设置为 1.0 使材质具有反射性。
  • 将新创建的材质拖动到球体对象上以进行分配。

球体现在可以显示从探针获得的反射。通过简单布置单个探针足以看到反射的基本效果。

最后,必须烘焙探针之后才能让反射变得可见。如果在 Lighting 窗口中启用了 Auto Generate 选项(这是默认设置),当您在场景中定位或更改对象时,反射将更新,尽管响应不是即时的。如果禁用自动烘焙,则必须单击反射探针检视面板中的 Bake 按钮以更新探针。禁用自动烘焙的主要原因是,对于具有许多探针的复杂场景,烘焙过程可能需要相当长的时间才能完成。

定位探针

探针的位置主要由其游戏对象的位置决定,因此只需将对象拖动到所需位置即可。完成此操作后,应设置探针的效果区域;这是一个轴对齐的盒体形状,其大小由 Box Size 属性设置。您可以直接设置大小值,也可在检视面板中启用大小编辑模式,然后在 Scene 视图中拖动盒体的两侧(有关详细信息,请参阅反射探针组件页面)。全套探针的区域应共同覆盖场景中反射对象可能通过的所有区域。

应将探针放置在场景中可明显反射的任何大型对象附近。中心和角点周围的区域是放置探针的良好候选位置。如果较小的对象具有强烈的视觉效果,可能需要靠近探针。例如,您可能希望反射篝火的火焰,即使对象本身很小甚至无关紧要的情况下,也是如此。

如果在所有适当的位置都有了探针,则需要为每个探针定义效果区域,为此可使用上面提到的 Box Size 属性来实现该目的。一面墙壁的大部分长度可能只需要一个探针区域(前提是它具有相当均匀的外观),但该区域在垂直于墙壁的方向上可能相对较窄;这意味着,墙壁只能被很接近的对象所反射。一个开放空间的外观在不同位置的变化很小,通常可以用一个探针覆盖。请注意,探针的区域与主世界轴(X、Y 和 Z)对齐,无法进行旋转。这意味着,如果一面均匀的墙壁不是轴对齐的话,有时可能需要沿该墙壁布设的一组探针。

默认情况下,探针的效果区域以其视点为中心,但这可能不是捕获反射立方体贴图的理想位置。例如,非常高的墙壁的探针区域可能会从墙壁延伸一段距离,但您可能希望从靠近的点而不是区域的中心捕获反射。您可以选择使用 Box Offset 属性为视点添加偏移量(即,偏移量是游戏对象的局部空间中生成探针立方体贴图视图的位置)。使用此设置,您可以轻松地将视点放置在效果区域内或完全位于区域外的任何位置。

重叠探针区域

对相邻反射探针的区域进行定位时不让它们重叠是非常困难的,幸运的是,没有必要这样做。然而,这带来了在重叠区域中选择使用哪个探针的问题。默认情况下,Unity 计算反射对象的包围盒与每个重叠探针区域之间的交集;与包围盒具有最大交叉量的区域即为要选择的区域。

选择探针 A 的原因它与对象的交叉量更大
选择探针 A 的原因它与对象的交叉量更大

您可以使用探针的 Importance 属性来修改计算。重要性值较高的探针优先于重叠区域内重要性较低的探针。假如您有一个完全包含在较大区域内的小探针区域(即,角色的包围盒与较大包围区域的交集可能总是更大,因此永远不会使用小区域),那么该设置就会很有用。

混合

要启用反射探针混合,请导航至 Graphic Settings > Tier settings。启用混合后,当反射对象从一个区域移动到另一个区域时,Unity 将逐渐淡出一个探针的立方体贴图,同时淡入另一个探针的立方体贴图。这种逐渐过渡避免了当对象穿过区域边界时突然有一个显眼的对象“弹出”到反射中的情况。

必须使用网格渲染器 (Mesh Renderer) 组件的 Reflection Probes 属性控制混合。提供了四个可用的混合选项:

  • Off - 禁用反射探针混合。仅将天空盒用于反射
  • Blend Probes - 仅混合相邻探针并忽略天空盒。应将此选项用于“室内”对象或场景隐蔽区域(例如洞穴和隧道)的对象,因为从这些地方看不到天空,所以天空不应出现在反射中。
  • Blend Probes and Skybox - 作用与 Blend Probes 类似,但也允许在混合中使用天空盒。应将此选项用于天空始终可见的露天对象。
  • Simple - 当存在两个重叠的反射探针体积时,禁用探针之间的混合。

当探针具有相等的 Importance 值时,给定探针区域的混合权重的计算方法,是将该区域与对象包围盒的交叉量(体积)除以所有探针与该包围盒的交叉量之和。例如,如果包围盒与探针 A 区域的交叉量为 1.0 立方单位,而与探针 B 区域的交叉量为 2.0 立方单位,则混合值将为:

  • 探针 A:1.0 / (1.0 + 2.0) = 0.33
  • 探针 B:2.0 / (1.0 + 2.0) = 0.67

换句话说,该混合将包含探针 A 的 33% 反射和探针 B 的 67% 反射。

在一个探针完全包含在另一个探针内的情况下,必须以稍微不同的方式处理该计算,因为内部区域完全与外部区域重叠。如果对象的包围盒完全处于内部区域内,则该区域的混合权重为 1.0(即,根本不使用外部区域)。当对象部分位于内部区域之外时,对象包围盒与内部区域的交叉体积除以包围盒的总体积。例如,如果交叉体积为 1.0 立方单位,而包围盒的体积为 4.0 立方单位,则内部探针的混合权重将为 1.0 / 4.0 = 0.25。然后,从 1.0 中减去该值即得到外部探针的权重,此处即得到 0.75。

当参与混合的一个探针具有比另一个探针更高的 Importance 值时,更重要的探针通常将覆盖另一个探针。


  • 5.6 版更新

  • 2017–06–06 页面已发布并只进行了有限的编辑审查

反射探针的类型
高级反射探针功能