Как стать автором
Обновить
1517.59
OTUS
Цифровые навыки от ведущих экспертов

Как сделать хорошую камеру в Unity — мощь Cinemachine

Время на прочтение7 мин
Количество просмотров4.3K
Автор оригинала: Mina Pêcheux

Правильный ракурс — это очень важно!

Harold Halibut от Slow Bros (Изображение с https://unity.com/fr/unity/features/editor/art-and-design/cinemachine)
Harold Halibut от Slow Bros (Изображение с https://unity.com/fr/unity/features/editor/art-and-design/cinemachine)

В предыдущем туториале, посвященном деревьям поведения, я показывал пример небольшой сцены со стражем, который обходит локацию, и летающей камерой, которая постоянно за ним следит:

Смотреть GIF

Чтобы автоматизировать движение камеры, я использовал замечательный плагин для Unity Cinemachine.

Итак, в этом туториале мы рассмотрим:

  • Почему сделать хорошую игровую камеру сложно

  • Что такое Cinemachine и как его установить

  • Как настроить базовую виртуальную камеру Cinemachine

  • Как комбинировать ракурсы с помощью Timeline

🧐 Сделать хорошую игровую камеру сложно!

В каком-то смысле первым 2D-играм (например, Mario, Pacman или Space Invaders) было в этом плане легче: они обычно использовали либо вид сверху вниз (top-down), либо вид сбоку, и все были довольны. Потому что в данном контексте эти виды показывали все, что нужно, в ясной и обозримой форме. Конечно, нужно было следить за тем, чтобы камера следовала за персонажем, и, как правило, добавлять некоторые задержки и амортизацию, чтобы сделать движение более плавным, но в целом логика была довольно простой.

В старых 2D сайд-скроллерах расположение камеры, обеспечивающее максимальную обозримость, было простым и интуитивно понятным :) (Изображение с https://github.com/ahmetcandiroglu/Super-Mario-Bros)
В старых 2D сайд-скроллерах расположение камеры, обеспечивающее максимальную обозримость, было простым и интуитивно понятным :) (Изображение с https://github.com/ahmetcandiroglu/Super-Mario-Bros)

Когда люди начали погружаться в 3D и внедрять его в видеоигры, индустрия во многом преобразилась. И, помимо всего прочего, это быстро заставило геймдизайнеров переосмыслить систему камер. Благодаря добавлению еще одного измерения взаимодействие со средой стало совсем другим, и вам нужно было одномоментно показывать игроку гораздо больше.

Наш человеческий глаз от природы приспособлен к восприятию глубины и реагированию на 3D‑окружение. Однако в видеоиграх (как и в фильмах) в конечном итоге вы все равно выводите изображение на 2D‑экран. Это означает, что вам нужно применять специальные приемы, чтобы дать игрокам полное представление о виртуальном 3D‑мире через 2D‑рендер.

Конечно, эта проблема возникла не в видеоиграх — задолго до них уже были придуманы методы представления трехмерных форм и пространств на листе бумаги. Эти методы называются «графическими проекциями», и их можно разделить на ряд категорий в зависимости от того, насколько они приближены к реальности. Пытаетесь ли вы сохранить пропорции или, наоборот, максимально разложить объект, чтобы четко определить все его части? Используете ли вы точки схода? Используете ли вы изометрию?

Все эти вариации являются причиной существования множества типов графических проекций:

В зависимости от контекста, одна проекция может подходить лучше других, например:

  • Большинство стратегий используют аксонометрические проекции для лучшего отображения юнитов на карте.

  • В то время как в FPS или RPG, которые хотят погрузить игрока в сюжет, используется перспектива, чтобы как можно лучше имитировать реальный мир.

  • Многие 2D-платформеры используют ортографический вид сбоку, чтобы сделать больший акцент на геометрии уровня.

Но независимо от типа проекции, вам придется столкнуться с дополнительным уровнем сложности — движением! Видеоигры — это интерактивная среда, и игрок ожидает, что сможет передвигаться в вашем виртуальном мире ;)

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

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

... и если вы работаете с игровым движком Unity, то вам обязательно нужно познакомиться с пакетом Cinemachine! :)

⭐️ Что такое Cinemachine? (и как его установить)

Как сказано в официальной документации Unity:

[...] Cinemachine — это набор инструментов для создания динамических codeless камер, выбирающих лучшие кадры на основе композиции сцены. Он позволяет создавать, итерировать, экспериментировать и настраивать поведение камеры в режиме реального времени.

Разработанный самой командой Unity, этот бесплатный пакет позволяет легко и быстро создавать камеры для игр или фильмов. Он абстрагирует многие сложности, связанные с процессом настройки камеры, и позволяет довольно просто реализовать следование за объектами на сцене, когда камера перемещается, как будто она прикреплена к операторской тележке, вращается вместе с игроком и т.д.

На самом деле, он настолько полезен, что во многих туториалах можно найти мысль, что это довольно странно, что он не поставляется с Unity по умолчанию! Но в любом случае, Cinemachine довольно легко установить с помощью Package Manager.

Чтобы добавить этот плагин в свой проект, просто откройте окно Package Manager и найдите "Cinemachine" в реестре Unity, а затем кликните "Install":

