Несколько камер: порядок рендеринга, render order

В PlayCanvas можно использовать несколько камер для рендеринга сцены с различных точек зрения. Это предоставляет множество возможностей для создания сложных визуальных эффектов, таких как картирование окружения, создание пост-обработки, многослойный рендеринг и т. д. Однако управление порядком рендеринга камер требует внимательности, так как каждый рендер-канал будет оказывать влияние на конечное изображение.

Каждая камера в PlayCanvas имеет свойство renderOrder, которое определяет порядок рендеринга между камерами. Это свойство задаёт приоритет, с которым камера будет использоваться в процессе рендеринга. Камеры с меньшим значением renderOrder будут рендериться первыми, а те, у которых это значение больше, будут рендериться позже. Камера с самым высоким значением renderOrder будет рендериться последней.

Это поведение имеет большое значение, когда нужно отображать элементы в одном и том же месте сцены, но с разными слоями рендеринга. Например, для наложения пост-эффектов, создания отражений или рендеринга UI, часто требуется рендерить элементы в специфическом порядке.

Как работает renderOrder

Когда несколько камер активны в сцене, они будут поочерёдно обрабатывать и выводить изображение на экран, начиная с камеры с наименьшим значением renderOrder. Например:

  • Камера 1 с renderOrder = 0
  • Камера 2 с renderOrder = 1

В данном случае камера с renderOrder = 0 будет рендериться первой, и результат рендеринга будет наложен на экран, после чего камера с renderOrder = 1 будет рендерить своё изображение, дополняя или перекрывая предыдущее.

Если необходимо, чтобы одна камера рендерила элементы поверх другой (например, UI-элементы, которые должны быть всегда поверх всех объектов сцены), следует задать ей более высокое значение renderOrder.

Установка renderOrder камер

Для изменения порядка рендеринга камеры можно воспользоваться свойством renderOrder объекта камеры. Например, для того чтобы камера с рендерила сцены в порядке:

// Получаем камеры
var camera1 = app.root.findByName('Camera1').camera;
var camera2 = app.root.findByName('Camera2').camera;

// Устанавливаем порядок рендеринга
camera1.renderOrder = 0;
camera2.renderOrder = 1;

Таким образом, камера с renderOrder = 0 будет обрабатывать рендеринг первой, а камера с renderOrder = 1 – второй.

Рендеринг нескольких камер с разными слоями

PlayCanvas также позволяет камерам использовать различные слои рендеринга. Слои используются для управления видимостью объектов, которые могут быть рендерены только определёнными камерами. Камеры могут иметь назначенные слои, и объекты, принадлежащие этим слоям, будут рендериться только камерами, которые настроены на эти слои.

// Камера, рендерящая только определенные слои
camera.layer = layer;

При этом порядок рендеринга будет зависеть не только от renderOrder, но и от того, какие именно слои активны для каждой камеры.

Использование нескольких камер для пост-обработки

Одним из часто встречающихся случаев использования нескольких камер является рендеринг пост-эффектов. Это может быть, например, размытие, изменение яркости, цветокоррекция или любые другие визуальные эффекты, которые должны быть применены после того, как сцена будет отрендерена.

В таком случае первый рендеринг может быть обычной сценой, выполненной одной или несколькими камерами, а затем второй рендеринг будет использоваться для пост-обработки, где изображение из первой камеры применяется в качестве текстуры и на неё накладываются эффекты.

// Камера для рендеринга основной сцены
var sceneCamera = app.root.findByName('SceneCamera').camera;
sceneCamera.renderOrder = 0;

// Камера для пост-обработки
var postProcessCamera = app.root.findByName('PostProcessCamera').camera;
postProcessCamera.renderOrder = 1;

Зачем может понадобиться несколько камер

Несколько камер полезны для различных целей:

  1. Отражения и преломления: Сцена может быть рендерена с двух точек зрения: одна камера будет снимать обычную сцену, а вторая – отразить или преломить изображение через зеркало или стекло.

  2. Пост-обработка: Один рендеринг может включать все элементы сцены, а другой — эффекты, такие как размытие, тени или цветокоррекция.

  3. UI: Камера, рендерящая UI, часто рендерится поверх всех остальных камер. Это полезно, когда нужно, чтобы пользовательский интерфейс был всегда видим.

  4. Параллаксы и эффекты глубины: Для достижения различных визуальных эффектов можно использовать несколько камер для рендеринга слоёв сцены с разными точками зрения.

Подведение итогов

Использование нескольких камер в PlayCanvas предоставляет гибкость в создании сложных визуальных эффектов и упрощает управление рендерингом различных элементов сцены. Параметр renderOrder помогает установить точный порядок рендеринга камер, что важно для обеспечения правильного наложения визуальных эффектов и отображения сцены.