Открытию
нового новостного раздела на нашем портале, я посвящаю эту статью. Здесь описаны азы теории, которая поможет в будущем программистам и геймдизанерам реализовать собственную систему искусственного интеллекта для симулятора городской местности. По мере поступления новой информации о практических подходах к реализации данной системы на CryENGINE 3, будут выходить новые части статьи.
Вступление
С тех пор, как вышел CryENGINE3 Free SDK, с новой системой ИИ, основанной на комбинации XML и LUA скриптов, пришло время подумать о новых возможностях скриптинга искусственного интеллекта.
В этой теме, у меня есть задача - создание сложных и абсолютно новых юнитов ИИ, которых можно будет использовать в городской среде. Так как этот движок может быть использован для создания RPG игр, у многих людей может возникнуть подобная задача. Я хочу, чтобы эта тема была посвещена подобным вопросам и решению задачи.
Обзор
Для начала, я хочу сделать небольшой обзор, для сравнения систем ИИ в играх FPS, и симуляторах городской среды. Система ИИ в последних намного отличается от тех, что использованы в Crysis, или в примерах ИИ от CryENGINE3. В обычных FPS/Action игрых вы проходите уровни и сражаетесь с юнитами ИИ, которые должны иметь функции атаки, сложную систему навигации и сложное поведение.
Такие юниты можно назвать NPC - персонажи, которые играют за игрока, или против него, и должны иметь реалистичное поведение.
В симуляторе города дела обстоят иначе. Игрок обычно не много взаимодействует с гражданскими ИИ. Здесь, игра должны производить множество единиц ИИ вокруг игрока, в его поле зрения. Единицы ИИ создаются динамически, и следуют заранее заданным путям. Генерация такого огромного количества
NPC повесит любую систему, и существенно уменьшит количество FPS, поэтому мы должны сделать это по-другому. Городской ИИ не должен быть умным или реалистичным, он просто нужен для того, чтобы заполнять городское пространство, и создавать иллюзию присутствия. Юниты ИИ должны иметь функции следования по путям, атаковать игрока или убегать от него, если игрок атакует первым, и иногда произносить какие-нибудь фразы. Они будут больше похожи на объекты Boids, только с искусственным интеллектом.
Такие юниты можно назвать Dummy (пустышки) - произвольно созданные юниты, следующие по путям и практически всегда игнорирующие игрока.
Конечно же, в подобных играх, обычные NPC врагов или друзей тоже могут быть использованы, но только в миссиях или в особые моменты.
Шаги к созданию системы Dummy AI
Пути
Прежде всего, нам надо определиться, какие элементы новой системы ИИ нам нужно создать, чтобы сделать возможной работу ИИ Пустышек на карте. Представьте себе город и улицу. Сначала дизайнеру нужно поместить на эти улицы
пути - специальные формы, которые используются для следования Пустышками. Далее, дизайнер должен определить
точки перехода - специальные объекты, помещаемые между концом одного пути и началом другого. Они нужны для
произвольного перехода юнитов между этими путями.
Генераторы
Когда предыдущая часть задачи реализована, нам нужно каким-нибудь образом генерировать пустышек на путях. Это возможно реализовать двумя способами:
- Мы прикрепляем генераторы к каждому пути, в тех местах, где должны появляться пустышки
- Система ИИ (Далее Спаун-система) будет сама находить ближайшие к игроку пути, и генерировать фиксированное количество пустышек на них
Первый способ требует огромное количество работы дизайнера, ручной расстановки, но он позволяет дизайнеры контролировать больше настроек. Второй способ более сложный в плане реализации, но гораздо более простой в плане настройки всей карты, т.к. все настройки будут храниться в одной месте в коде. Думаю, следует остановиться на втором способе. Давайте рассмотрим его подробнее. Находить сущности во время игры динамически - вполне возможно, так что возможно будет найти все пути, которые находятся в определённом радиусе вокруг игрока. После того, как мы найдём список всех подходящих путей, нам нужно будет сгенерировать на них пустышек. Лучше ставить пустышки равномерно, по всей длине пути. В этом случае, нам удобнее делать пути, состоящими из множества точек, как на рисунке ниже:
Спаун система будет брать каждый путь из списка, потом находить каждую точку в цепочке, получать её глобальные координаты, генерировать в этой точке пустышку, и заставлять её следовать по пути. Другая система будет проверять зоны вокруг путей на наличие пустышек, и если они находятся слишком далеко от игрока, система убирает излишние единицы.
Итак, что мы имеем из нашего плана
После завершения всех шагов выше, у нас будет простая и полезная система гражданских пешеходов, пустышек, которые будут повсюду на улицах вокруг игрока. Они будут ходить и произвольно переключать пути следования. Когда игрок выйдет из их зоны действия, они будут уничтожены, а затем созданы в другом месте, когда игрок перейдёт в другой район города. Это создаст впечатление на игрока, что весь город населён этими пешеходами.
Вот пример того, как эта система работает, в теории:
рис. 3 (Path - путь, Transition Point - точка перехода, Path Point - точка на пути, используемая для генерации)
Теперь, я хочу завершить эту систему с помощью скриптов и программирования. Статья будет обновлена в будущем. Мне хотелось бы выслушать пожелания и обсуждения проблемы от других дизайнеров и программистов. Быть может, вместе мы сможет сделать эту принципиально новую систему ИИ.
Ссылки по теме:
Оригинальная тема:
Проект городского ИИ
Статья на английском:
City AI Project
См. также:
Общественный проект на CryENGINE 3