После его установки вы получите доступ к новым объектам в совершенно новом меню "Cinemachine":

Основная идея Cinemachine заключается втом, что он использует вторую «виртуальную» камеру, которая управляет реальной камерой Unity. Опция «Create Virtual Camera» позволяет создать базовую виртуальную камеру, которую затем можно настроить, как вам будет нужно. Другие варианты — это уже готовые камеры Cinemachine.

Но независимо от того, какой объект вы создадите на своей сцене, этот объект будет иметь компонент CinemachineVirtualCamera, а в камеру будет автоматически добавлен компонент CinemachineBrain:

Слева — реальная камера, справа — виртуальная камера, которая управляет ее движением и вращением.

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

⚙️ Настройка базовой виртуальной камеры Cinemachine

Примечание: если вам нужна более подробная информация, я рекомендую вам ознакомиться с официальной серией туториалов по Cinemachine от Unity :)

Если вы решите настроить свою собственную камеру Cinemachine, то вы увидите, что в ней есть много параметров,  которые можно задать! Два наиболее важных из них — это поля "Follow" и "Look At".

Отслеживание цели на сцене

С помощью поля "Follow", вы можете заставить камеру отслеживать определенный трансформ на сцене и перемещаться параллельно ему, как будто она находится на рельсах рядом с целевым объектом.

Чтобы камера могла следовать за целью, вам необходимо выбрать определенный тип тела. Например, здесь я использовал Framing Transposer, который нацелен на стража в центре сцены, а виртуальная камера имеет небольшой поворот по оси X:

Смотреть GIF

Скрипт Cinemachine автоматически вычисляет положение реальной камеры на основе параметров виртуальной камеры... и самое замечательное, что, как только вы начинаете двигать персонажа, все работает!

Кроме того, вы можете заметить, что по умолчанию в трекинге есть даже некоторая амортизация, которая делает движение камеры во время следования более плавным :)

Вращение вокруг цели

Поле "LookAt", с другой стороны, полезно, если вы хотите, чтобы камера оставалась в одном положении, но поворачивалась, чтобы держать объект в поле зрения.

Вот та же сцена, но с камерой, использующей поле "LookAt" вместо поля "Follow":

Смотреть GIF

Чтобы определить, как камера будет отслеживать цель, вы можете перейти к опциям "Aim". Здесь вы можете задать мертвую зону, мягкую зону, опциональное смещение...

Погружаемся глубже...

Cinemachine — это огромный набор инструментов, и, честно говоря, поначалу я запутался во всех его параметрах. Но, попробовав различные типы тел и варианты нацеливания, я в конце концов немного освоился с этим удивительным пакетом.

От "Orbital Transposer", который позволяет вращать камеру вокруг объекта с помощью мыши, до "3rd Person Follow", который делает процесс настройки камеры для RPG простым занятием, или даже "Tracked Dolly" для point-and-click игр — в пакете есть практически все, что вам может понадобиться ;)

🎬 Комбинирование ракурсов

Как следует из названия, Cinemachine, конечно же, отлично подходит и для кинематографических съемок! Одно дело — динамическая адаптация к положению трансформы, но что, если у нас на сцене есть какая-то заранее заданная анимация, и мы хотим, чтобы она оставалась в кадре?

В этом разделе мы будем использовать окно Timeline для создания последовательностей. Его можно открыть, перейдя в меню Window > Sequencing > Timeline.

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

Примечание (и кстати): если вы заинтересованы в том, чтобы я написал туториал по основам таймлайнов Unity, не стесняйтесь, пишите об этом в комментариях! ;)

Здесь представлен базовый таймлайн для моего маленького персонажа-стража с двумя дорожками анимации (синим цветом) и одной дорожкой Cinemachine (красным цветом). Две анимационные дорожки определяют трансформу персонажа и анимацию, которую он в данный момент воспроизводит (ходит или бездействует). Дорожка Cinemachine позволяет мне создать красивую последовательность ракурсов.

Как видите, в левой колонке, где находится список дорожек, я назначил свою основную камеру (точнее, ее компонент Cinemachine Brain) на слот дорожки Cinemachine:

Затем я создал два ракурса Cinemachine и поместил их на дорожке Timeline:

При создании кадра Cinemachine необходимо задать ему виртуальную камеру; мы можем выбрать существующую или создать совершенно новую виртуальную камеру:

Наконец, осталось только настроить виртуальную камеру (камеры) Cinemachine, как мы уже делали ранее, и мы получим красивую последовательность кадров! Вы даже можете перетащить один кадр на другой, чтобы автоматически создать плавный переход между ними при переводе вида с одной виртуальной камеры на другую:

Очень крутая особенность Timeline заключается в том, что он работает в режиме предварительного просмотра в редакторе — так что вам даже не нужно запускать игру, чтобы увидеть, как все будет выглядеть в итоге! И тадааа: мой страж теперь ходит вокруг, а камера сначала смотрит наблюдает за ним со стороны, а затем следует за ним :)

Смотреть GIF

Заключение

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

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


В заключение приглашаем всех желающих на открытые уроки, которые пройдут в ноябре в рамках курса "Unity Game Developer. Professional":

Теги:
Хабы:
+9
Комментарии1

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS