Слои
Обзор слоев
Слои позволяют настраивать рендеринговый цикл для вашего приложения. Используя слои, вы можете реализовать некоторые продвинутые функции рендеринга. Например:
- изменить порядок, в котором отображаются ваши сетки
- установить камеры для отображения только некоторых сеток
- установить, какие источники света влияют на какие сетки
При создании приложения PlayCanvas по умолчанию создается набор слоев, которые всегда присутствуют. Вы можете создавать свои собственные слои и изменять их порядок в соответствии с вашими конкретными требованиями.
На фундаментальном уровне слой представляет собой список сеток для рендеринга. Каждый слой разделен на два подслоя: непрозрачный и прозрачный. Когда сетка добавляется в слой, слой сохраняет ее в одном из двух подслоев, в зависимости от того, требуется ли материал на сетке для прозрачного рендеринга или нет. Это связано с тем, что прозрачные подслои часто сортируются иначе, чем непрозрачные подслои.
Порядок рендеринга
Существует три фактора, которые определяют порядок, в котором отображаются сетки.
Приоритет камеры
Приоритет камеры - основной фактор, который контролирует порядок, в котором отображаются сетки. Каждая камера имеет приоритет, назначенный ей, и камеры с меньшими значениями приоритета отображаются первыми.
У каждой камеры также настроен список слоев, который определяет, какие слои отображает камера. Их порядок описан в следующем разделе.
Композиция слоя
Далее идет порядок слоев в приложении. Каждое приложение содержит объект pc.LayerComposition
, который доступен в вашем приложении
как this.app.scene.layers
. Композиция слоя определяет порядок всех подслоев. Упорядочение основано на подслое, а не на слое, чтобы
вы могли, например, сначала отобразить все непрозрачные подслои, а затем все прозрачные подслои.
Примечание: Помещение компонента модели в слой, который отображается после слоя мира, не заставит модель
отображаться поверх всего в слое мира! Стандартный материал, используемый для отображения моделей, имеет свойство depthTest
. Когда
это значение истинно (по умолчанию), перед отображением каждого пикселя модели GPU проверяет, есть ли что-то еще перед этим пикселем. Даже если
этот пиксель был нарисован на более раннем слое, тест глубины гарантирует, что будут нарисованы только видимые пиксели. Если вы хотите
игнорировать расстояние от камеры при отображении сетки, отключите depthTest
в вашем материале.
Режимы сортировки
У каждого подслоя есть режим сортировки. В каждом кадре сетки в подслое сортируются в соответствии с его режимом сортировки. Это определяет порядок, в котором сетки отображаются при рендеринге подслоя.
- Материал / Сетка (
pc.SORTMODE_MATERIALMESH
) - Это режим по умолчанию для непрозрачных подслоев. Экземпляры сеток сортируются для минимизации переключения между материалами и сетками для улучшения производительности рендеринга. - Сзади вперед (
pc.SORTMODE_BACK2FRONT
) - Это режим по умолчанию для прозрачных подслоев. Экземпляры сеток сортируются сзади вперед. Это способ правильного отображения многих полупрозрачных объектов на разной глубине, один наложен поверх другого. - Спереди назад (
pc.SORTMODE_FRONT2BACK
) - Экземпляры сеток сортируются спереди назад. В зависимости от GPU и сцены, этот вариант может обеспечить лучшую производительность, чемpc.SORTMODE_MATERIALMESH
из-за уменьшения перекрытия. - Вручную (
pc.SORTMODE_MANUAL
) - Это режим по умолчанию для пользовательского интерфейса или 2D-слоев. Экземпляры сеток сортируются на основе свойстваdrawOrder
. Компонент элемента и компонент спрайта должны быть размещены в слоях с этим режимом сортировки. - Нет (
pc.SORTMODE_NONE
) - Сортировка не применяется. Экземпляры сеток отображаются в том же порядке, в котором они были добавлены в слой.
Слои по умолчанию
Приложения PlayCanvas создаются с набором слоев по умолчанию. Вы должны оставить эти слои на месте, так как некоторые функции движка не будут работать правильно, если их не будет. Порядок по умолчанию указан ниже:
- Мир (непрозрачный) - Используется для отображения компонентов, которые не являются прозрачными, и большинства непрозрачных компонентных сеток.
- Depth (Opaque) - Используется для захвата цвета или буфера глубины сцены, см. Depth Layer.
- Skybox (Opaque) - Используется для отображения небесного куба. Он отображается после World (Opaque) для уменьшения перекрытия.
- World (Transparent) - Используется для отображения прозрачных компонентов и других прозрачных компонентных сеток.
- Immediate (Opaque) - Используется для отображения сеток в режиме немедленного режима. например,
app.renderLine()
. - Immediate (Transparent) - Используется для отображения сеток в режиме немедленного режима. например,
app.renderLine()
. - UI (Transparent) - Используется для отображения компонентов Element. Все компоненты Element прозрачны, поэтому подслой Opaque не используется.
Использование пользовательских слоев
Слои по умолчанию отлично подходят для реализации существующих функций движка, но настоящая сила заключается в создании собственных слоев для настройки порядка отображения вашего контента.
Создание слоя
Слои управляются из панели LAYERS в разделе Settings редактора.
В разделе Слои введите имя слоя, который вы хотите создать, и нажмите Add Layer. Ваш новый слой появится в списке доступных слоев под кнопкой.
Установка режима сортировки
Вы можете выбрать режим сортировки для каждого подслоя в списке слоев. Разверните свой слой и выберите режим сортировки из выпадающего меню.
Выбор порядка слоев
Добавьте подслой в композицию слоев, выбрав ADD SUBLAYER и выбрав, какой подслой вы хотите добавить. После того, как ваш слой будет в списке Render Order, вы можете изменить порядок, перетаскивая каждый подслой вверх и вниз.
Отображение сущностей в слоях
Компоненты, которые отображают сетки, все имеют свойство layers
, которое используется для определения того, в какой слой и подслой
должна быть добавлена сетка. К таким компонентам относятся: Model, Element, Sprite, Particle System. Компоненты Camera и Light также имеют
свойство layers
для определения того, какие слои они отображают и освещают соответственно.
Примечание: Модель назначена на Test Layer. Чтобы она была отображена, камера должна включать Test Layer в свой список слоев. Чтобы она была освещена, свет должен включать Test Layer в свой список слоев.
Рекомендуемая настройка
Ваша сцена обычно содержит множество сущностей, которые отображают сетки. Рекомендуется, чтобы каждая из них была на одном слое. В большинстве случаев это будет слой World, но для большего контроля вы можете назначить их на слои, такие как Terrain, Buildings, Characters.
Новая сцена по умолчанию содержит одну камеру, и это все, что нужно во многих приложениях. Дополнительные камеры полезны для случаев, таких как переключение между разными камерами на сцене, или при отображении картинки в картинке или разделенного экрана, или при отображении сцены в текстуре.
Когда вы добавляете дополнительную камеру, рекомендуется выполнить следующие шаги:
- Установите приоритет новых и существующих камер для контроля порядка их отображения.
- Настройте слои новой камеры, чтобы указать, какие слои она отображает. Например, вы можете отображать камеру карты сверху вниз и хотите видеть только слои Terrain и Building, но не Characters.
- Если ваша камера отображает текстуру, используйте скрипт для назначения цели рендеринга свойству
renderTarget
камеры.