Как разработчики создают толпы персонажей — приёмы, уловки и обход технических ограничений

Толпа — важный атрибут любого открытого мира. Чтобы игрок смог погрузиться в реалистичную интерактивную среду вроде виртуального Либерти-сити или Дамаска, в ней должно быть много прохожих и статистов. Без массовки любая карта будет казаться пустой и безжизненной, ведь чем больше на уровне жизни, тем сильнее игрок поверит в правдоподобность окружения.

В этом тексте мы разберёмся, как разные студии создают массовку в своих проектах, на какие уловки идут и как обходят технические ограничения.

В начале девяностых полноценная симуляция толп была невозможна в силу технических ограничений старых приставок, поэтому разработчикам приходилось идти на разного рода ухищрения. Например, в двухмерном хоккейном симуляторе NHL 94 на трибунах было всего шесть разных текстур болельщиков. Разработчики скопировали их много раз и расставили по своим местам. Хитрость заключалась в анимации: люди в толпе двигались с разной скоростью и реагировали на ход матча — суетились от забитых голов и попаданий по штанге.

NHL 94

В середине девяностых игры перешли в полноценное 3D, однако, опять же в силу ограничений, трёхмерную массовку на экране создать было нельзя. В NBA Action 98 толпу болельщиков сделали с помощью анимированных спрайтов, натянутых на трибуны. Позже в NBA 2K1 для Sega Dreamcast толпа всё так же отрисовывалась с помощью спрайтов, но более высокого качества и с более сложной анимацией.

NBA Action 98

При этом в Голливуде к тому времени уже нашли способ работать с полноценной трёхмерной массовкой.

В 2001 году, во время работы над батальными сценами «Властелина Колец» Питер Джексон понял, что использовать настоящую массовку будет слишком дорого. Поэтому специалист по VFX Стивен Регелус из студии Weta Digital по заказу режиссёра создал программу реалистичной симуляции толпы — Massive Software.

Софт позволил воссоздавать поведение каждого трёхмерного персонажа в толпе, а также наделял их примитивным искусственным интеллектом. Разработчики видеоигр заметили достижения Регелуса и решили использовать его наработки в своих проектах.

Постепенно разработчики видеоигр смогли отказаться от плоских изображений в пользу полноценных 3D-моделей. В 2001 году вышла революционная GTA 3. В игре представили большой и полностью открытый для исследования город, по улицам которого ходили прохожие.

GTA 3

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

После выхода GTA 3 повысился спрос на игры с открытым миром. Разработчики не только научились создавать трёхмерную массовку, но и смогли наделить её собственным интеллектом, похожим на тот, что был у болванчиков Massive Software.

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

GTA 3

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

Со сменой консольных поколений повышалось и количество отображаемых на экране NPC. Однако, как и в девяностые, разработчикам всё равно приходилось срезать углы и экспериментировать с уровнем детализации. Например, в поздних Assassin’s Creed или GTA на одном экране в режиме реального времени отображается около двенадцати тысяч моделей, и лишь 120 из них — модели высокого разрешения.

Assassin’s Creed

Для достижения подобного результата разработчики используют так называемых «импостеров» или «самозванцев» — это трёхмерные модели, порой конвертированные в спрайты. Их используют для подмены настоящих моделей в сценах с большим количеством деталей. Чем дальше объект от камеры, тем больше шанс, что движок уже заменил его на импостера незаметно для игрока.

Яркий пример использования импостеров — система Legion из Serious Sam 4. Перед выходом игры разработчики из Croteam рекламировали новую систему отображения противников, способную показывать более десятка тысяч врагов на одном экране.

В финальном сражении, ради которого систему Legion и создавали, оказалось, что реальными 3D-моделями в многочисленной толпе являются всего несколько десятков противников. Все остальные — «импостеры», которые вращаются в разные стороны в зависимости от положения игрока.

В середине двухтысячных, после выхода Hitman: Blood Money и первой Assassin’s Creed, потихоньку начал формироваться поджанр социального стелса. В этих играх главный герой действовал в просторных локациях, наполненных массовкой, а стелс происходил на виду у прохожих.

Assassin’s Creed

Разработчики Assassin’s Creed ещё на этапе проектирования поняли, что игре необходимо большое количество анимированных моделей статистов, не похожих друг на друга и по-разному реагирующих на действия игрока.

Толпы людей создавали благодаря процедурной генерации и алгоритму, который мы назвали системой «Франкенштейна». У нас была библиотека голов, причёсок, туловищ и ног. Ещё у нас были анимации для всех этих частей тел.

Embedded Image

Ведущий программист Assassin’s Creed

Источник цитаты: polygon.com

Чтобы отобразить большое количество статистов и сохранить стабильный фреймрейт, Ubisoft использовала уровни детализации или LOD (Levels Of Detail). Разработчики создали несколько вариантов 3D-модели с разными степенями детализации, которые алгоритм переключал в зависимости от того, насколько близко игрок находился к объекту.

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

Работа LOD на примере Assassin’s Creed: Origins

Подобным приёмом пользуются все разработчики современных игр. Например, в стратегии Total War: Rome 2 на одном экране в реальном времени может отображаться до десяти тысяч солдат. Чтобы CPU мог рассчитать такое количество анимированных объектов, для персонажей, стоящих в дальних рядах, разработчики сильно понижают детализацию, упрощают анимацию и отключают ИИ.

Total War: Rome 2

В Detroit: Become Human в сцене, где игрок видит тысячи андроидов в ряд, LOD работает так: персонажи, которые стоят ближе к камере, полностью проработанны. Далее уровень их детализации падает, пока NPC не превращаются в спрайты.

