Не делайте неигровых персонажей умнее игрока

Прокомментировать Просмотры: 4

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

Однако, запуская технологичный блокбастер (будь то Pragmata, PUBG или любой другой проект), мы вновь обнаруживаем всё те же проверенные временем конечные автоматы (FSM), деревья поведения (Behavior Tree), эвристики и бесчисленные конструкции if-else. Именно они диктуют NPC простой алгоритм: приблизился игрок — атакуй, потерял из виду — осмотрись, покричи, а если поиски затянулись — делай вид, что ничего не произошло, и возвращайся к охране сундука с сокровищами по соседству с не менее примитивной местной фауной.

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


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

На бумаге всё выглядело безупречно, ведь игровой цикл рядового NPC концептуально близок к обучению с подкреплением (RL): есть текущее состояние окружения, набор возможных реакций, последующее изменение обстановки и система наград, оценивающая правильность каждого шага. Запустив процесс обучения, мы ждём, пока агент отыщет стратегию, максимизирующую профит. Но на практике это не работает.

Не работает по той причине, о которой часто забывают: игровой искусственный интеллект вовсе не обязан быть математически изощренным — он должен быть поведенчески человечным. Это базовое понятие геймдизайна, которое бесполезно пытаться описать сухими формулами. Более того, чем «умнее» становится персонаж, тем сильнее деградирует сама игра, теряя ощущение того, что виртуальный мир вращается вокруг игрока.

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

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

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

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

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

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

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

Посмотреть можно тут

Функция награды

Допустим, мы всё-таки решились на обучение противника через подкрепление, задав базовые условия: +10 очков за ликвидацию игрока, -5 за полученный урон и -100 за собственную смерть. Мы объяснили модели главную цель — устранить цель, избегая собственной гибели.

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

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

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

Бесконечно совершенствовать функцию награды — путь в никуда. Чем больше деталей мы в нее закладываем, тем сильнее она начинает напоминать попытку описать весь геймдизайн громоздким текстовым промтом. В определенный момент возникает закономерный вопрос: ради чего мы заставляем нейросеть изобретать велосипед и выводить правила, которые нам прекрасно известны и могут быть записаны напрямую в коде?

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

if (timeSinceLostPlayer > 30.0f)
    returnToPost();

Профит! Наши неигровые персонажи обрели адекватное и прогнозируемое поведение. Вернув в кодовую базу десяток подобных проверок, начинаешь отчетливо осознавать, что «тупой ИИ» — это вполне осознанный и здравый элемент геймдизайна.

Игра меняется

Допустим, волевым решением мы всё-таки протащили в проект нейросеть, обложив ее километровым промтом. Но вскоре вмешается геймдизайнер с требованием сделать врагов агрессивнее, следом придет левел-дизайнер с поправкой на скорость перемещения протагониста, через неделю оружейный отдел добавит новый ствол, который тоже необходимо учесть, затем внедрят систему укрытий (о которой я уже писал ранее), следом появится новый тип противника, обязанный синергировать со старыми, а вдобавок выяснится, что на одной из арен NPC постоянно застревают в дверных проемах. После плейтестов дизайнер заявляет, что враг выглядит слишком предсказуемо и паттерны нужно освежить. Слегка освежить, блин… Ты вообще видел, какой объем работы мы ворочали весь последний месяц? И это рутинные будни разработки.

На фоне этого деревья поведения (Behavior Tree), конечные автоматы (FSM) или Utility AI кажутся куда более надежными и прозрачными инструментами. Они обеспечивают понятный интерфейс взаимодействия между программистом и дизайнером: последнему важно не просто созерцать итоговый результат, а кодеру — четко понимать, почему система в текущий момент приняла именно такое решение.

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

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

А теперь представьте, как функционируют современные модели машинного обучения. Отбросив на секунду вопросы разработки и вообразив, что у нас чудесным образом уже есть безупречная нейросеть, мгновенно считывающая состояние мира и подбирающая идеальный экшен, — проблема «ползунков» никуда не испарится.

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

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

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

Рассуждая с позиции инженера, стремящегося создать автономного агента, вы увидите здесь лишь порчу алгоритма. Но взгляните на проект глазами геймдизайнера: геймеру не нужен математически непобедимый оппонент. Ему нужен противник, чье поведение оставляет пространство для анализа, прогнозирования и триумфального использования его слабостей. И мы снова возвращаемся к концепции «театра для одного зрителя».і

