ReflectionProbe

Наследует: VisualInstance3D < Node3D < Node < Object

Фиксирует окружающую обстановку для создания быстрых и точных отражений из заданной точки.

Описание

Захватывает свое окружение в виде кубической карты и сохраняет ее версии с увеличивающимися уровнями размытия для имитации различных шероховатостей материалов.

ReflectionProbe используется для создания высококачественных отражений при низких затратах производительности (когда update_mode равно UPDATE_ONCE). ReflectionProbe-ы можно плавно смешивать друг с другом и с остальной частью сцены. ReflectionProbe-ы также могут комбинироваться с VoxelGI, SDFGI (Environment.sdfgi_enabled) и отражениями в экранном пространстве (Environment.ssr_enabled) для получения более точных отражений в определенных областях. ReflectionProbe-ы визуализируют все объекты в пределах cull_mask, поэтому их обновление может быть довольно затратным. Лучше всего обновить их один раз, добавив важные статические объекты, и больше не трогать.

Примечание: В отличие от VoxelGI и SDFGI, ReflectionProbe получают свою среду только из узла WorldEnvironment. Если указать ресурс Environment в узле Camera3D, он будет проигнорирован ReflectionProbe. Это может привести к неправильному освещению внутри ReflectionProbe.

Примечание: При использовании метода Mobile рендеринга на каждом ресурсе сетки могут отображаться только 8 reflection отражения, тогда как метод Compatibility рендеринга поддерживает только до 2 Reflection Probe на каждой сетке. Попытка отобразить более 8 reflection отражения на одном ресурсе сетки с помощью Mobile рендеринга приведет к мерцанию зондов отражения при движении камеры, в то время как Compatibility рендеринга не будет отображать никаких дополнительных зондов, если используется более 2 Reflection Probe.

Примечание: При использовании метода Mobile рендеринга Reflection Probe будут правильно воздействовать только на те сетки, видимость AABB которых пересекается с AABB Reflection Probe. При использовании шейдера для деформации сетки, выходящей за пределы AABB, необходимо увеличить GeometryInstance3D.extra_cull_margin сетки. В противном случае Reflection Probe может быть не виден на сетке.

Обучающие материалы

Свойства

Color

ambient_color

Color(0, 0, 0, 1)

float

ambient_color_energy

1.0

AmbientMode

ambient_mode

1

float

blend_distance

1.0

bool

box_projection

false

int

cull_mask

1048575

bool

enable_shadows

false

float

intensity

1.0

bool

interior

false

float

max_distance

0.0

float

mesh_lod_threshold

1.0

Vector3

origin_offset

Vector3(0, 0, 0)

int

reflection_mask

1048575

Vector3

size

Vector3(20, 20, 20)

UpdateMode

update_mode

0


Перечисления

enum UpdateMode: 🔗

UpdateMode UPDATE_ONCE = 0

Обновите зонд один раз в следующем кадре (рекомендуется для большинства объектов). Соответствующая карта яркости будет сгенерирована в течение следующих шести кадров. Это занимает больше времени для обновления, чем UPDATE_ALWAYS, но имеет меньшие затраты производительности и может привести к более качественным отражениям. ReflectionProbe обновляется, когда изменяется его преобразование, но не когда изменяется близлежащая геометрия. Вы можете принудительно обновить ReflectionProbe, слегка переместив ReflectionProbe в любом направлении.

UpdateMode UPDATE_ALWAYS = 1

Обновлять зонд каждый кадр. Это обеспечивает лучшие результаты для быстро движущихся динамических объектов (например, автомобилей). Однако это имеет значительные затраты производительности. Из-за затрат рекомендуется использовать только один ReflectionProbe с UPDATE_ALWAYS максимум на сцену. Для всех других случаев использования используйте UPDATE_ONCE.


enum AmbientMode: 🔗

AmbientMode AMBIENT_DISABLED = 0

Не применяйте никакого окружающего освещения внутри поля ReflectionProbe, определенного его size.

AmbientMode AMBIENT_ENVIRONMENT = 1

Применить автоматически генерируемое окружающее освещение внутри поля ReflectionProbe, определяемого его size.

AmbientMode AMBIENT_COLOR = 2

Применить пользовательское окружающее освещение внутри поля ReflectionProbe, определяемого его size. См. ambient_color и ambient_color_energy.


Описания свойств

Color ambient_color = Color(0, 0, 0, 1) 🔗

  • void set_ambient_color(value: Color)

  • Color get_ambient_color()

Пользовательский цвет окружения для использования в поле ReflectionProbe, определенном его size. Действует только если ambient_modeAMBIENT_COLOR.


float ambient_color_energy = 1.0 🔗

  • void set_ambient_color_energy(value: float)

  • float get_ambient_color_energy()

Пользовательская энергия окружающего цвета для использования в поле ReflectionProbe, определенном его size. Действует только если ambient_mode равно AMBIENT_COLOR.


AmbientMode ambient_mode = 1 🔗

Цвет окружающего пространства для использования в поле ReflectionProbe, определенном его size. Цвет окружающего пространства будет плавно смешиваться с другими ReflectionProbe и остальной частью сцены (за пределами поля ReflectionProbe, определенного его size).


float blend_distance = 1.0 🔗

  • void set_blend_distance(value: float)

  • float get_blend_distance()

Определяет расстояние в метрах, на котором зонд сливается с сценой.


bool box_projection = false 🔗

  • void set_enable_box_projection(value: bool)

  • bool is_box_projection_enabled()

Если true, включает проекцию коробки. Это делает отражения более правильными в прямоугольных комнатах, смещая центр отражения в зависимости от расположения камеры.

Примечание: Чтобы лучше подогнать прямоугольные комнаты, которые не выровнены по сетке, можно повернуть узел ReflectionProbe.


int cull_mask = 1048575 🔗

  • void set_cull_mask(value: int)

  • int get_cull_mask()

Устанавливает маску отбраковки, которая определяет, какие объекты рисуются этим зондом. Каждый VisualInstance3D со слоем, включенным в эту маску отбраковки, будет визуализирован зондом. Лучше всего включать только крупные объекты, которые, вероятно, займут много места в отражении, чтобы сэкономить на стоимости рендеринга.

Это также можно использовать для предотвращения отражения объекта от самого себя (например, ReflectionProbe, центрированный на транспортном средстве).


bool enable_shadows = false 🔗

  • void set_enable_shadows(value: bool)

  • bool are_shadows_enabled()

Если true, вычисляет тени в зонде отражения. Это замедляет рендеринг зонда отражения; вы можете отключить это, если используете UPDATE_ALWAYS update_mode.


float intensity = 1.0 🔗

  • void set_intensity(value: float)

  • float get_intensity()

Определяет интенсивность отражения. Интенсивность модулирует силу отражения.


bool interior = false 🔗

  • void set_as_interior(value: bool)

  • bool is_set_as_interior()

Если true, отражения будут игнорировать влияние неба.


float max_distance = 0.0 🔗

  • void set_max_distance(value: float)

  • float get_max_distance()

Максимальное расстояние от ReflectionProbe, на котором может находиться объект, прежде чем он будет отсечен. Уменьшите это значение, чтобы улучшить производительность, особенно при использовании UPDATE_ALWAYS update_mode.

Примечание: Максимальное расстояние отражения всегда по крайней мере равно протяженности зонда. Это означает, что уменьшение max_distance не всегда будет отсеивать объекты из отражений, особенно если область зонда отражения, определяемая его size, уже велика.


float mesh_lod_threshold = 1.0 🔗

  • void set_mesh_lod_threshold(value: float)

  • float get_mesh_lod_threshold()

Автоматическое смещение LOD для использования сеток, визуализируемых в ReflectionProbe (это аналог Viewport.mesh_lod_threshold). Более высокие значения будут использовать менее подробные версии сеток, которые имеют сгенерированные вариации LOD. Если установлено значение 0.0, автоматический LOD отключен. Увеличьте mesh_lod_threshold, чтобы улучшить производительность за счет детализации геометрии, особенно при использовании UPDATE_ALWAYS update_mode.

Примечание: mesh_lod_threshold не влияет на диапазоны видимости GeometryInstance3D (также известные как «ручной» LOD или иерархический LOD).


Vector3 origin_offset = Vector3(0, 0, 0) 🔗

Устанавливает смещение начала координат, которое будет использоваться, когда этот ReflectionProbe находится в режиме box_projection. Это может быть установлено на ненулевое значение, чтобы гарантировать, что отражение вписывается в прямоугольную комнату, одновременно уменьшая количество объектов, которые «мешают» отражению.


int reflection_mask = 1048575 🔗

  • void set_reflection_mask(value: int)

  • int get_reflection_mask()

Устанавливает маску отражения, которая определяет, какие объекты имеют отражения, примененные этим зондом. Каждый VisualInstance3D со слоем, включенным в эту маску отражения, будет иметь отражения, примененные этим зондом. См. также cull_mask, который можно использовать для исключения объектов из отражения, при этом оставляя их под воздействием ReflectionProbe.


Vector3 size = Vector3(20, 20, 20) 🔗

Размер зонда отражения. Чем больше размер, тем больше пространства охватывает зонд, что снижает воспринимаемое разрешение. Лучше всего сохранять размер только настолько большим, насколько это необходимо.

Примечание: Чтобы лучше подогнать области, которые не выровнены по сетке, можно вращать узел ReflectionProbe.


UpdateMode update_mode = 0 🔗

Устанавливает частоту обновления ReflectionProbe. Может быть UPDATE_ONCE или UPDATE_ALWAYS.