Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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.