Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

反射探针

备注

反射探针仅在集群 Forward 和 Forward 移动渲染后端中受支持,在兼容性后端中则不受支持。

标准 3D 材质与 ORM 3D 材质 中所述,物体可以显示反射光和/或漫射光。 反射探针用作影响区域内物体的反射 环境光源。 它们可用于提供比 VoxelGISDFGI 更准确的反射,同时占用的系统资源相当便宜。

由于反射探针还可以存储环境光,因此当 烘焙光照贴图 不可用时(例如在程序生成的关卡中),它们可以用作 VoxelGI 和 SDFGI 的低端替代品。

反射探针还可以与屏幕空间反射同时使用,为屏幕外的对象提供反射。 在这种情况下,Godot 会将屏幕空间反射和反射探针的反射混合在一起。

参见

不确定 ReflectionProbe 是否符合你的需求?那么请到 我应该使用哪种全局光照技术? 来查阅 Godot 中可用的 GI 技术的比较。

视觉比较

反射探针禁用。环境天空作为反馈使用。

反射探针禁用。环境天空作为反馈使用。

反射探针启用。

反射探针启用。

反射探针启用。

反射探针与 LightmapGI 同时启用。光照贴图出现在反射中。

通过将反射探针与屏幕空间反射相结合,你可以两全其美:既能够一般房间结构提供高质量反射(在屏幕外时仍然存在),还可以为小的细节提供实时反射。

仅使用 ReflectionProbe 在房间中进行的反射。

仅使用 ReflectionProbe 在房间中进行的反射。注意,小的细节没有任何反射。

仅使用屏幕空间反射在房间中进行的反射。

仅使用屏幕空间反射在房间中进行的反射。注意,由于房间的墙面侧面已经在屏幕之外,其上的反射出现了部分缺失。

同时使用了 RefectionProbe 和屏幕空间反射在房间中进行的反射。

同时使用了 RefectionProbe 和屏幕空间反射在房间中进行的反射。屏幕空间反射和反射探针相混合,在反射探针无法显示任何反射的情况下充当后备。

设置 ReflectionProbe

  • 添加一个 ReflectionProbe 节点.

  • 在检查器中配置 ReflectionProbe 的范围以适应你的场景。 为了获得准确的反射,每个房间通常应该有一个 ReflectionProbe 节点(有时,对于大房间来说会有更多)。

小技巧

请记住,ReflectionProbe 范围不必是正方形,你甚至可以旋转 ReflectionProbe 节点以适应未与 X/Z 网格对齐的房间。 利用这一点可以更好地覆盖房间,而无需放置太多 ReflectionProbe 节点。

ReflectionProbe 属性

  • Update Mode(更新模式): 控制反射探针何时更新。 每次移动 ReflectionProbe 时 Once 仅渲染场景一次。 与 Always 更新模式相比,这使得渲染速度更快,后者强制探针每帧重新渲染周围的所有内容。 将此属性保留为 Once (默认),除非你需要反射探针来更新每一帧。

  • Intensity(强度): 反射和环境照明的亮度。 通常不需要更改其默认值 1.0 ,但如果你发现反射看起来太强,可以将其减小 1.0

  • Max Distance(最大距离): 控制 ReflectionProbe 内部摄像头使用的最大距离。 该距离始终至少等于 Extents (范围) ,但可以增加该距离以使位于范围之外的对象在反射中可见。 此属性不会影响 ReflectionProbe 本身可见的最大距离。

  • Extents(范围): 将受到 ReflectionProbe 照明和反射影响的区域。

  • Origin Offset(原点偏移): 用于反射探针渲染的内部摄像机的原点。 这必须始终限制在 Extents 内。 如果需要,请调整此项以防止反射被正好位于 ReflectionProbe 中心的固体物体阻挡。

  • Box Projection(箱体投影): 控制渲染反射探针时是否应使用视差校正。 这将根据相机的位置(相对于反射探针)调整反射的外观。 这会产生很小的性能成本,但在箱型房间中,质量的提高通常是物有所值的。 请注意,这种效果在形状不太规则的房间(例如椭圆形的房间)中效果不佳。

  • Interior(内部): 如果启用,环境照明将不会来自环境天空,并且背景天空不会渲染到反射探针上。

  • Enable Shadow(启用阴影): 控制是否应在反射探针内渲染实时光阴影。 启用此功能可以提高反射质量,但会牺牲性能。 对于具有 Always 模式的反射探针,应禁用此功能,因为每帧渲染带有阴影的反射的成本非常高。 完全 烘焙光 阴影不受此设置的影响,并且无论如何都会在反射探针中渲染。

  • Cull Mask(剔除遮罩): 控制哪些对象在反射中可见。 该属性可以通过从反射中排除小物体来提高性能。该属性也可用于防止对象在无法使用 Origin Offset 的情况下出现自反射伪影(self-reflection artifacts)。

  • Mesh LOD Threshold(网格 LOD 阈值): 用于调整在反射内渲染网格的自动细节层次的阈值。 这仅影响自动生成 LOD 的网格体。 较高的值可以通过使用不太详细的几何体来提高性能,特别是对于远离反射原点的对象。 在游戏过程中,使用不太详细的对象的视觉差异通常不是很明显,尤其是在粗糙的反射中。

环境类别具有多个属性,用于调整 ReflectionProbe 渲染的环境光:

  • Mode(模式): 设置为 Disabled ,探针将不添加环境光。如果设置为 Environment (环境),环境光颜色将自动从环境天空(当 Interior 被禁用)和反射的平均颜色中采样。如果设置为 Constant Color (固定颜色),则使用 Color 属性中指定的颜色。 Constant Color 模式可作为区域照明的近似值。

  • Color(颜色): 当环境光模式设置为 Constant Mode(固定模式) 时使用的颜色。

  • Color Energy(颜色能量):用于环境光自定义 Color 的乘数。 这仅在环境光模式为 Custom Color(自定义颜色) 时有效。

ReflectionProbe 混合

为了使反射源之间的过渡更加平滑,Godot 支持自动探针混合:

  • 最多可以在给定位置,将 4 个 ReflectionProbe 混合在一起。 当 ReflectionProbe 不接触任何其他 ReflectionProbe 节点时,它也会平滑地淡出回到环境照明中。

  • 如果使用该功能的话,SDFGI 和 VoxelGI 将与 ReflectionProbes 顺利融合。 这允许策略性地放置 ReflectionProbes,以便在需要时获得更准确(或完全实时)的反射,同时在 VoxelGI 或 SDFGI 的影响区域中仍然具有可用的粗略反射。

要使多个 ReflectionProbe 相互混合,你需要使每个 ReflectionProbe 的部分区域相互重叠。区域范围应仅与其他反射探针(的范围)尽可能少地重叠,以提高渲染性能(通常是 3D 空间中的几个单位)。

限制

在使用 Forward+ 渲染器时,Godot 采用 集群 方法进行实时照明。只要性能允许,可以添加任意数量的反射探针。不过,默认情况下,当前摄像机视图中的 集群元素 上限仍为 512 个。集群元素是指全向灯、聚光灯、 贴花反射探针。可以通过调整 "渲染 > 限制 > 群集生成器 > 最大群集元素"高级项目设置来增加此限制。

在使用 Forward 移动后端时,每个单独的 Mesh 资源 上只能应用 8 个反射探针。如果单个网格上有超出数量限制的反射探针,它们并不会全部渲染在网格上。