Разработчики Assassin’s Creed: Unity решили усовершенствовать открытый мир из предыдущих частей серии, сделать его более живым и заполнить случайными событиями.

Assassin’s Creed: Unity

Ubisoft поставила себе цель создать оригинальные ситуации, которые происходили бы независимо от того, что делает главный герой. Игрок в Unity мог идти по сюжету или свободно исследовать город, при этом постоянно натыкаясь на случайные события. Так как игра происходила во время Французской революции, на улицах виртуального Парижа разворачивалась настоящая гражданская война с участием разных группировок и слоёв населения.

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

Embedded Image

Геймдизайнер Assassin’s Creed: Unity

Источник цитаты: https://www.youtube.com/watch?v=FaV88JAWnbQ

NPC реагировали на окружение и наличие других фракций в толпе. Таким образом, при старте случайного события разработчики раздавали фракциям разные роли. Так группировки NPC в разных случаях могли стать либо охотниками, либо жертвами.

Защитники в Unity сражались против экстремистов и оберегали горожан и главного героя. Экстремисты нападали на мирных жителей и игрока. Стражники же были кем-то вроде полицейских. Они атаковали только тех, кто совершал преступления.

Assassin’s Creed: Unity

Фракция горожан — самая многочисленная и самая нейтральная в Unity. NPC, принадлежащие к ней, анализировали состояние остальных трёх фракций и реагировали в зависимости от выданных им характеров. Всего их было три: храбрец, трус и нейтрал. Если начиналась потасовка — в толпе горожан все NPC начинали вести себя по-разному. Храбрецы подстрекали сражающихся, трусы бежали, а нейтральные горожане просто наблюдали за событиями.

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

Assassin’s Creed: Unity

Такую сложную структуру случайных событий удалось реализовать благодаря системе модулей. Разработчики заранее просчитали разные варианты развития и собрали их из логических блоков. Всего блоков было три вида: блок ввода, блок с проблемой и блок с её решением.

В блоке ввода система анализировала окружение игрока и решала, какое событие можно в нём сгенерировать. После система брала NPC-актёров из толпы, расставляла их в нужной последовательности и создавала между ними контакт.

Assassin’s Creed: Unity

Дальше шёл блок с проблемой — между NPC-актёрами происходил некий конфликт, устранить который мог только блок с решением. Именно в последнем блоке происходила развязка случайного события, поучаствовать в которой мог и сам игрок.

В IO Interactive специально для Hitman: Absolution разработали особую систему взаимодействия с толпой. В игре на одном экране могло отображаться около 1200 моделей, но лишь 500 из них были трёхмерными. При этом игрок мог легко перемещаться внутри такой толпы и так же легко переходить к экшену.

Hitman: Absolution

Эту же систему IO использовала и в перезапуске 2016 года, только персонажей-статистов стало в несколько раз больше. Как и раньше, половина из них — скопированные болванчики-импостеры. Другая половина — персонажи с проработанным искусственным интеллектом.

Основа интеллекта NPC в Hitman — это ситуационное дерево поведения, которым одновременно могут пользоваться до трёх сотен статистов. Благодаря этому дереву персонажи принимают решения, реагируя на окружение и действия игрока.

Hitman (2016)

У каждого NPC в игре есть доступ к двум базам знаний — публичной и личной. В публичной базе сохраняется информация об общем, стандартном состоянии или местоположении разных предметов и персонажей на локации, а в личной — данные о последнем местоположении этих предметов, которое видел отдельно взятый NPC.

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

Hitman (2016)

Статисты собирают информацию при помощи специальных «сенсоров» и «служб». Первые отвечают за обновление информации в личных базах NPC. Благодаря им персонажи реагируют на изменения в локациях и предметах, а также «слышат», что происходит вокруг. А с помощью «служб» NPC считывают, насколько подозрительно себя ведёт игрок, насколько хороша его маскировка и где он последний раз себя выдал.

При этом система постоянно сохраняет баланс. NPC не знают обо всех действиях игрока, поэтому их информация может оказаться ложной или стать неактуальной.

Hitman (2016)

Для управления толпой разработчики использовали навмеши (или меши навигации). В них запаковали уже готовые паттерны поведения для разных ситуаций, из которых NPC на ходу выбирали самый подходящий.

Программисты Hitman поставили перед NPC задачу — избегать препятствий и других персонажей. Для этого IO поверх основного навмеша добавила двухмерную сетку принятия решений. Эта сетка сообщала конкретному NPC, правильно ли он проложил маршрут и не попал ли в охраняемую область. Также во время паники сетка решений заставляла массовку держаться подальше от вооруженного главного героя.

Hitman (2016)

Когда игрок начинает стрельбу на уровне — поднимается тревога, а толпа входит в режим паники. Чтобы NPC не разбегались в разные стороны, а уровень не пустел, разработчики создали две системы: систему зон поведения (behaviour zones) и потоков паники (panic flows).

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

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

Hitman (2016)

Когда на уровне начинается хаос, толпа входит в режим «страха», а у NPC появляется четкая цель — избегать игрока. Во время хаоса массовка подчиняется потокам паники, вычисляя кратчайший путь до спасительного выхода с уровня.

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

Толпы зомби и в командном шутере Left 4 Dead работают по схожему принципу. Но вместо того, чтобы подчиняться панике и бежать от игрока, как NPC в Hitman, враги в Left 4 Dead бегут прямо к нему.

Left 4 Dead

Специальная система под названием «Режиссёр» на ходу считывает поведение игроков и то, насколько хорошо они играют. В зависимости от собранных данных технология меняет расстановку толп зомби на уровнях, их интенсивность и скорость передвижения, расположение боеприпасов и аптечек, а также корректирует поведение боссов.

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

Комментарии: 0