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.

Примітка: Під час використання методу мобільного рендерингу, на кожному ресурсі сітки може відображатися лише 8 зондів відбиття, тоді як метод рендерингу сумісності підтримує лише до 2 зондів відбиття на кожній сітці. Спроба відобразити більше ніж 8 зондів відбиття на одному ресурсі сітки за допомогою мобільного рендерера призведе до мерехтіння зондів відбиття під час руху камери, тоді як рендерер сумісності не відтворюватиме жодних додаткових зондів, якщо використовується більше ніж 2 зондів відбиття.

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

Посібники

Властивості

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 злегка в будь-якому напрямку.

UpdateMode UPDATE_ALWAYS = 1

Оновити зонд кожного кадру. Це забезпечує кращі результати для швидкознімних динамічних об'єктів (наприклад, автомобілів). Тим не менш, має суттєву вартість виконання. У зв'язку з вартістю, рекомендується використовувати тільки один ВідображенняПробе з 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_mode має значення AMBIENT_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) 🔗

Розмір відбиття зонда. Чим більший розмір, тим більший простір, покритий зоною, який знизить видиму роздільну здатність. Це найкраще тримати розмір тільки так само, як вам потрібно.

Note: Щоб краще підходять ділянки, які не вирівнюються до сітки, можна обертати вузол ReflectionProbe.


UpdateMode update_mode = 0 🔗

Як часто оновлюється ReflectionProbe. Може бути UPDATE_ONCE або UPDATE_ALWAYS.