Transcript for:
Искусственный интеллект в играх

Искусственный интеллект одна из самых странных отраслей геймдизайна. Пока графика, физика и механики в играх с годами постоянно улучшаются, NPC как тупили, так и продолжают регулярно тупить. Даже сегодня они периодически бездумно упираются в стены в поисках непонятно чего. бросают гранаты себе под ноги или попросту игнорируют игрока. А ведь даже 15 лет назад в индустрии были примеры игр вроде Fear, где противники контекстно переворачивали предметы интерьера для создания укрытий, обходили игрока со стороны и старались не попадать под пули. Словом, выглядели куда убедительнее штормтруперов из недавней Star Wars. ай какая же это все какой смысл я больше не могу кажется будто и в играх эволюционирует но назад но ведь так не должно происходить верно и сегодня мы поговорим о том как работает мозг персонажи в играх и почему одни и NPC тупее современных роботов-пылесосов, а другие кажутся вполне смышленными. Для начала надо понять, что именно мы имеем в виду под хорошим искусственным интеллектом. Интуитивно кажется, что речь в первую очередь об осмысленных и непредсказуемых действиях, но захотят ли игроки сражаться с этим? с по-настоящему умными врагами. Мозговитые NPC не будут лишний раз выглядывать из укрытия и в одиночку проверять каждый шорох, как это происходит в современных стелс-экшенах. Тактичность и реализм противников целесообразны в реальной жизни, но в игре создадут хаотичный и скучный геймплей. Если ты не будешь уверен в том, что бросок камня отвлечет врага, то как ты будешь манипулировать NPC для достижения своих целей? Иными словами, качество искусственного интеллекта это не про разум, а про поддержку игрового опыта, который создают дизайнеры. Детки это действительно требуют, чтобы NPC казались умными и методичными. Упомянутая ранее ФИР делала именно это. Но даже там противники намеренно сделаны такими, чтобы игрок мог их обыграть. Солдаты часто вслух проговаривают свои намерения, вроде желания обойти героя со стороны. В реальной жизни это было бы нелепее некуда, а вот в игре уместно. Ведь задача не в том, чтобы переиграть героя, а в создании иллюзии сложного напряженного действия. Это намеренный обман, который зачастую и лежит в основе ИИ. В других проектах игровой опыт и вовсе требует наличия простеньких мобов, которые даже не стараются имитировать умственную деятельность. Например, в Doom 2016 года вполне уместно видеть противников, которые толком не прячутся в укрытиях и всегда дают знать, где они находятся. Примечательно, что создатели игры на ранних этапах разработки экспериментировали с поведением искусственного интеллекта и даже делали врагов умнее и активнее. Даже слабые импы носились за игроком и постоянно на него давили. Во время плейтестов выяснилось, что игроки в таких сценариях сами начинали прятаться в укрытиях и избегать перестрелок. Ну нахер! Не очень-то подобающее поведение для агрессивного Дунгая. Игровые эмоции бывают самые разные. Кто-то хочет сделать из игрока героя боевиков, а кто-то заставить бояться врагов в тени. Поэтому и способов создания мозгов для NPC очень много. Где-то для подходящего... геймплея болванчиков можно доставлять хоть вручную и не заморачиваться со сложными алгоритмами поведения. Так в Uncharted 2 в основе и лежал зонинг, система, которая отмечала для врагов места, куда нужно бежать и где прятаться. Нюанс в том, что все эти зоны создавали дизайнерами вручную. для каждой конкретной стычки и изменялись в зависимости от действий игрока. Получалась простенькая блок-схема, если Дрейк прячется за левым укрытием, то NPC под номером 5 забирается на вышку и стреляет из укрытия оттуда. То есть искусственный интеллект почти не задумывался о перемещении. Весь мыслительный процесс, как правило, сводился к тому, когда стрелять, перезаряжаться или кидать гранаты. Для такой динамичной и линейной игры, как Uncharted, этого вполне достаточно, поэтому у игроков к ней в общем-то нет претензий. Однако многие современные игры предлагают просторные открытые миры. где такой подход явно не сработает. Приходится создавать более комплексные системы, где NPC будут корректно действовать в зависимости от контекста. А там, где есть сложный механизм, простора для ошибок становится гораздо больше. Но перед тем, как обсуждать нюансы, разберемся с базой создания искусственного интеллекта в современных играх. Основа ИИ почти любой игры навигационные меши. Так называют невидимые сетки, которые наносят поверх игровой локации, чтобы бот мог по ней ходить. Оно и логично, ведь искусственный интеллект в привычном смысле не может видеть. Для него нет ни дорог, ни границ с картой, ни препятствий. Все это заменяется абстрактным нафмешем. Чтобы NPC на своем пути не тупил, строить сетку нужно с умом. Вырезать из нее твердые, неинтерактивные объекты, вроде машин, зданий и других пропсов. Интерактивные объекты же наоборот, нужно заранее пометить маркерами. Сюда относятся укрытия, участки с особым ландшафтом, а также специфические вещи для отдельных жанров игр. Например, в гонках на нафмэш иногда наносят оптимальную траекторию движения, по которой и ездят соперники. Как вы понимаете, нафмэш сам по себе не определяет искусственный интеллект, но именно от него зависит, насколько правдоподобно NPC будут себя вести. Если не удалить из сетки хотя бы одну дверь, то боты будут... безуспешно пытаться пройти ее насквозь это к слову распространенная проблема игр бефезда дело в том что в ее движке creation engine есть инструмент автоматического создания на мыши который периодически вот такие сбои полезная штука особенно при разработке больших игр не удивительно что такие же инструменты есть и в юнити и в анрил engine для некоторых игр того что описал вполне достаточно но если мы имеем дело с большим открытым миром и симуляции поведения разных существ у нас меж предстоит снабдить дополнительной информацией например чтобы пешеходов gta не носились в проезжей части и ее вместе с другими особенными участками локации нужно пометить соответствующим образом. Нередко разработчики придают разным местам условную стоимость, исходя из которой NPC прокладывают путь из точки А в точку Б. Цена проезжей части в таких ситуациях очень высокая, поэтому в обычных сценариях бот не будет по ней ходить. Но если игрок начнет палить во все стороны или ударит персонажа, NPC может проигнорировать эти ограничения. И если сейчас сходу ты можешь придумать еще пару вариантов, когда боты должны начать от тебя убегать или наоборот нападать, то возможно тебе будет удобно. тебе есть задатки геймдизайнера. Разработка игр была и остается одной из самых креативных IT направлений, требующих от тебя не только технических навыков, но и мышления вне коробки. Все этому абсолютно точно можно научиться. В своей школе я собрал самых опытных менторов России, чтобы уже через год ты мог отправлять резюме на мидл разработчика. Все обучение происходит в индивидуальном режиме с живыми менторами, и именно поэтому я гарантирую результат. Вы трудоустроитесь по окончанию учебы или я верну вам деньги. Переходи по ссылке в описании и начинай свою карьеру разработчика игр вместе со мной. Пока! Одними навмешами ИИ не ограничивается. Фактически к этому моменту мы просто создали для NPC игровую арену. Но что на ней делать, вопрос по-прежнему открытый. Разработчики сегодня моделируют поведение виртуальных персонажей по-разному, но чаще всего можно встретить два метода. Стейт машины и деревья поведения. В первом случае программисты и дизайнеры разделяют поведение NPC на несколько блоков. В шутере это может быть патрулирование, перестрелка, поиск врага, взаимодействие с предметом и так далее. Между этими состояниями или стейтами есть переходные условия. в виде различных триггеров. Допустим, противники на военной базе в разных Far Cry в исходном виде находятся в состоянии патрулирования. Иногда на базу могут неожиданно наглянуть дикие звери, которые триггерят переход к боевому состоянию. Устранение угрозы тем временем служит еще одним триггером, который возвращает NPC к патрулированию. Такой подход к логике поведения выглядит разумным, но у него есть существенный недостаток. Стейт-машины плохо масштабируются. Если в системе уже задействованы 6-7 разных состояний, получается большая сеть, где каждый стейт окружен кучей переходов. А теперь, Теперь представьте, что в процессе разработки дизайнерам понадобились дополнительные поведения. А какого хрена? Встраивать их в массивную схему будет весьма утомительно. Здесь на помощь приходит другой способ организации данных древо поведений. Они представляют из себя набор логических вилок, которые конкретизируют игровую ситуацию. Например, NPC задается вопросом, есть ли поблизости враги. В зависимости от ответа код спускается к одному из вариантов, который в свою очередь также предлагает свою логическую вилку. Если я вижу врага, то находится ли он в пределах 50 метров от меня далее персонаж спускается все ниже пока не дойдет до финальной развилки который определит его действия такая структура позволяет безболезненно экспериментировать с разными условиями оперативно добавлять новые действия не боясь что-то пропустить хотя тут стоит отметить что разные способы организации поведения не отменяют друг друга многие игровые студии используют комбинированный подход и начинает с древа поведения а конечное действие в нем представляет из себя маленькую стоит машину По такому принципу, например, работают противники в Человеке-пауке от Insomniac Games. Звучит довольно просто, и в этом весь смысл. Стоит машина и деревья, поведение легко описывать и визуализировать, поэтому в некоторой степени ими могут заниматься не только кодеры, но и дизайнеры. Однако они все еще представляют из себя относительно высокоуровневую абстракцию без должной конкретики. Вот что значит вести бой. Делать это можно по-разному, и именно нюансы делают искусственный интеллект умным в глазах игрока. За это отвечают утилитарные системы, которые... череды доступных действий выбирают самое оптимальное. Например, атаковать можно ножом, выстрелить из оружия или кинуть гранату. К каждому из этих действий привязаны значения полезности, которые меняются в зависимости от окружающих условий. Так, чем NPC ближе к игроку, тем практичнее будет ударить его именно в ближнем бою. Утилитарность разных действий подсчитывается постоянно в реальном времени и выбирается наиболее приоритетная. От количества и качества таких подсчетов во многом и зависит, насколько умным будет выглядеть противник. Так, в The Last of Us каждый переход на бесед одного укрытия к другому сопровождается подсчетом десятка разных факторов учитывается почти все насколько сильно приблизиться враг к игроку как долго бежать поддержит линк без его товарищи в случае ответного огня и так далее каждый из этих характеристик будет иметь значение в пределах от единицы а их перемножение даст потенциальному укрытию усредненный рейтинг после параллельного просчета нескольких таких укрытий и бесилы берет самое оптимальное неудивительно что механизмы просчета пользы есть почти во всех играх где-то утилитарные решения влияют на все действия им писье симс на например потребности персонажей это и есть визуальное отображение утилитарных механизмов есть и более Экзотические случаи, когда просчет выгоды работает бок о бок с обычным рандомом. В Dark Souls и многих похожих играх противники выбирают свою следующую атаку наугад. Утилитарные системы лишь запрещают использовать откровенно неподходящие удары. А вот все остальное определяется случайно. Как только удар совершен, его вероятность повторного воспроизведения резко снижается. Таким образом, каждая стычка становится в меру разнообразной, а для успеха предстоит заучить большинство вражеских атак. Фактически на этом универсальный этап создания И заканчивается. К этому моменту на руках у студии будет не очень много времени, интересный но в целом работающая группа мтс чтобы придать ее уникальность и подчеркнуть игровой опыт конкретного проекта предстоит долго подгонять отдельные значения которых я уже говорил чтобы геймплей ощущался оптимально и не создавал неожиданных неприятностей помимо этого почти все крупные игровые студии придумывают свои ноу-хау, которые делают поведение врагов более интересным. В некоторых случаях они по масштабам могут быть сопоставимы с основными алгоритмами поведения. В The Last of Us на поле боя помимо NPC есть отдельные координаторы ролей. Это невидимые актеры, которые следят за обстановкой на поле боя и закрепляют за NPC особые роли. Если ситуация позволяет, координатор делает одного из врагов фланкером и таким образом активирует для него несколько уникальных стейтов. Допустим, чтобы удачно обойти Джоэла со спины, он анализирует его. анализирует вектор боя, то есть направление, куда смотрят враги и главный герой. Затем выбирает укрытие, исходя из того, насколько далеко они находятся от этого вектора. Naughty Dog в целом любят раздавать NPC в своих играх разной роли. В их следующей игре, Uncharted 4, они также разделяют противников на 4 группы. Первые спокойно отстреливались из укрытий, вторые шли на правом к игроку, третьи обходили со стороны, а четвертые перекрывали потенциальные пути обхода для главного героя. Интересно, кстати, что эти архетипы, программисты шутера, подглядели из... пэкмена где привидение действовали по схожему принципу впрочем так заморачиваться нужно не всегда в некоторых жанрах можно обойтись парой более локальных решений которых достаточно для придания врагам убедительного облика скажем в splinter cell blacklist у врагов помимо основного конуса зрения есть два небольших крыла зрения прямо за спиной так разработчики постарались сымитировать шестое чувство человека когда он чувствует что кто-то подкрадывается и в другом стелс-экшене metal gear solid 5 разработчики решили динамически менять условия стычек в зависимости от стиля игры каждого пользователя. Так, если Снейк слишком часто стреляет из снайперской винтовки вместо прямых конфронтаций, то противники в определенный момент начнут носить шлемы. Элегантный способ придать врагам иллюзию интеллекта. Еще одна важная часть создания искусственного интеллекта добавление разных ущрений, которые незаметно для игрока делают геймплей более комфортным. Представьте себе, что мы выпускаем игру по методичке из теоретического блока этого видео. Группа врагов видит игрока, переходит в состояние боя и непрерывно палит по нему из укрытия. В таких ситуациях не то что бегать в разные стороны, банально высунуться для ответного огня не получится. Не бодрено, что при таком раскладе многие экшены насильно ограничивают количество одновременно стреляющих врагов всего до парочки. Да, это узаконенный чит и подобное есть почти во всех играх. Это совершенно нормально и даже правильно, но главное нащупать баланс, при котором противников не придется буквально оттупливать. В недавних думах трюк с ограничением стреляющих врагов провернуть не получилось бы, ведь игрок одновременно видит сразу с десяток демонов и моментально... распознает уловку но если оставить все как есть то куча демонов моментально закидают даже самого ловкого игрока фаерболами за долю секунды инженеры студии придумали лаконичное решение и привязали точность стрельбы врагов скорости перемещения главного героя чем он быстрее тем чаще враги мажу то есть формально по нам стреляют все и сразу но если играть так как задумали геймдизайнеры то урона будешь получать меньше даже если игрок не заметит эту уловку он все равно интуитивно отметить для себя эту особенность и будет активнее носиться по карте главное в этом деле быть незаметным если игрок распознает опан то иллюзия разрушится даже если она и делает геймплей интересней вспомнить хотя бы уставший уже мемом rubber banding старых частях нфс эта техника при которой навыки соперников зависели от того как далеко от них находится игрок если он вырывался далеко вперед то и боты начинают что есть мочек гнать к нему показывая невероятные гоночные скиллы и конечно же наоборот сама по себе техника имеет право на существование но в underground и most wanted она была выкручена так сильно что противники в экстремальных ситуациях буквально разгонялись до скорости космических рокеров. Из всего этого следует очевидный, но неизбежный вывод делать ИИ для игр долгая и кропотливая работа. Неудивительно, что такие вручную сделанные системы не учитывают некоторые экзотические ситуации и изредка выглядят глупо. Одна ошибка в нафмеше и вот NPC уже деловито идет в стену. Неправильно подобранный утилитарный параметр и вот поведение врагов в редких случаях споит. Наконец учитывайте, что даже с современным железом программисты ограничены определенным бюджетом процессора на каждый кадр. 10 лет назад проблема стояла так оста, что разработчикам приходилось постоянно идти на компромиссы. Так, в Spec Ops The Lion одновременно на игровой арене активно участвовать в сражении могли всего 7 противников. Остальным приходилось... ...вдалеке лишь имитировать бурную деятельность. Сегодня дела с этим обстоят лучше. Процессоры стали многократно мощнее, но и игры стали амбициознее. Поэтому на различные симуляции пули, физики, объектов выделяется больше средств. Так что даже сегодня разработчики вынуждены ограничиваться небольшими кусками кода для каждого отдельного NPC. Возможно в будущем ситуация изменится благодаря нейросетевому искусственному интеллекту, но говорить об этом пока рановато. Сейчас мы знаем по сути лишь пару примеров практического применения таких технологий, но справедливости ради, выглядят они уже здорово. Допустим, искусственный интеллект Софиев Гран Туризма 7 имитирует поведение настоящих компетентных водителей. Речь не про идеальное вождение, с которым у ботов и ранее все было хорошо. было хорошо, а именно про повадки настоящих гонщиков. Тактические маневры, умение не попадать в обманки соперников и прочее. Работает эта нейросеть действительно здорово, и уже сегодня играть против таких ботов куда интереснее, чем против обычных болванчиков гран-туризма. Также на ум приходит недавняя демка от Nvidia под названием Ace. Она собрала внутри себя разные наработки компаний в области искусственного интеллекта. Игроку предлагается узнать о окружающих людей номер конкретной комнаты в отеле. Для этого предстоит общаться с NPC и убеждать его, выждать, выдать ценную информацию. По словам журналистов, попробовавших ACE, играть в такой симулятор риторики довольно занятно, но это разумеется не значит ровным счетом ничего. Истории про впечатляющие технологии, которые потенциально изменят индустрию, стары как сама индустрия, и далеко не все здесь переживается. В конце концов, будет ли польза от нейросетевых NPC, если они будут стараться действовать оптимально, а не интересно? Обязательно поделитесь в комментариях, где вы встречали на ваш взгляд самых умных или тупых ботов. И чур про Outlaws не писать, это слишком. очевидным. Всем пока!