Посмотреть можно тут

Предсказуемость тоже игровой дизайн

Сверхмощный и хаотичный ИИ оказывается значительно хуже простого и условно «глупого», просчитать действия которого игроку под силу на интуитивном уровне.

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

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

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

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

NPC должен ошибаться

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

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

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

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

Посмотреть можно тут

Где игры используют ML

Было бы ошибочно полагать, будто машинное обучение бесполезно в геймдеве. Отнюдь: современные движки содержат массу задач, где ML раскрывается великолепно, просто эти области находятся чуть в стороне от «головного мозга» NPC.

Вспомните огромные массивы данных motion capture, которые требуют очистки, сглаживания, кластеризации или конвертации в пригодные для работы форматы. Здесь модели проявляют себя блестяще: показав нейросети тысячи эталонных примеров, мы обучаем ее воспроизводить нужные преобразования. Тем не менее финальную полировку всё равно проводит человек — так называемый human touch.

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

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

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

Подобные концепции чудовищно транслируются в промты или функции наград, вынуждая нас нагромождать требования к длительности боя, вероятностям гибели, нанесенному урону, таймингам опасных зон, вариативности атак и успешности уклонений. В какой-то момент эта спецификация начинает напоминать полноценный GDD (диздок), порождая резонный вопрос: зачем нам городить огород из нейросетей, пытающихся вычислить поведение, которое авторам и так отлично известно?

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

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

Старые технологии продолжат быть

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

В недрах одного продукта мирно соседствуют ECS (Entity Component System), job-системы, сложная физика, DLSS, стриминг открытого мира и асинхронные пайплайны, а бок о бок с ними функционирует проверенный конечный автомат, переводящий NPC из состояния Chase в Search, а оттуда — обратно в Patrol при неудачных поисках.

FSM, Behavior Tree, Utility AI и скрипты позволяют фиксировать видение геймдизайнера для конкретной карты и контекста, сохраняя архитектуру прозрачной для тестирования, балансировки и итеративных правок наряду со всеми остальными элементами.

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

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

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

Почему игры не используют ML

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

Для мгновенного поиска пути по navmesh нейросеть не нужна. Для отслеживания состояний NPC отлично подходит FSM. Для наглядного управления приоритетами незаменимы деревья поведения. При выборе экшенов на основе множества факторов Utility AI куда практичнее сетей с промтами. А вот для извлечения скрытых зависимостей из гигантских массивов данных машинное обучение незаменимо… хотя в ряде случаев посадить толпу тестировщиков проставлять лайки и дизлайки оказывается быстрее и эффективнее.

Наивно полагать, что релиз нейросетей автоматически отменит все прочие методологии. Конечная цель геймдева — построить стабильную, дешевую и масштабируемую систему, которая заставляет проект работать ровно так, как задумано, позволяя команде развивать его и фиксить баги.

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

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

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

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

А как же направление LLM-NPC?

«Хорошо, — возразит проницательный читатель, — всё это справедливо для FSM и деревьев поведения, но на дворе 2026 год, конференции пестрят демоверсиями, где NPC общаются с игроком голосом, помнят контекст беседы и вроде как мыслят самостоятельно». Это действительно так. Я сам был впечатлен разработками вроде Inworld AI и проекта NEO NPC от Ubisoft, где на базе текстовой базы знаний и заданного стиля речи языковая модель при помощи магии LLM генерирует реплики, аудиодорожку и лицевую анимацию в реальном времени. Эффект погружения потрясающий: ощущение беседы с живым собеседником, способным улавливать интонации и вворачивать импровизации, дает мощнейший маркетинговый вау-эффект. Впрочем, нечто похожее я испытывал еще в Fallout 2, чья вариативная система диалогов выдавала уникальные реплики даже на третье-четвертое прохождение.

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

Однако ядро принятия решений (атаковать ли врагу, искать ли укрытие, звать ли подкрепление или прекращать погоню) по-прежнему базируется на массивных конечных автоматах. Ubisoft упоминает об этом мелким шрифтом в финальных слайдах презентаций, и даже в свежих итерациях прототипа (переименованного в Teammates) концепция сводится к обычному текстовому чату с персонажем. Три года исследований и пара сотен инженеров привели к созданию еще одного продвинутого чат-бота, а не принципиально новой боевой системы. Вот вам и ответ на вопрос о готовности LLM вытеснить старый добрый switch.

 

Источник

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов