Как создавались реалистичные анимации, диалоги и реакции NPC.
Многим игрокам в Watch Dogs 2 запомнились миссии «Вторжения в частную жизнь». Если в первой части они позволяли просто подглядывать за жертвами, то во второй игроки могли напрямую влиять на происходящее, взламывая электронику. Об особенностях разработки этих миссий и о том, с какими сложностями пришлось столкнуться команде, порталу Gamasutra рассказал Кристофер Драгерт (Christopher Dragert), лид-программист из Ubisoft Toronto.
DTF публикует перевод статьи.
Побочные миссии «Privacy Invasion» были и в оригинальной Watch Dogs. Они позволяли игрокам взламывать камеры и тайно наблюдать за NPC. Пользователи смотрели небольшие кат-сцены, узнавали подробностями домашнего быта персонажей. Эти миссии были популярны, но ограничены: в них практически отсутствовал геймплей.
В Watch Dogs 2 мы решили его добавить. Идея была в том, чтобы дать игроку возможность взламывать камеры, компьютеры и прочую электронику в комнате. NPC, в свою очередь, реагировали бы на эти события так, чтобы создавался нарратив, ещё больше вовлекающий пользователя в игровой процесс. Мы поставили перед собой задачу достичь кинематографического качества: использовалась анимация с захватом движений и бесшовная «склейка» между возможными вариантами выбора.
Мы хотели значительно усилить эффект погружения. Новые миссии были названы «Invasion of Privacy 2.0».
Обзор
Миссии «Вторжения в частную жизнь» (далее — «Вторжения») начинаются со взлома распределительного щитка. Точка обзора игрока перемещается в камеру внутри устройства — он видит комнату и NPC внутри. Пользователь может осматриваться, идентифицировать персонажей и взламываемые предметы, а также переключаться между камерами для смены ракурса.
Продвижение осуществляется посредством взлома окружающих объектов. Например, в финале миссии «Whistleblower» мы видим человека, почти доведённого до самоубийства шантажистами. Можно взломать его телефон, чтобы попытаться связаться с ним и помочь. Однако если вы взломаете только телефон, люди, с которыми вы свяжетесь, заставят его сделать последний шаг. А вот после взлома ноутбука и получения доказательства шантажа, персонажа можно будет спасти, соединив с журналистом.
Каждое «Вторжение» детально описывали в дизайн-документе — критически важный шаг для подготовки структуры миссии и выявления возможных слабых мест. К примеру, что произойдёт, если взломать телефон в тот момент, когда на ноутбуке загружаются данные? Из-за сложной нелинейной структуры «Вторжений» было жизненно необходимо излагать желаемый ход миссии на бумаге.
Технические аспекты
Захват движений (motion capture) и системный подход. В самом начале работы над проектом мы встали перед важным выбором. Хотим ли мы довести всё до кинематографического качества, записав mocap- анимацию для всех возможных ответвлений сюжета сцены, или стоит придерживаться системного подхода и использовать уже имеющиеся циклы перемещения и взаимодействия с объектами? Это стало переломным моментом в разработке «Вторжений». Я сравнил плюсы и минусы использования motion capture. В случае с системной анимацией плюсы и минусы будут зеркально противоположными.
Плюсы motion capture:
— визуальная достоверность;
— совпадение звука и языка тела;
— идеальная совместимость с окружением и взламываемыми устройствами;
— возможность использовать крупные планы камеры.
Минусы motion capture:
— нужно совмещать анимации в позах;
— «привязка ко времени»: набор отснятых движений фиксирует поток повествования;
— необходимо спланировать все ответвления и комбинации;
— высокая стоимость.
И хотя мы знали, что сделать системные анимации будет проще и дешевле, у нас была одна убедительная причина отказаться от них: в большинстве Вторжений нарратив предполагал размещение камеры в непосредственной близости от NPC. С такого расстояния по определению невозможно натурально передать анимацию и синхронизацию губ. Даже простейшие движения тела, издалека смотрящиеся приемлемо, вблизи выглядят неестественно и не выдерживают никакой критики.
В конечном итоге мы выбрали качество и создавали всю анимацию во «Вторжениях« с применением motion capture. Помимо всего прочего, это означало, что все миссии нужно было подробно спланировать заранее с учётом всех возможных отклонений и комбинаций. К моменту начала «съёмок» нам нужно было быть готовыми на все 100% и иметь чёткое представление о каждой сцене, её роли и месте в повествовании.
Управление нелинейностью. С точки зрения геймплея, нашей целью была полная интерактивность: дать игроку возможность самому управлять повествованием в любой момент сцены. И хотя это звучало как благородная цель, её оказалось невозможно выполнить. Продемонстрируем причины на примере.
Во «Вторжении» «Always On» девушка танцует в своей комнате, и игрок может выключить свет и поменять музыку. Это её раздражает, она включает свет или возвращает песню и только затем продолжает танцевать.
Вопрос в следующем: что делать, если взлом происходит во время её движения? При системной анимации можно было бы использовать одну и ту же реакцию в любой момент и плавно перейти от реакции к движению. Однако когда NPC приближается к своей цели, эта схема перестаёт работать, потому что труднее использовать начальные и конечные точки системной анимации. А при motion capture всё ещё сложнее: сильнее выделяется переход между отдельными отрезками анимации.
Для решения этой проблемы нам пришлось пойти на хитрость. Все отрезки анимации очень короткие, и каждый из них начинается и заканчивается в одной и той же позе. Так мы можем игнорировать реакции до начала следующей анимации.
Вернёмся к примеру с прерванным танцем: обратите внимание, как быстро NPC реагирует, двигается, меняет музыку и так далее. Мы специально сделали столь короткие анимации, чтобы минимизировать задержку между взломом и реакцией на него: в среднем не более секунды. На видео ниже видно, как девушка реагирует на два быстрых последовательных взлома, включает обратно свет и музыку и затем продолжает танцевать.
Такой подход позволил нам сделать процесс отзывчивым, а игрокам — взламывать предметы в любой момент времени. При этом он также дал нам чёткое понимание того, в каком месте будет «включаться» нелинейность. Решение проблемы совмещения поз стало основой нашего подхода к анимации.
Каждый захват движений начинается в той же позе, в которой закончился предыдущий отрезок. Если есть несколько параллельных отрезков, которые ведут в одну и ту же точку повествования, они все должны закончиться в одной позе, и все последующие отрезки, идущие из этой точки, должны начинаться в той же самой позе. И хотя аниматорам пришлось приложить немало усилий для сглаживания и совмещения поз, оно позволило нам плавно «сшивать» отдельные отрезки в том порядке, который диктуется действиями игроков.
Анимации из нейтрального состояния подчиняются стандартным правилам; при этом в них мы также ограничиваем движения стоп и бёдер моделей персонажей. В реакциях на взломы специально добавляется много движений верхней половины тела: так мы добились того, что моменты «склейки» стало очень тяжело заметить, а стационарное положение нижней части тела избавило нас от «скольжения» стоп по полу. Таким образом удалось сделать плавные переходы от нейтрального состояния ко всем возможным реакциям – как, например, в зацикленном танце девушки из «Вторжения» «Always On».
Структурирование поведения NPC. С такими строгими требованиями к позам и длительности отрезков анимации нужно было чётко структурировать поведение NPC. Чтобы создать правдоподобную сцену, в дизайне и нарративе должен быть простор, но он не должен чрезмерно усложнять нелинейность и процесс совмещения поз. Мы назвали этот подход «нарастающие эмоции» и руководствовались им на всех этапах проекта.
Каждый взлом усиливает эмоциональное напряжение сцены. Например, если взлом какого-либо предмета раздражает жертву, каждый последующий взлом будет злить её всё больше. Это делало сцену более предсказуемой для игрока, а разработчики понимали, как она должна развиваться.
В миссии «Always On» первый взлом раздражает девушку, второй — злит её ещё сильнее, а после третьего она срывается. Взломы различных предметов могли взаимодействовать друг с другом. Вот, например, модель «нарастающие эмоции» для всё той же «Always On»:
Каждая реакция обычно состоит из простого цикла: реакция — восстановление — продолжение. NPC реагируют на взлом (обычно способом, позволяющим плавно перейти в него из любой позы с заданным положением стоп и бёдер), восстанавливают изначальное состояние окружения в сцене и затем продолжают заниматься тем, чем занимались. Иногда это подразумевает какое-то перемещение самих персонажей.
Поначалу эта структура задавала определённую матрицу поведения персонажей. Немного освоившись, мы начали использовать более гибкий подход. К примеру, некоторые взломы вызывали фазы реакции и восстановления, но NPC при этом переходил в другое базовое состояние, что двигало сюжет сцены вперёд. Иногда NPC могли пропустить фазу восстановления и так далее.
Сохранение состояния во «Вторжениях». В целом, использование анимации с сохранением состояния было большим риском. Представьте, что NPC берёт в руки предмет, и именно в этот момент игрок запускает реакцию. Если мы допускаем возможность реакции в такой момент, нам нужна анимация персонажа с этим предметом в руках. Если игрок делает взлом на секунду раньше, NPC не успевает взять предмет, и нужна анимация без него. И так продолжается и дальше — при всех последующих взломах необходимо будет иметь анимации как с предметом, так и без него.
В конечном итоге, результатом использования анимации с сохранением состояния будет необходимость делать в два раза больше съёмок захвата движений. Мы выделили для себя три решения этой проблемы:
1. «Все дороги ведут в Рим»: если в результате выбора одного из вариантов развития событий NPC меняет своё состояние, то все остальные варианты должны приводить к нему же. Персонаж, таким образом, направляется обратно в устойчивое состояние. На видео внизу видно, как NPC меняет своё состояние, снимая наушники. Мы должны быть уверены, что все остальные варианты развития событий в этом «Вторжении» также приведут к тому, что он снимет наушники. Тогда его состояние в концовке сцены всегда будет одинаковым.
2. «Быстрые, как кролики»: NPC меняет состояние, быстро совершает действия, а затем возвращается в исходное состояние. Во время этих коротких периодов изменённого состояния блокируется возможность нелинейного развития сцены.
3. «Шум? Какой шум?»: Во время изменённого состояния ограничивается количество возможных реакций. Повествование предполагает такую ситуацию, в которой персонажу будет логично не обращать внимания на внешние раздражители во время нахождения в изменённом состоянии. В видео ниже NPC игнорируют маску, поэтому взлом не даёт никакого эффекта.
Особенности нарратива
Экспозиционный диалог — ключевой инструмент повествования в любом фильме. Порядок событий в сцене, включая прерывание речи, спланирован заранее и зафиксирован в сценарии. И так как в него нельзя вмешаться, сценарист может быть уверен, что вся важная для сюжета информация дойдёт до слушателя.
Во «Вторжениях» ситуация иная: из-за их нелинейной структуры нельзя быть уверенными в последовательности событий. Это не отменяет того, что в этих миссиях должен быть сильный нарратив. Поэтому нам необходимо было создать такую повествовательную структуру, которая не пострадала бы от нелинейности.
Самым большим вызовом стали диалоги: чтобы они звучали естественно, текстовики должны знать, в какой момент будут затронуты определённые темы. Если строчка диалога прерывается реакцией NPC на действия игрока, самым простым решением было бы затем повторить строчку, но этот характерный для видеоигр приём показался нам слишком неестественным. Другим вариантом было пропустить прерванную строчку и перейти к следующей, но так появился бы риск, что игрок пропустит важную информацию и потеряет повествовательный контекст.
Мы не стали выбирать ни один из этих вариантов и вместо этого решили подойти к организации нарратива с определённой находчивостью.
Рассмотрим пример из «Вторжения» «Child’s Play» в котором один из NPC пытается совершить сделку:
Коул: Цены растут, Гризз.
Коул: У меня тут эксклюзивный материал.
Цель этого блока в том, чтобы показать, что Коул занял агрессивную позицию при торгах. Остаток сцены включает в себя попытки Гризза снизить цену. Если пропустить фразу Коула о растущих ценах, то весь остаток диалога окажется смазанным.
Мы ввели принцип «точки невозврата» (ТН). В каждом диалоговом блоке была своя ТН, наступавшая по времени не позже, чем через 1,5 секунды после начала блока:
Коул: Цены растут (ТН), Гризз.
Коул: У меня тут эксклюзивный материал.
Основная мысль диалога должна была распологаться перед ТН. После того, как писатели переделали диалоги так, чтобы они следовали этому правилу, решение вопроса с прерыванием диалогов стало достаточно прямолинейным. Если разветвление сюжета происходит до ТН, необходимо повторить весь диалог: игрок услышал из него совсем мало, поэтому его повтор не будет казаться неестественным. Если же реакция персонажа на взлом наступает после ТН, можно пропустить остаток диалога — игрок и так уже получил всю необходимую информацию.
Нам нужно было сделать плавный переход от реакции NPC к основному диалогу. Каждая из них заканчивалась переходом, конечная поза которого совпадала с основной позой диалога. Возврат к основному диалогу включал общие фразы:
Коул: Так вот, о чём я там тебе затирал…
Гризз: Что ты сделаешь меня банкротом.
Коул: Да, да, точно…
*продолжение* — текущий диалоговый блок начиная с ТН или переход сразу к следующему блоку.
Тем не менее, не все «Вторжения» использовали диалоги для повествования. Другим способом передачи сюжетной информации были взаимодействия с окружением, не задействовавшие NPC напрямую.
К примеру, во «Вторжении» «Condemned» был телефон, который можно было взломать, чтобы он начал проигрывать голосовое сообщение. После запуска он продолжал проигрывать это сообщение до конца, вне зависимости от других происходящих вокруг взломов. Карточки профилей персонажей также были неплохим местом для размещения важной для нарратива информации.
Конечно, такой прямолинейный подход необходим был, чтобы полностью исключить нелинейность. Он ограничивал геймплей и всегда был крайней мерой. Но, используя его в разумных пределах, нам удалось цельно передать некоторые критически важные элементы повествования. С точки зрения механики, это означало либо то, что игрок не сможет в течение какого-то времени запустить реакцию, либо что NPC будут игнорировать в это время взломы.
Мы делали так, например, в конце каждого «Вторжения», чтобы сюжет миссии мог дойти до финала, и нам не пришлось бы думать о нелинейности в закрывающих сценах.
Координация NPC между собой
Последняя часть пазла состояла в том, чтобы заставить всех NPC реагировать в едином ключе. Другими словами, сделать так, чтобы они реагировали единой группой на появляющиеся раздражители и чтобы их анимации и позиции были идеально синхронизированы друг с другом.
Мы создали систему контроля NPC, которая была разбита на блоки и управлялась происходящими в сцене событиями. Она определяла набор анимаций каждого NPC, а также подходящий тип поведения персонажа на основании текущего блока и предстоящих событий. Также она зависела от текущего состояния сцены – как, например, в «Always On», где отслеживала приведённую выше матрицу нарастания эмоций. В данном примере она позволяла нам определить, вызовет ли взлом реакцию с раздражённым поведением NPC, разозлённым поведением, или же приведёт к кульминации сцены — срыву. Затем мы могли запустить определённый блок в поведении группы NPC. Блоки управляли временем старта и окончания каждой анимации, а также позволяли идеально синхронизировать действия NPC.
Кроме этого, NPC можно было поместить в блоки с единственным участником. Это позволяло запускать реакции отдельных NPC в их собственных, не синхронизированных с другими временных отрезках. Отличный пример — миссия «Bad Publicity». Главный персонаж находится в своём собственном блоке и реагирует только на взломы, которые затрагивают видеоигру, в которую он играет. Когда запускается концовка сцены, в комнату врывается полиция и дальше уже требуется синхронизация. Главный персонаж переходит из своего блока в общий с полицией. Важно, что он не меняет своего поведения, когда начинается блок входа в комнату. Вместо этого он ещё какое-то время продолжает своё предыдущее поведение и запускает реакцию только тогда, когда выламывается дверь. Так как теперь он в одном блоке с полицией, их анимации идеально синхронизированы. В видео ниже это видно на 1:49.
Результат
В своём стремлении достичь кинематографического качества в сценах с нелинейным повествованием, мы задействовали все производственные отделы и освоили с ними прежде неизведанные технические решения:
— аниматоры проделали большую работу по совмещению поз, а также спланировали ряд сложных сессий захвата движений;
— геймдизайнер составил детальные диаграммы каждой миссии и подготовил для каждой из них нелинейную матрицу решений;
— разработчики обеспечили корректный тайминг искусственного интеллекта и реакций, синхронизируя при этом одновременно несколько NPC. Также они создали набор инструментов и интерфейсов для доступа производственной команды в систему;
— команда, отвечающая за звук, обеспечила кинематографическое качество звучания вне зависимости от того, какой внутриигровой камерой будет пользоваться игрок;
— сценаристы погдотовили сегментированные диалоги, допускавшие возможность нелинейного развития и прерывания в любой момент;
— производственная команда освоила и организовала управление всеми элементами, задействованными в разработке этого технически сложного геймплейного элемента.
В итоге нам удалось добавить в игру уникальный геймплейный элемент, которым гордится вся команда.
Источник: DTF