Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

Окклюзионная кастрация

Выбор окклюзии — это процесс, который предотвращает Unity от выполнения вычислений рендеринга для GameObjects, которые полностью скрыты от зрения (окклюдированы) другими GameObjects.

В каждом кадре камеры выполняют операции вычленения, которые проверяют рендереры в Scene и исключают (cull) те, которые не нуждаются в рисовании. По умолчанию камеры выполняют фрустум-кулинг, который исключает все рендереры, которые не входят в пирамида видимостиCamera. Однако фрустум-кулинг не проверяет, не закрыт ли рендерер другими GameObjects, и поэтому Unity может по-прежнему тратить CPU и GPU время на операции рендеринга для рендереров, которые не видны в окончательном кадре. Unity не выполняет эти потерянные операции.

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

Когда использовать окклюзионную кастрацию

Чтобы определить, может ли удаление окклюзии улучшить производительность времени выполнения Project, рассмотрите следующие моменты:

  • Предотвращение потерянных операций рендеринга позволяет сэкономить как время CPU, так и GPU. Встроенное в Unity удаление окклюзии выполняет вычисления времени выполнения на CPU, что может компенсировать время CPU, которое оно экономит. Поэтому удаление окклюзии, скорее всего, приведет к повышению производительности, когда Project связан с GPU из-за перерисовки.
  • Unity загружает в память данные о вычленении окклюзии во время выполнения. Вы должны убедиться, что у вас достаточно памяти для загрузки этих данных.
  • Окклюзионное выделение лучше всего работает в сценах, где небольшие, четко определенные области четко отделены друг от друга сплошным GameObjects. Обычным примером являются комнаты, соединенные коридорами.
  • Вы можете использовать окклюзионный вычерк для окклюзии Динамического GameObjects, но Динамический GameObjects не может окклюзовать другие GameObjects. Если ваш Project генерирует геометрию Scene во время выполнения, то встроенный окклюзионный вычерк Unity не подходит для вашего Project.

Как работает окклюзионное удаление

Окклюзионное удаление генерирует данные о вашем Scene в Unity Editor, а затем использует эти данные во время выполнения, чтобы определить, что может видеть Camera. Процесс генерации данных известен как запекание.

Примечание: Если ваш проект использует Universal Render Pipeline (URP) или High Definition Render Pipeline (HDRP), вы можете вместо этого Включить GPU окклюзионное удаление в URP или Включить GPU окклюзионное удаление в HDRP.

При выпекании данных выделения окклюзии, Unity разделяет Scene на клетки и генерирует данные, которые описывают геометрию внутри клеток и видимость между соседними клетками. Unity затем объединяет клетки, где это возможно, чтобы уменьшить размер генерируемых данных. Чтобы настроить процесс запекания, вы можете изменить параметры в окне Выделение окклюзиии использовать Зоны окклюзии в вашем Scene.

Во время выполнения Unity загружает эти данные в память, и для каждого Camera, у которого включено свойство Occlusion Culling, он выполняет запросы на данные, чтобы определить, что может видеть Camera. Обратите внимание, что когда включено Occlusion Culling, Cameras выполняет как frustum culling, так и occlusion culling.