mirror of
https://github.com/godotengine/godot-docs-l10n.git
synced 2026-01-04 10:09:56 +03:00
172 lines
15 KiB
ReStructuredText
172 lines
15 KiB
ReStructuredText
:github_url: hide
|
||
|
||
.. _class_OccluderInstance3D:
|
||
|
||
OccluderInstance3D
|
||
==================
|
||
|
||
**Наследует:** :ref:`VisualInstance3D<class_VisualInstance3D>` **<** :ref:`Node3D<class_Node3D>` **<** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
|
||
|
||
Обеспечивает отбраковку окклюзии для 3D-узлов, что повышает производительность в закрытых областях.
|
||
|
||
.. rst-class:: classref-introduction-group
|
||
|
||
Описание
|
||
----------------
|
||
|
||
Отбраковка окклюзии может улучшить производительность рендеринга в закрытых/полуоткрытых областях, скрывая геометрию, которая закрыта другими объектами.
|
||
|
||
Система отбраковки окклюзии в основном статична. **OccluderInstance3D**\ s можно перемещать или скрывать во время выполнения, но это вызовет фоновый перерасчет, который может занять несколько кадров. Рекомендуется перемещать **OccluderInstance3D**\ s только спорадически (например, для целей процедурной генерации), а не делать это каждый кадр.
|
||
|
||
Система отбраковки окклюзии работает путем параллельной визуализации окклюдеров на CPU с использованием `Embree <https://www.embree.org/>`__, рисуя результат в буфер с низким разрешением, а затем используя его для индивидуальной отбраковки 3D-узлов. В 3D-редакторе можно предварительно просмотреть буфер отсечения окклюзии, выбрав **Perspective > Display Advanced... > Occlusion Culling Buffer** в левом верхнем углу 3D-вида. Качество буфера отсечения окклюзии можно настроить в настройках проекта.
|
||
|
||
\ **Запекание:** Выберите узел **OccluderInstance3D**, затем нажмите кнопку **Bake Occluders** в верхней части 3D-редактора. Будут учитываться только непрозрачные материалы; прозрачные материалы (альфа-смешанные или альфа-тестированные) будут игнорироваться при генерации окклюдера.
|
||
|
||
\ **Примечание:** Отсеивание окклюзии эффективно только в том случае, если :ref:`ProjectSettings.rendering/occlusion_culling/use_occlusion_culling<class_ProjectSettings_property_rendering/occlusion_culling/use_occlusion_culling>` имеет значение ``true``. Включение отсечения окклюзии влечет за собой затраты на CPU. Включайте отсечение окклюзии только в том случае, если вы действительно планируете его использовать. Большие открытые сцены с небольшим количеством или отсутствием объектов, блокирующих вид, как правило, не получат большой выгоды от отсечения окклюзии. Большие открытые сцены, как правило, получают больше пользы от LOD сетки и диапазонов видимости (:ref:`GeometryInstance3D.visibility_range_begin<class_GeometryInstance3D_property_visibility_range_begin>` и :ref:`GeometryInstance3D.visibility_range_end<class_GeometryInstance3D_property_visibility_range_end>`) по сравнению с отсечением окклюзии.
|
||
|
||
\ **Примечание:** Из-за ограничений памяти отсечение окклюзии по умолчанию не поддерживается в шаблонах веб-экспорта. Его можно включить, скомпилировав пользовательские шаблоны веб-экспорта с помощью ``module_raycast_enabled=yes``.
|
||
|
||
.. rst-class:: classref-introduction-group
|
||
|
||
Обучающие материалы
|
||
--------------------------------------
|
||
|
||
- :doc:`Отбраковка окклюзии <../tutorials/3d/occlusion_culling>`
|
||
|
||
.. rst-class:: classref-reftable-group
|
||
|
||
Свойства
|
||
----------------
|
||
|
||
.. table::
|
||
:widths: auto
|
||
|
||
+-------------------------------------+-----------------------------------------------------------------------------------------------------+----------------+
|
||
| :ref:`int<class_int>` | :ref:`bake_mask<class_OccluderInstance3D_property_bake_mask>` | ``4294967295`` |
|
||
+-------------------------------------+-----------------------------------------------------------------------------------------------------+----------------+
|
||
| :ref:`float<class_float>` | :ref:`bake_simplification_distance<class_OccluderInstance3D_property_bake_simplification_distance>` | ``0.1`` |
|
||
+-------------------------------------+-----------------------------------------------------------------------------------------------------+----------------+
|
||
| :ref:`Occluder3D<class_Occluder3D>` | :ref:`occluder<class_OccluderInstance3D_property_occluder>` | |
|
||
+-------------------------------------+-----------------------------------------------------------------------------------------------------+----------------+
|
||
|
||
.. rst-class:: classref-reftable-group
|
||
|
||
Методы
|
||
------------
|
||
|
||
.. table::
|
||
:widths: auto
|
||
|
||
+-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`get_bake_mask_value<class_OccluderInstance3D_method_get_bake_mask_value>`\ (\ layer_number\: :ref:`int<class_int>`\ ) |const| |
|
||
+-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`set_bake_mask_value<class_OccluderInstance3D_method_set_bake_mask_value>`\ (\ layer_number\: :ref:`int<class_int>`, value\: :ref:`bool<class_bool>`\ ) |
|
||
+-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
|
||
.. rst-class:: classref-section-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-descriptions-group
|
||
|
||
Описания свойств
|
||
--------------------------------
|
||
|
||
.. _class_OccluderInstance3D_property_bake_mask:
|
||
|
||
.. rst-class:: classref-property
|
||
|
||
:ref:`int<class_int>` **bake_mask** = ``4294967295`` :ref:`🔗<class_OccluderInstance3D_property_bake_mask>`
|
||
|
||
.. rst-class:: classref-property-setget
|
||
|
||
- |void| **set_bake_mask**\ (\ value\: :ref:`int<class_int>`\ )
|
||
- :ref:`int<class_int>` **get_bake_mask**\ (\ )
|
||
|
||
Визуальные слои, которые следует учитывать при запекании для окклюдеров. В сгенерированную сетку окклюдера будут включены только :ref:`MeshInstance3D<class_MeshInstance3D>`, чьи :ref:`VisualInstance3D.layers<class_VisualInstance3D_property_layers>` соответствуют этому :ref:`bake_mask<class_OccluderInstance3D_property_bake_mask>`. По умолчанию все объекты с *непрозрачными* материалами учитываются при запекании окклюдера.
|
||
|
||
Для повышения производительности и избежания артефактов рекомендуется исключить динамические объекты, мелкие объекты и приспособления из процесса запекания, переместив их на отдельный визуальный слой и исключив этот слой в :ref:`bake_mask<class_OccluderInstance3D_property_bake_mask>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_OccluderInstance3D_property_bake_simplification_distance:
|
||
|
||
.. rst-class:: classref-property
|
||
|
||
:ref:`float<class_float>` **bake_simplification_distance** = ``0.1`` :ref:`🔗<class_OccluderInstance3D_property_bake_simplification_distance>`
|
||
|
||
.. rst-class:: classref-property-setget
|
||
|
||
- |void| **set_bake_simplification_distance**\ (\ value\: :ref:`float<class_float>`\ )
|
||
- :ref:`float<class_float>` **get_bake_simplification_distance**\ (\ )
|
||
|
||
Расстояние для упрощения, используемое для упрощения сгенерированного полигона окклюдера (в 3D-единицах). Более высокие значения приводят к менее подробной сетке окклюдера, что повышает производительность, но снижает точность отбраковки.
|
||
|
||
Геометрия окклюдера визуализируется на CPU, поэтому важно сохранить ее геометрию максимально простой. Поскольку буфер визуализируется с низким разрешением, менее подробные сетки окклюдера, как правило, все равно работают хорошо. Значение по умолчанию довольно агрессивное, поэтому вам, возможно, придется уменьшить его, если вы столкнетесь с ложными отрицательными результатами (объекты будут скрыты, хотя они видны камере). Значение ``0.01`` будет действовать консервативно и сохранит геометрию *перцепционно* не затронутой в буфере отбраковки окклюдера. В зависимости от сцены значение ``0.01`` все еще может заметно упростить сетку по сравнению с полным отключением упрощения.
|
||
|
||
Установка этого значения в ``0.0`` полностью отключает упрощение, но вершины в точно таком же положении все равно будут объединены. Сетка также будет переиндексирована, чтобы уменьшить как количество вершин, так и индексов.
|
||
|
||
\ **Примечание:** Это использует библиотеку `meshoptimizer <https://meshoptimizer.org/>`__ под капотом, аналогично генерации LOD.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_OccluderInstance3D_property_occluder:
|
||
|
||
.. rst-class:: classref-property
|
||
|
||
:ref:`Occluder3D<class_Occluder3D>` **occluder** :ref:`🔗<class_OccluderInstance3D_property_occluder>`
|
||
|
||
.. rst-class:: classref-property-setget
|
||
|
||
- |void| **set_occluder**\ (\ value\: :ref:`Occluder3D<class_Occluder3D>`\ )
|
||
- :ref:`Occluder3D<class_Occluder3D>` **get_occluder**\ (\ )
|
||
|
||
Ресурс окклюдера для этого **OccluderInstance3D**. Вы можете сгенерировать ресурс окклюдера, выбрав узел **OccluderInstance3D**, а затем нажав кнопку **Bake Occluders** в верхней части редактора.
|
||
|
||
Вы также можете нарисовать свой собственный 2D-полигон окклюдера, добавив новый ресурс :ref:`PolygonOccluder3D<class_PolygonOccluder3D>` к свойству :ref:`occluder<class_OccluderInstance3D_property_occluder>` в Инспекторе.
|
||
|
||
В качестве альтернативы вы можете выбрать примитивный окклюдер для использования: :ref:`QuadOccluder3D<class_QuadOccluder3D>`, :ref:`BoxOccluder3D<class_BoxOccluder3D>` или :ref:`SphereOccluder3D<class_SphereOccluder3D>`.
|
||
|
||
.. rst-class:: classref-section-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-descriptions-group
|
||
|
||
Описания метода
|
||
------------------------------
|
||
|
||
.. _class_OccluderInstance3D_method_get_bake_mask_value:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **get_bake_mask_value**\ (\ layer_number\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_OccluderInstance3D_method_get_bake_mask_value>`
|
||
|
||
Возвращает, включен ли указанный слой :ref:`bake_mask<class_OccluderInstance3D_property_bake_mask>`, учитывая ``layer_number`` от 1 до 32.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_OccluderInstance3D_method_set_bake_mask_value:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **set_bake_mask_value**\ (\ layer_number\: :ref:`int<class_int>`, value\: :ref:`bool<class_bool>`\ ) :ref:`🔗<class_OccluderInstance3D_method_set_bake_mask_value>`
|
||
|
||
На основе ``value`` включает или отключает указанный слой в :ref:`bake_mask<class_OccluderInstance3D_property_bake_mask>`, учитывая ``layer_number`` от 1 до 32.
|
||
|
||
.. |virtual| replace:: :abbr:`virtual (Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-либо эффект.)`
|
||
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
|
||
.. |const| replace:: :abbr:`const (Этот метод не имеет побочных эффектов. Он не изменяет ни одну из переменных-членов экземпляра.)`
|
||
.. |vararg| replace:: :abbr:`vararg (Этот метод принимает любое количество аргументов после описанных здесь.)`
|
||
.. |constructor| replace:: :abbr:`constructor (Этот метод используется для создания типа.)`
|
||
.. |static| replace:: :abbr:`static (Этот метод не нуждается в вызове экземпляра, поэтому его можно вызвать напрямую, используя имя класса.)`
|
||
.. |operator| replace:: :abbr:`operator (Этот метод описывает допустимый оператор для использования с этим типом в качестве левого операнда.)`
|
||
.. |bitfield| replace:: :abbr:`BitField (Это значение является целым числом, составленным как битовая маска следующих флагов.)`
|
||
.. |void| replace:: :abbr:`void (Нет возвращаемого значения.)`
|