反射探针

前言

如下所示 空间材质 , 对象可以显示反射光或漫反射光. 反射探头用作其影响区域内物体的反射光和环境光源.

这种类型的探针会捕获周围环境(作为一种 360 度图像),并且会存储模糊程度递增的不同版本,用于模拟材质的粗糙度以及环境照明。

虽然这些探针是一种有效的存储反射的方式, 但它们有一些不足之处:

  • 它们的渲染效率高, 但计算成本也高. 这就造成默认的行为, 即它们只在场景加载时捕获.

  • 它们最适合矩形房间或地方, 否则显示的反射不忠实(特别是当粗糙度为0时).

设置

创建一个ReflectionProbe节点并将其包在您想要反射的区域周围:

../../_images/refprobe_setup.png

这应该导致立即的局部反射. 如果您使用的是Sky纹理, 则默认情况下会将反射与其混合.

默认情况下,在内部,反射可能看起来不太一致,在这种情况下,一定要勾选 “Box Correct”(盒子校正)属性。

../../_images/refprobe_box_property.png

此设置将反射从无限天空盒更改为反映探测器大小的框:

../../_images/refprobe_boxcorrect.png

调整盒体墙面可能有助于改善一点反射, 但是在盒子形状的房间中看起来总是最好的.

探头从Gizmo的中心捕获周围环境. 如果由于某种原因, 房间的形状或内容遮挡了中心, 可以通过移动中心的把手将其移到空的地方:

../../_images/refprobe_center_gizmo.png

默认情况下,渲染探针时仅禁用阴影贴图(仅在探针内的渲染图像中,而不是实际场景中)。这是节省性能和内存的简单方法。如果您想在探针中使用阴影,可以使用 Enable Shadow 设置打开/关闭它们:

../../_images/refprobe_shadows.png

最后, 请记住, 您可能不希望Reflection Probe渲染某些对象. 一个典型的场景是房间内的敌人会四处移动. 要防止对象在反射中渲染, 请使用 Cull Mask 设置:

../../_images/refprobe_cullmask.png

内部与外部

如果您在室内环境中使用反射探针,建议启用 Interior(室内)属性。这可以阻止探针渲染天空,还可以自定义环境光设置。

../../_images/refprobe_ambient.png

当探头设置为 ** Interior ** 时, 可以为每个探头指定自定义恒定环境光. 只需选择颜色和能量.

可选,您可以通过调整 Ambient Contribution(环境贡献)属性将此环境光与探针漫射捕获混合(0.0 表示纯环境色,而 1.0 表示纯漫射捕获)。

混纺

可以使用多个反射探针,Godot会使用智能算法将它们混合在一起:

../../_images/refprobe_blending.png

正如所见, 这种混合从来都不是完美的(毕竟, 这些是盒子反射, 而不是真实的反射), 而这些伪像只有在使用完美的镜像反射时才可见. 通常情况下, 场景具有法线映射和不同程度的粗糙度, 因此可以隐藏它.

另外, 反射探针与屏幕空间反射混合在一起也能很好地解决这种问题. 将它们结合在一起, 可以使局部反射显得更加还原, 而探针只在找不到屏幕空间信息时作为备用:

../../_images/refprobe_ssr.png

最后, 在制作内部和外部结合的水平时, 建议混合使用内部和外部探头. 在门附近, 探头可以标记为 外部 (因此它将获得天空反射), 而在内部, 它可以是内部.

反射图集

在当前的渲染器实现中, 所有探测器都具有相同的大小并且适合反射图集. 可以在项目设置 ->质量 ->反射中自定义探针的大小和数量

Atlas Subdiv的默认设置:8, 将允许一个场景中最多有16个反射探针. 如果您需要更多的反射探针, 则需要增加该值.

../../_images/refprobe_atlas.png