AI в играх. Основы

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

Для начала: AI (artificial intelligence по-русски — искусственный интеллект, сокр. ИИ) — определенный набор программных решений, которые используются для имитации интеллекта в поведении персонажей, управляемых компьютером.

Для того чтобы модель могла перемещаться по миру причем с учетом логики необходимо эту модель описать кодом.

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

Мы видим мир, ощущаем его, он воздействует на нас, мы видим препятствия, и чтобы дойти из точки A в точку B мы огибаем их.

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

Для того чтобы получить такую информацию необходимо все игровое пространство поделить на определённые части, то есть дискретизировать. Не стоит путать дискретизацию с понятием дискредитация. Это может быть регулярная сетка, где каждый квадрат/гекс сетки является ячейкой в которой может находится модель. Либо навигационным мешем, либо любым другим описываемым понятием дискретизации.

Примечание: описание понятия граф не претендует на полную научную трактовку!

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

Перемещение модели возможно по вершинам в соответствии с существующими у нее гранями.

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

AI в играх. Основы

В случаях с NavMesh или Waypoint картина будет немного иная, но суть у них у всех примерна похожа.

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

  1. Алгоритм Дейкстры
  2. A* (A star, А здездочка и прочее)
  3. Волновой

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

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

  1. Система на основе правил
  2. Конечные автоматы
  3. Адаптивный ИИ

Каждый из которых находит свое применение в играх, суть их одна — дать имитацию жизни модели.

В итоге, ИИ включает в себя:

  1. описанную кодом модель
  2. дискретизированное (поделенное) для навигации игровое пространство
  3. алгоритмы поиска пути
  4. организация логики
Поделиться:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*