Files
godot-docs-l10n/classes/ru/class_occluderinstance3d.rst

172 lines
15 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

: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 (Нет возвращаемого значения.)`