Искать

Свет, камера, мотор! Настройте камеры в Cinemachine

Last updated: November 2018

Cinemachine стала стандартной системой камер в Unity со времен Unity 2017. Под капотом это улучшенная система со множеством настраиваемых параметров и возможностей. Узнайте о сложных вариантах использования и о хитростях Cinemachine от Циро Континицио, технического евангелиста Unity.

Нескольких автоматов Cinemachine

Иногда в сцене нужно установить несколько камер для многопользовательского режима с разделением эффекта или, допустим, для создания эффекта «картинка в картинке» (например, для камер наблюдения). Несмотря на то, что Cinemachine управляет всеми камерами с помощью одного компонента Brain, в Unity можно добавить несколько таких контроллеров, каждый из которых будет отвечать за свой набор виртуальных камер.

На этом примере изображен интерфейс с видеополем, созданным с помощью второй камеры, направленной на лица персонажей, с отрисовкой в RenderTexture. Чтобы видеоряд был качественным, можно использовать Cinemachine, который будет удерживать лица персонажей в кадре.

cinemachine-RenderTexture-MultipleBrains

Все очень просто: создайте два объекта Unity Camera и добавьте к каждой из них компонент Cinemachine Brain. После этого вы сможете добавить столько виртуальных камер, сколько нужно.

Multiple-Cinemachine-Brains

Чтобы компонент Brain видел только некоторые из виртуальных камер, нужно сделать следующее.

  1. Убедитесь, что виртуальные камеры, меняющие настройки отдельной камеры, находятся на уникальном слое (например, "Characters").
  2. Настройте атрибут Culling Mask камеры так, чтобы она отрисовывала объекты только на этом слое.
  3. Настройте атрибут Culling Mask другой камеры так, чтобы она НЕ отрисовывала объекты на этом слое.

Помните, что использование Culling Mask вовсе не означает, что вам нужно изменить настройки рендеринга. Имея 31 слой, вы легко можете выделить один из них специально для размещения виртуальных камер.

Весь процесс показан на видео ниже:

Замена оси "World Up"

Cinemachine работает на основе допущения, что в сцене есть ось "World Up", которая по умолчанию соответствует положительному направлению Y. Ориентируясь на это, система определяет ограничения для каждой камеры, например, исключает вид строго сверху или строго снизу (реальные камеры так не умеют).

В случае с 2D-камерами (которые настроены на ортогональный режим отображения) Cinemachine ведет себя по-другому, и ограничивает перемещения камеры по горизонтальной плоскости, создаваемой двумя оставшимися осями, то есть осями X и Z.

Но иногда возникает необходимость переназначить ось World Up и соответствующую плоскость. Например, если вы работаете над игрой с использованием 2D-физики, то вам для игры приходится использовать плоскость XY, а в некоторых случаях нужно, чтобы камера была направлена на плоскость под некоторым углом — смотрите рисунок ниже:

world-up-override-cinemachine

Чтобы создать этот эффект, вы должны назначить компонент Transform в атрибуте "World Up Override" компонента Cinemachine Brain. Создайте пустой объект GameObject и используйте его как манипулятор, чтобы подобрать подходящую ось World Up для настройки Cinemachine.

Рациональное использование постобработки

Cinemachine поддерживает стеки постобработки и 1-й, и 2-й версии, но лучше всего последний, потому что он более гибок при использовании с Cinemachine в силу объемных алгоритмов.

При использовании стека и Cinemachine мы рекомендуем делить эффекты на две категории:

  1. общие эффекты, которые накладываются на все планы;
  2. эффекты, уникальные для отдельного плана (на языке Cinemachine — для отдельной VirtualCamera).

Такие эффекты, как AmbientOcclusion, Colour Grading, Grain и другие стилистические эффекты, обычно определяются в первую группу, поскольку стиль видеоряда должен сохраняться на протяжении всей игры. Эффекты Depth of Field, Lens Distortion, Chromatic Aberration и другие эмуляторы физических характеристик камеры лучше подходят для назначения к отдельным виртуальным камерам, но никто не запрещает вам сделать по-другому!

На рисунке ниже вы увидите пример использования локального объема пост-обработки, который дает эффект старой камеры видеонаблюдения:

post-processing-intro

Чтобы достичь такого, нужно назначить эффект Post Process Volume непосредственно виртуальной камере, которая не должна иметь отметки "Is Global", и добавить коллайдер. Обычно достаточно небольшого сферического коллайдера (радиусом около 0,05) поэтому убедитесь, что камера не пересечется случайно с этим объемом во время игры.

Вот и все. На один объект мы добавили виртуальную камеру, объем постобработки и коллайдер:

smart-use-post-processing

После этого можно добавить все остальные эффекты, возможно даже с заменой основного профиля путем включения соответствующих атрибутов. Помните, что если вы не включите атрибут, то он сохранит значение по умолчанию — обычно это глобальный объем. Если вы включите его, то учитываться будет только указанный вами объем.

Создание эффекта приближения камеры на тележке

И наконец, небольшой кинематографический трюк. Когда-нибудь видели эффект приближения камеры на тележке? Он был впервые использован в фильме Альфреда Хичкока «Головокружение» 1958 года и с тех пор встречается в самых разных фильмах.

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

Взгляните на пример ниже, который запускается прямо во время игрового процесса:

Cinemachine-Dolly-Zoom

Чтобы создать этот эффект, нужно две виртуальные камеры с одинаковыми настройками. Одну из них нужно отвести назад и уменьшить угол поля зрения (Field of View). Настройте плавный переход между камерами с помощью Timeline или атрибута Priority и вы получите желаемое.

Помните, что этот эффект работает только с камерами перспективной проекции, не ортогональной!

Дополнительные ресурсы

Мы очень хотим знать, нравится ли вам наш контент.

Да, хочу больше Нет, могло быть и лучше