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.
Обучающие материалы
Свойства
|
||
|
||
Методы
get_bake_mask_value(layer_number: int) const |
|
void |
set_bake_mask_value(layer_number: int, value: bool) |
Описания свойств
Визуальные слои, которые следует учитывать при запекании для окклюдеров. В сгенерированную сетку окклюдера будут включены только MeshInstance3D, чьи VisualInstance3D.layers соответствуют этому bake_mask. По умолчанию все объекты с непрозрачными материалами учитываются при запекании окклюдера.
Для повышения производительности и избежания артефактов рекомендуется исключить динамические объекты, мелкие объекты и приспособления из процесса запекания, переместив их на отдельный визуальный слой и исключив этот слой в bake_mask.
float bake_simplification_distance = 0.1 🔗
Расстояние для упрощения, используемое для упрощения сгенерированного полигона окклюдера (в 3D-единицах). Более высокие значения приводят к менее подробной сетке окклюдера, что повышает производительность, но снижает точность отбраковки.
Геометрия окклюдера визуализируется на CPU, поэтому важно сохранить ее геометрию максимально простой. Поскольку буфер визуализируется с низким разрешением, менее подробные сетки окклюдера, как правило, все равно работают хорошо. Значение по умолчанию довольно агрессивное, поэтому вам, возможно, придется уменьшить его, если вы столкнетесь с ложными отрицательными результатами (объекты будут скрыты, хотя они видны камере). Значение 0.01 будет действовать консервативно и сохранит геометрию перцепционно не затронутой в буфере отбраковки окклюдера. В зависимости от сцены значение 0.01 все еще может заметно упростить сетку по сравнению с полным отключением упрощения.
Установка этого значения в 0.0 полностью отключает упрощение, но вершины в точно таком же положении все равно будут объединены. Сетка также будет переиндексирована, чтобы уменьшить как количество вершин, так и индексов.
Примечание: Это использует библиотеку meshoptimizer под капотом, аналогично генерации LOD.
Occluder3D occluder 🔗
void set_occluder(value: Occluder3D)
Occluder3D get_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.