Всем привет! Учитывая, что у вас тут набеги с DTF, тоже решил заглянуть на огонёк. StopGame мне всегда нравился, так что пора вылезать из «ридонли».
Решил разобраться, почему противники настолько продуманно себя ведут и, заодно, сделать видео.
Почти год, после того как DTF распустил видео-отдел, я собирался заняться контентом, но всё никак не получалось. То работа мешала (которой нет), то ещё что-то. В итоге за последний месяц я взял одну из своих самых любимых игр, полез в интернеты и начал компилировать информацию. Мне кажется, что получилось неплохо, но судить вам.
Выкладывать сценарий к видео не собирался, но правила SG есть правила SG, так что попробую подчистить свою писанину. И, что немаловажно, я пытался подкрепить слова визуально, а без этого понять, что происходит — сложновато.
Плюс разбавлял немного повествование и давал информации уложиться в голове. А в тексте — будет тяжко. Так что, как автор, советую его смотреть и слушать. Но, конечно, выбор за вами.
Я не особенно редактор, писал обычно только сценарии. Поэтому на «красоту» внимания особо не обращал. Так что, если кровь из глаз не потечёт, уже неплохо.
Думаю, что не только я замечаю, что время, когда разработчики часто пробовали новые подходы к играм, прошло. Где все эти эксперименты с физикой? Попытка в реализм? Проработка мельчайших деталей и прочее? Конечно, есть исключения, но их не так уж много.
Запуская очередную поделку от UBISOFT или EA ты уже знаешь, что там будет. Открытый мир, зачистка территорий, сгенерированные нейросеткой сайдквесты, королевские битвы и розовые скины на оружие. Меняется только оболочка и количество лутбоксов с стоимостью боевого пропуска.
Но вместо того, чтобы ругать современные конвееры, я предлагаю вам вернуться в 2005 год.
Сегодня поговорим про игру, которую я просто обожаю. F.E.A.R. вышла аж 17 лет назад и я до сих пор не видел противников интереснее, чем в ней. Они могли бесшумно обойти со спины, пока напарники поливали игрока огнём. Могли прятаться за укрытиями, вовремя кидать гранаты, чтобы выкурить противника и вступать в рукопашную, грамотно сокращая дистанцию.
Разработчики ставили перед собой задачу подарить игроку кинематографический опыт. Будто игрок находится в центре боевика. Это у них получилось. Но как?
Конечно, можно было бы поговорить, насколько круто F.E.A.R. выглядела (и выглядит до сих пор), про сюжет, про компанию Монолит и прочее и прочее…
Однако таких (роликов) материалов в интернете много, можете пойти и глянуть историю серии от StopGame, например. Она, кстати, клёвая.
А мы с вами сегодня поговорим об искусственном интеллекте. Настолько слаженно и умнО боты не действовали, кажется, ни в одной игре.Но действительно ли они были настолько продуманы или всё это иллюзия и магия простых скриптов?
Сразу хочу сказать, что я прошерстил очень много источников и кое-что добавил от себя. Больше всего информации я почерпнул из статьи Тома Томпсона (которую, кстати, довольно кратко и понятно пересказал Владимир Семыкин на DTF) и публикации Джефа Орикна, работавшего в Монолите.
По сути, это можно назвать адаптацией, компиляцией источников и (почти) переводом. Ссылки на все источники я, конечно, оставлю внизу.
Введение
В начале 2000-х разработчики начали искать новые решения, как регулировать поведение AI в играх. Ведь тех способов, что были раньше уже было недостаточно. Игры становились сложнее, графика краше и появилась определенная тенденция на “реализм”.
Двух состояний (просто гуляю\нападаю), как, например, в Pac-Man и плавного повышения уровня сложности врагов, как в Donkey Kong было уже недостаточно. Нужно было создавать иллюзию “думающего” врага или напарника. Кстати, одной из первых игр, где был обучающейся AI, стала Petz. Поведение домашнего питомца зависело от стиля игрока, ведь каждый дрессировал их по разному.
Но мы всё-таки сегодня про шутеры.
Было и остаётся множество способов упрощения создания ИИ. Например, Navigation mesh (навигационная сетка). Это набор многоугольников, которые определяют, где NPC может передвигаться, не натыкаясь на преграды. Короче, чтобы враги тупо не бежали в стену. Где-то в 2000х сетка стала часто использоваться в играх, хотя способ появлялся в робототехнике ещё в 1980-х годах.
Продолжал развиваться способ FSM — Finite-state machine (конечные автоматы).
Это когда в один момент времени у NPC может быть только одно состояние. Если рядом появился игрок, то враг атакует. Если игрок потерян, то враг патрулирует. И т.д. Соответственно, чтобы совершить какое-то действие, ИИ должен состояние поменять. Этот способ, кстати использовался в Half-Life. И он же, в своё время, использовался в Pac-Man.
Наверное, самым популярным методом до сих пор остаётся древо поведения.
Его популярность пришла во времена Halo 2 и он надёжно закрепился в индустрии. Закрепился, так как механик в играх становится всё больше и больше, а это идеальный метод для того, чтобы npc быстро нашёл в древе именно то состояние, которое больше всего подходит к ситуации.
Есть ещё и и другие способы регулировать поведение. Например, древо поведения вместе с конечными автоматами образовывают технологию Иерархические конечные автоматы. Но если рассказывать обо всех способах, то это нужно делать отдельный ролик (текст). Так что предлагаю перейти к способу, который, к сожалению, не стал популярным. Но, как минимум, подарил мне один из лучших игровых опытов, если не самый лучший и стал основой ещё одного современного способа создания искусственного интеллекта.
Что используется в F.E.A.R.
Искусственный интеллект в Fear работает по принципу GOAP (Goal-Oriented Action Planning). Если попытаться перевести это на русский, то получится что-то вроде “Целенаправленное планирование действий”. По сути – это и является принципом такого способа. Действия всех NPC планируются для достижения какой-то глобальной цели. Запомнили это и отложили в сторону.
GOAP опирается на реально существующую технологию искусственного интеллекта – AI Planning (Автоматизированное планирование). И прежде чем поговорить о GOAP, нужно объяснить что это за автоматизированное планирование такое.
Автоматизированное планирование
Смысл в том, что система пытается перевести “существующее” состояние в “целевое” при помощи определённых действий и их последовательности. Это, так называемый “план”. Чтобы составить “план”, системе нужна вся информация о игровом мире в данный момент. Вся информация – это “предикаты” или “факты”. Все собранные в единое целое факты образуют "состояние мира в данный момент времени".
Одним предложением: система получает “состояние мира” при помощи сбора всех фактов в одно целое.
Томми Томпсон предлагает такой пример: У нас есть закрытая дверь. Система хочет, чтобы противник открыл дверь, но для этого система должна знать “факт”, что дверь закрыта. После получения этого факта (или предиката) система может запустить действие, которое её откроет.
Каждое действие при этом разбивается на три составляющих.
1. Объекты, которые в действие участвуют - (дверь).
2. Предварительные условия этого действия (the actions preconditions) –т.е. факты, при которых это действие возможно. (закрытая дверь)
3. И последствия – какие факты пропадают из состояния мира и какие добавляются.
То есть, чтобы npc открыл дверь, нужно, как минимум, два предварительных условия.
а) Дверь закрыта.
б) Npc находится в комнате с дверью.
И, после её открытия, будет последствие – предикат двери изменится с закрытой на открытую.
А вот если npc нужно не только открыть дверь, но и пройти в комнату за закрытой дверью, то предварительных условий должно быть больше.
а) Дверь закрыта
б) Комнаты соединены между собой
в) Персонаж не может пройти сквозь закрытую дверь.
Проанализировав все предикаты, система создает план, в котором персонаж открывает дверь и заходит в другую комнату через эту дверь.
И происходят последствия для состояние мира – предикат двери меняется на открытую, а предикат NPC меняется на другую комнату.
Короче, автоматизированное планирование – это выяснить, что и в каком порядке делать.
И, глобально, всё понятно. Есть две комнаты, между ними дверь. Открой дверь – зайди в комнату – готово. Но если посмотреть на детали, то всё становится сложнее. Где стоит NPC? Что находится в комнате? Как он будет идти мимо предметов к двери? Что за дверью? И т.д. То есть для видеоигры – голое автоматизированное планирование не совсем подходит. Уж точно не для 2005 года. И теперь мы можем начать говорить о способе, который используется в F.E.A.R.
GOAP (Goal-Oriented Action Planning) или “Целенаправленное планирование действий”
Есть такой человек, которого зовут Джефф Оркин. Он руководил отделом искусственного интеллекта Monolith Productions и был ведущим программистом проекта GOAP.
Ещё в 2006 году на GDC в своей публикации «Три состояния» (ссылочка, конечно же, будет в описании) он рассказал, что система целенаправленного планирования действий управляется FSM — Finite-state machine (конечные автоматы).
То есть система конечных автоматов и GOAP схожи, но есть нюансы.
В Half-Life у NPC было 80 уникальных состояний. А в F.E.A.R. всего три.
Как же так? Ведь в Fear клоны кидают гранаты, прячутся за укрытия, переговариваются, группируются и вообще ведут себя явно умнее, чем NPC в Half-Life. Хотя в своё время военные в Халве вызывали восторг.
Секрет в том, что три состояния в F.E.A.R. это:
1.Перемещение в положение в мире
2.Воспроизведение анимации
3.Взаимодействие с объектами
GoTo – направление в определённое место, а также анимация этого движения. Прыжки, бег, ползание и прочее.
Use Smart Object – анимация взаимодействия с предметами (открытие дверей, подготовка укрытия и т.д)
Animate – проигрывание анимации. Например, стрельба, оглушение или просто чесание задницы.
То есть, если говорить простым языком, всё, что делают Клоны в F.E.A.R. – это движение и проигрывание анимаций. Именно поэтому, когда все эти анимации и движения происходят в правильном порядке возникает ощущение “интеллекта” противников.
А для того, чтобы узнать в каком порядке всё это отправлять NPC, система создает план и решает его при помощи алгоритма А - star.
Короче, кратчайшее достижение цели. В итоге эти планы, созданные А-star, переводятся в состояния FSM и дальше уже происходит передвижения и проигрывание анимаций.
КАК РАБОТАЮТ ЦЕЛИ
Но если у NPC не будет цели, то система не сможет найти способ её достичь. И в FEAR у противников есть около 70 целей. Каждая из них может быть инициализирована, обновлена и завершена. Но это не всё. Очень важно, что в игре есть система, которая позволяет определять приоритет этих целей.
Если у врага есть цель “патрулировать” и “убить врага”, то, пока игрока рядом нет в приоритете будет “патрулировать”. Но как только игрок будет замечен – приоритеты поменяются.
Система GOAP должна выбирать, что именно сейчас нужно делать. В игре есть 120 действий, но не все они доступны каждому типу противнику. У разных типов противника есть разный набор действий, доступных для решения разных задач.
Поэтому разные типы противников ведут себя по-разному. Если есть две задачи про патрулирование и убийство врага, как в примере выше, то Клон будет патрулировать свою территорию, пока не увидит врага.
Ассасин сбежит в какой-нибудь угол на потолке и будет сидеть там, пока игрок не придёт к нему. А крыса просто сбежит, потому что у неё нет возможности атаковать, поэтому задачу “убить врага” она решить не может. Задачи одинаковые, но набор возможных действий разный, поэтому так и получается.
Но что делать, если план что-то нарушает? Например, враг хотел открыть дверь, а дверь открыл другой противник?
Чтобы избежать проблем, система запускает быструю проверку. Проверка делает копию “состояния мира”, проворачивает на нём этот самый план и только тогда выполняет его.
Помимо этого у каждой цели есть функция ReplanRequired, которая проверяет, нужно ли отказаться от плана и получить новый от планировщика. Но отказаться от плана можно только если NPC выполняет анимацию, которую можно прервать. Ведь если он уже начал прыгать в окно, то обратно в полёте он не прыгнет.
И, наконец, система проверят прямо во выполнения действия, что все предварительные условия и последствия остаются прежними. Если нет – план прорабатывается заново.
Как только план выполнен, сразу же строится новый. Именно поэтому F.E.A.R. настолько динамичен. Да и, как правило, планы в FEAR короткие.
Одно – два действия. Иногда могут достигать четырёх.
Что интересно, Джеф Оркин упоминает о том, что противники учитывают прошлые неудачи. Например, если противник хотел открыть дверь, а игрок её держал, то он попробует её выбить. Если и это не удается, то он может запрыгнуть в окно, находящееся рядом и сразу вступить в рукопашный бой. То есть, ИИ учитывает в своих планах то, что дверь что-то держит.
Однако есть одна проблема, о которой даже в Монолите не знали до 2014 года. Профессор Эрик, анализирующий производительность GOAP в FEAR, заметил, что на некоторых уровнях падает производительность. Из-за крыс. Они строят планы, независимо от того, есть ли рядом игрок. И продолжают строить их даже тогда, когда он уже давно прошёл мимо, пытаясь убежать подальше.
Глобальный планировщик
Помимо тех систем, о которых мы только что говорили, в игре также есть глобальный координатор, который периодически группирует несколько ботов, на основе их удаленности друг от друга. Поведение отрядов делится на простое и сложное.
Простое поведение – огонь на подавление, движения клонов цепочками и т.д. Сложное – обход игрока с фланга, отступление и координирование атаки.
Именно сложное поведение тогда могло вызывать вау эффект у нас с вами. Например, если игрок начинает стрелять по врагу, то координатор видит, что укрытие больше не работает и отправляет клона искать другое. Но ближайшее укрытие может оказаться у вас за спиной. То есть бот просто нашел кратчайший путь до укрытия не под огнём, а не зашёл вам за спину. Но ощущение такое, несомненно, возникает.
РАДИОПЕРЕГОВОРЫ
Переговоры очень хорошо создают иллюзию умных врагов. Например, если враг остаётся один – то проигрывается “мне нужна поддержка”. И дальше на уровне обязательно будет больше солдат. Хотя никакой поддержки, конечно же, бот не вызывал.
Или вместо того, чтобы клон кричал от боли, игра просит другого противника спросить о статусе раненого. И тогда, на вопрос “ты в порядке?”, он ответит, что ранен. Абсолютно гениальным решением является заставить противника, который не может выполнить ни один план и сидит на месте, получая пули, произнести фразу крикнуть “Мне некуда идти”. Таким образом враг оказывается не тупым ботом, а противником, у которого нет путей для отступления.
УРОВНИ
Вся вышеописанная система из конечных автоматов и системы планирования просто не смогла бы работать на неподготовленных уровнях. Если просто взять бота и поместить его в пустое помещение – ни о какой иллюзии слаженных боевых действий не может быть и речи. Для всего этого нужен список целей, решений задач, укрытия, окна, двери и многое другое. Именно поэтому уровни в F.E.A.R. могли быть неказистыми, зато всегда интересными для перестрелок.
Причем, по словам Джефа Оркина, дизайнеры отвечали за поведение противников только в сюжетные моменты. Всё остальное система GOAP рассчитывала уже сама, в зависимости от поставленных задач.
Это всё становится заметно, когда играешь в аддон PERSIUS MANDATE, который разрабатывала TimeGate Studios. Там противники ведут себя гораздо глупее. Хотя в движке, вроде как, ничего особо не менялось. А всё потому, что уровни были больше, чем в оригинале и не так продуманы.
Выводы
Можно было бы сказать, что система GOAP была слишком сложной и загнулась, но это совсем не так. Модифицированная и изменённая версия
GOAP встречается довольно часто. Помимо уже культовых игр, таких как Тень Чернобыля и Deus Ex HR, можно вспомнить Shadow of War или перезапуск Tomb Raider.
В какой-то степени GOAP плавно превратилась в систему HTN, (hierarchical task network) иерархический планировщик сети, который используется в Horizon Zero Dawn. Этот планировщик отслеживает всех AI на куске карты и создает планы из нескольких действий, в которых уже есть последовательность.
В любом случае, подобная система планировщика довольна сложна для реализации и гораздо чаще разработчики выбирают путь попроще. И это печально, хотя, буду надеяться, когда-нибудь в мире появится новый “FEAR”, который снова перевернет представление об AI в играх.
А прежде чем закончить, я предлагаю вам вспомнить в какой игре вас что-то поразило. Это может быть сюжет, геймплей, музыка и что-то ещё. А я попробую выбрать самую интересную тему и сделать ролик (ТЕКСТ) по ней.
Лучшие комментарии
Насколько я понял эта фишка Фира работает за счет заранее сгенерированных уровней. Т.е. она уже не будет работать с разрушаемыми укрытиями и стенами. Но в целом работа ИИ вещь интересная. =)
Автор малаца, хорошо заресерчил перед написанием текста. Даже не припомню настолько подробных видосов об ИИ, как минимум на русском языке.
Недавно решил поиграть в игру из детства Механоиды и был очень удивлен, как хорош там ИИ. Боты активно создают ощущение, будто ты играешь в ММО.
Материал действительно очень хорош!) Мое почтение
большое спасибо за классный материал!
Блин, отличная подача, интересная тема, мегахарош.
Про ИИ в Хейло хотелось бы послушать, ещё в Комбат Эволвед был один из самых продвинутых ИИ тех лет. Враги очень хорошо реагировали на стиуации, выкуривали тебя, взаимодействовали друг с другом.
Просто обычно под спойлер прячут именно видео. Типа «Вот текст, а кому лень читать вот видосик» Все конечно понимают что текст это получается как вторичный продукт от видео, а блог пиарит именно его. Если под спойлер прятать видео, тогда блог будет более полноценным что ли, ибо текст встанет на первый план.
Ну, кстати, помня про то, что геншин мобилка — то они очень сильно заморочились по сравнению с тем, что было на рынке в тот момент.
Твой пост заставил меня скачать игру спустя годы. Спасибо за материал!
Отличный ролик, приятная подача, все супер понятно, плюс мемчики. Хотел бы услышать и про другие системы поведения ботов, и вообще про ИИ.
Как-то странно момент выглядит: вроде уже начал общаться, а потом вспоминаешь, что забыл поприветствовать. Ну и лучше убрать текст из под спойлера: в нём нет необходимости :D
Спасибо за видеоверсию, шикарный монтаж и звук, вставки и оформление текстом-картинками на экране, мне зашло. Желаю, чтобы твои навыки создания видеоконтента где-нибудь стали востребованы и приносили доход (ну в крайнем случае, в Блогах всегда оценят))
Ну и тема раскрыта на десяточку. Я помню, где-то уже был ролик, в котором говорилось, что AI в F.E.A.R круто лишь потому, что для него были спроектированы соответствующие уровни, в других локациях он бы не вызывал такого эффекта, но при этом не было разжевано, как этот AI в целом устроен и работает. Тут всё это есть, ну и очень хорошо, что в формате видео — из текста без наглядных примеров я бы и половины не понял. Моё спасибо, как ценителю серии, прошедшему, прости Господи, даже тройку)
А что до впечатавших меня игр, в основном меня цепляет сюжет. И тут, пожалуй, первенство у Кодзимы-сана с его МГС, самые сочные «вот-это-повороты» из встречавшихся мне. Плюс ломание четвертой стены (тут ещё и нестандартные для большинства игр механики можно добавить к списку впечатлений).
Спасибо, приятно слышать. Я вообще изначально полез изучать вопрос на ютуб, а оказалось, что у нас совсем пусто в этом плане.
В Механоиды, кстати, не играл никогда. Может стоит глянуть.
Спасибо, приятно слышать. А я в своё время МГС пропустил, потому что не было плойки. Но вот в писволкер играл с удовольствием.
Очень, если нравится идея игр, которые «играют сами в себя». Да и сюжет там балдежный, очень советую, игра сильно обделена аудиторией, но все кто в нее поиграл в восторге.
Насчёт падения производительности из-за крыс, сколько раз играл в F. E. A. R. ни разу с таким явлением не сталкивался.
Ещё в экстракшн пойнт можно погонять, хороший аддон был
Спасибо, очень интересная статья!
Very interesting. Ну ооочень интересно
Greengreenpro классный
Просто, мне кажется, что текст не совсем того качества, которое я хотел бы видеть. Поэтому я туда его и отправил для тех, кто ну прям совсем не хочет смотреть видео \ на работе \ нет наушников \ презирает видосы