Reflection probes

Введение

As stated in the Spatial Material, objects can show reflected or diffuse light. Reflection probes are used as a source of reflected and ambient light for objects inside their area of influence.

A probe of this type captures the surroundings (as a sort of 360 degrees image), and stores versions of it with increasing levels of blur. This is used to simulate roughness in materials, as well as ambient lighting.

While these probes are an efficient way of storing reflections, they have a few shortcomings:

  • They are efficient to render, but expensive to compute. This leads to a default behavior where they only capture on scene load.

  • They work best for rectangular shaped rooms or places, otherwise the reflections shown are not as faithful (especially when roughness is 0).

Настройка

Create a ReflectionProbe node and wrap it around the area where you want to have reflections:

../../_images/refprobe_setup.png

This should result in immediate local reflections. If you are using a Sky texture, reflections are by default blended with it.

By default, on interiors, reflections may appear not to have much consistence. In this scenario, make sure to tick the "Box Correct" property.

../../_images/refprobe_box_property.png

This setting changes the reflection from an infinite skybox to reflecting a box the size of the probe:

../../_images/refprobe_boxcorrect.png

Adjusting the box walls may help improve the reflection a bit, but it will always look best in box shaped rooms.

The probe captures the surrounding from the center of the gizmo. If, for some reason, the room shape or contents occlude the center, it can be displaced to an empty place by moving the handles in the center:

../../_images/refprobe_center_gizmo.png

By default, shadow mapping is disabled when rendering probes (only in the rendered image inside the probe, not the actual scene). This is a simple way to save on performance and memory. If you want shadows in the probe, they can be toggled on/off with the Enable Shadow setting:

../../_images/refprobe_shadows.png

Finally, keep in mind that you may not want the Reflection Probe to render some objects. A typical scenario is an enemy inside the room which will move around. To keep objects from being rendered in the reflections, use the Cull Mask setting:

../../_images/refprobe_cullmask.png

Interior vs exterior

If you are using reflection probes in an interior setting, it is recommended that the Interior property be enabled. This stops the probe from rendering the sky and also allows custom ambient lighting settings.

../../_images/refprobe_ambient.png

When probes are set to Interior, custom constant ambient lighting can be specified per probe. Just choose a color and an energy.

Optionally, you can blend this ambient light with the probe diffuse capture by tweaking the Ambient Contribution property (0.0 means pure ambient color, while 1.0 means pure diffuse capture).

Blending

Multiple reflection probes can be used, and Godot will blend them where they overlap using a smart algorithm:

../../_images/refprobe_blending.png

Как вы можете видеть, такое смешивание никогда не бывает идеальным (в конце концов, это отражения коробки, а не реальные отражения), но эти артефакты видны только при использовании идеально зеркальных отражений. Обычно сцены имеют нормальное отображение и различные уровни шероховатости, которые могут скрыть это.

Альтернативно, зонды отражения хорошо сочетаются с отражениями экранного пространства для решения этих проблем. Комбинируя их, локальные отражения выглядят более достоверно, а зонды используются только в качестве запасного варианта, когда информация об экранном пространстве не найдена:

../../_images/refprobe_ssr.png

Наконец, смешивание внутренних и внешних зондов - это рекомендуемый подход при создании уровней, сочетающих как внутренние, так и внешние помещения. Возле двери зонд может быть помечен как внешний (так он будет получать отражения неба), в то время как внутри он может быть внутренним.

Reflection atlas

В текущей реализации рендерера все зонды имеют одинаковый размер и помещаются в атлас отражений. Размер и количество зондов можно настроить в Настройки проекта -> Качество -> Отражения

Значение по умолчанию Atlas Subdiv: 8 позволяет использовать в сцене до 16 зондов отражения. Это значение необходимо увеличить, если вам нужно больше зондов отражения.

../../_images/refprobe_atlas.png