Выкладываю этот обрывок статьи из статьи Игромания-Игрострой за 2009 год так, как она может быть полезна и натолкнуть на какие-то неординарные решения тех, кто еще не сталкивался с подобными вещами.
Саму статью будет уже довольно проблематично найти в интернете, а она дает хорошую пищу для размышлений, поэтому посчитал своим долгом выложить это на просторы форума.
Автор оригинала: Алексей Макаренков, Игромания 2009г.
Как работают сложные модели поведения NPC
В прошлом выпуске
«Игростроя» мы вам уже рассказывали о проблеме AI в современных играх — в частности, упомянули, что в подавляющем большинстве игр искусственный интеллект построен на примитивных триггерах и с реальным человеческим мышлением не имеет ничего общего.
Однако существуют алгоритмы, которые делают поведение
NPC очень похожим на поведение реальных людей. Например, системы, основанные на
GPS (
General Problem Solver — универсальный решатель задач, не путать с GPS-навигаторами).
Этот алгоритм был разработан
Алленом Ньюэллом и
Гербертом Сайнмоном еще в 1959 году. GPS отчасти моделирует мыслительную деятельность человека.
Он ставит перед собой задачу (задается программистом), после чего ищет различные пути ее решения, основываясь на информации о законах функционирования окружающего мира. Если какой-то вариант решения приводит в тупик, то происходит откат системы к последней стадии, с которой можно найти работоспособный вариант. Звучит немного сложно, так что лучше давайте разберемся на конкретном примере.
Предположим, в игре имеется NPC-убийца, который знает об окружающем мире то, что в нем есть магазины, в некоторых из которых могут продаваться топоры, еще в мире есть бабушки, наделенные свойством сидеть дома или перемещаться по улицам, на улицах помимо бабушек могут встречаться милиционеры, которые могут больно ударить дубинкой или выстрелить из пистолета в коленную чашечку.
Программист
Ф.М. Послеевский ставит перед NPC непростую задачу:
свести на нет поголовье бабушек на заданной игровой территории.Дальше — никаких триггеров. В действие вступает GPS:
NPC-убийца начинает проигрывать последовательность действий.
Выйти на улицу, подойти к бабушке, попытаться зарубить ее топором. Ошибка ввода!
Топора нет, рубить нечем.
Возврат к первой стадии.
Надо дойти до магазина, поискать топор.
Если в данном магазине топора нет, снова возврат к первой стадии, поиск топора в другом магазине.
Топор найден, выходим на улицу.
Обнаруживаем бабушку, подходим к ней, замахиваемся топором.
Получаем дубинкой по голове и пулю в коленную чашечку.
Возврат к предыдущей стадии (
здесь, кстати, обязательно нужно задать дополнительное «знание о мире» — возможность лечиться).
Идем к бабушке домой и используем топор по назначению уже без последствий для собственного здоровья.
Казалось бы, отличная система, позволяющая создавать миры, которые живут своей собственной жизнью, вне зависимости от того, есть в них игрок или нет (см.
S.T.A.L.K.E.R.).
Вот только все маневры персонажей необходимо просчитывать, а процессоры, увы, обладают ограниченной мощностью. Да и эффект от такой реалистичности, прямо скажем, невелик.
Да, мир живет своей жизнью, вот только игрок не видит и сотой части всего этого великолепия. Именно поэтому GPS-подобные системы в играх используются крайне редко. Это просто нерентабельно.
Дополнение от создателя темы:
Было бы неплохо использовать для этого банальное индексирование зон и машину состояний, для которой NPC мог бы определять, что есть первостепенная задача в текущей стадии. Но, вероятно, это может быть рассмотрено как некие триггеры поведения персонажа.