OccluderInstance3D

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

Обеспечивает отбраковку окклюзии для 3D-узлов, что повышает производительность в закрытых областях.

Описание

Отбраковка окклюзии может улучшить производительность рендеринга в закрытых/полуоткрытых областях, скрывая геометрию, которая закрыта другими объектами.

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

Система отбраковки окклюзии работает путем параллельной визуализации окклюдеров на CPU с использованием Embree, рисуя результат в буфер с низким разрешением, а затем используя его для индивидуальной отбраковки 3D-узлов. В 3D-редакторе можно предварительно просмотреть буфер отсечения окклюзии, выбрав Perspective > Display Advanced... > Occlusion Culling Buffer в левом верхнем углу 3D-вида. Качество буфера отсечения окклюзии можно настроить в настройках проекта.

Запекание: Выберите узел OccluderInstance3D, затем нажмите кнопку Bake Occluders в верхней части 3D-редактора. Будут учитываться только непрозрачные материалы; прозрачные материалы (альфа-смешанные или альфа-тестированные) будут игнорироваться при генерации окклюдера.

Примечание: Отсеивание окклюзии эффективно только в том случае, если ProjectSettings.rendering/occlusion_culling/use_occlusion_culling имеет значение true. Включение отсечения окклюзии влечет за собой затраты на CPU. Включайте отсечение окклюзии только в том случае, если вы действительно планируете его использовать. Большие открытые сцены с небольшим количеством или отсутствием объектов, блокирующих вид, как правило, не получат большой выгоды от отсечения окклюзии. Большие открытые сцены, как правило, получают больше пользы от LOD сетки и диапазонов видимости (GeometryInstance3D.visibility_range_begin и GeometryInstance3D.visibility_range_end) по сравнению с отсечением окклюзии.

Примечание: Из-за ограничений памяти отсечение окклюзии по умолчанию не поддерживается в шаблонах веб-экспорта. Его можно включить, скомпилировав пользовательские шаблоны веб-экспорта с помощью module_raycast_enabled=yes.

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

Свойства

int

bake_mask

4294967295

float

bake_simplification_distance

0.1

Occluder3D

occluder

Методы

bool

get_bake_mask_value(layer_number: int) const

void

set_bake_mask_value(layer_number: int, value: bool)


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

int bake_mask = 4294967295 🔗

  • void set_bake_mask(value: int)

  • int get_bake_mask()

Визуальные слои, которые следует учитывать при запекании для окклюдеров. В сгенерированную сетку окклюдера будут включены только MeshInstance3D, чьи VisualInstance3D.layers соответствуют этому bake_mask. По умолчанию все объекты с непрозрачными материалами учитываются при запекании окклюдера.

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


float bake_simplification_distance = 0.1 🔗

  • void set_bake_simplification_distance(value: float)

  • float get_bake_simplification_distance()

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

Геометрия окклюдера визуализируется на CPU, поэтому важно сохранить ее геометрию максимально простой. Поскольку буфер визуализируется с низким разрешением, менее подробные сетки окклюдера, как правило, все равно работают хорошо. Значение по умолчанию довольно агрессивное, поэтому вам, возможно, придется уменьшить его, если вы столкнетесь с ложными отрицательными результатами (объекты будут скрыты, хотя они видны камере). Значение 0.01 будет действовать консервативно и сохранит геометрию перцепционно не затронутой в буфере отбраковки окклюдера. В зависимости от сцены значение 0.01 все еще может заметно упростить сетку по сравнению с полным отключением упрощения.

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

Примечание: Это использует библиотеку meshoptimizer под капотом, аналогично генерации LOD.


Occluder3D occluder 🔗

Ресурс окклюдера для этого OccluderInstance3D. Вы можете сгенерировать ресурс окклюдера, выбрав узел OccluderInstance3D, а затем нажав кнопку Bake Occluders в верхней части редактора.

Вы также можете нарисовать свой собственный 2D-полигон окклюдера, добавив новый ресурс PolygonOccluder3D к свойству occluder в Инспекторе.

В качестве альтернативы вы можете выбрать примитивный окклюдер для использования: QuadOccluder3D, BoxOccluder3D или SphereOccluder3D.


Описания метода

bool get_bake_mask_value(layer_number: int) const 🔗

Возвращает, включен ли указанный слой bake_mask, учитывая layer_number от 1 до 32.


void set_bake_mask_value(layer_number: int, value: bool) 🔗

На основе value включает или отключает указанный слой в bake_mask, учитывая layer_number от 1 до 32.