Рубрика развивается при поддержке

Как работает ИИ мегалодона, кракена и корабля скелетов в Sea of Thieves — часть третья Материал редакции

Кракен без тела, сложная навигационная сетка для галеона скелетов и особые указания для мегалодона.

В закладки
Аудио

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

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

Автор блога AI and Games Томми Томпсон опубликовал на сайте Gamasutra третью часть разбора работы ИИ в Sea of Thieves. В этот раз он рассказал об устройстве искусственного интеллекта трёх самых главных угроз в открытом море — мегалодона, кракена и корабля со скелетами. Каждый противник имеет собственную систему навигации и поведения, которые напрямую зависят от ИИ. Мы выбрали из текста самое интересное.

На старте игроки могли стать жертвами кракена, который охотился на корабли в открытом море. Тем временем дополнение Hungering Deep представило могучего мегалодона, а ивент Cursed Sails привёл в игру галеоны под командованием скелетов.

Кракен охотится в открытом море и всегда готов атаковать корабли, в то время как мегалодон может появиться только после завершения квестовой линии Меррика и путешествия к югу от Хребта дьявола. Точно так же корабли-призраки ограничены тремя конкретными участками возле Залива контрабандистов, Бухты Акулий Корм и Арки Мародёра.

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

Последнее обновление контента в 2018 году под названием Shrouded Spoils, добавило новые функции и сбалансировало уже существующие. Это привело к появлению разных мегалодонов, двух типов кораблей-призраков и изменению схемы атаки кракенов.

Мегалодон

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

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

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

Кракен

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

Кракен уникален тем, что он — единственный ИИ-персонаж во всей игре, который не зависит от архитектуры дерева поведения в Unreal Engine 4. Каждое щупальце — это собственный уникальный ИИ-компонент, который может атаковать игрока, его корабль или просто ждать в воде и ничего не делать.

Однако щупальца разработаны так, что все они получают инструкции от системы, известной как Overlord, которая определяет, какие щупальца должны быть активными. Также она назначает цели для нападения. Overlord спроектирована во многом как конечный автомат (Finite State Machine), и её задача состоит в том, чтобы следить за временем между атаками и их типом.

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

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

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

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

Корабль со скелетами

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

Сами корабли зависят от собственных уникальных парусных и рулевых механизмов. Так как в UE4 нет встроенных навигационных систем для управления судами на воде, проблемы галеонов во многом схожи с трудностями ИИ акул. Таким образом, каждый корабль со скелетами имеет собственную систему сенсоров для обнаружения ближайших препятствий. Это помогает предвидеть столкновения с островами, скалами и даже другими кораблями.

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

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

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

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

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

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

А в Sea of Thieves всё находится в движении — скелеты передвигаются внутри корабля, который постоянно плывёт вверх и вниз по волнам! Весь секрет заключается в том, что навигационная сетка для кораблей фактически не движется. Она запечена глубоко в океане, и каждый скелет строит своё движение на её основе. Она не движется вместе с кораблем и остаётся в фиксированной точке.

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

В то время как игроки представляют реальную угрозу друг для друга, ИИ-персонажи по-прежнему продолжают наращивать силу. На протяжении трёх текстов были разобраны механизмы работы систем ИИ в Sea of Thieves. Но это ещё не всё. Такая игра требует большой отдачи всей команды разработчиков — от художников и аниматоров до звукорежиссёров и программистов. И в заключительном тексте будут рассмотрены системы тестирования и развёртывания, используемые при разработке Sea of Thieves.

{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u0438\u0438","\u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d"], "comments": 18, "likes": 77, "favorites": 100, "is_advertisement": false, "subsite_label": "gamedev", "id": 58559, "is_wide": true, "is_ugc": false, "date": "Wed, 17 Jul 2019 15:45:45 +0300", "is_special": false }
0
{ "id": 58559, "author_id": 94357, "diff_limit": 1000, "urls": {"diff":"\/comments\/58559\/get","add":"\/comments\/58559\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/58559"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
18 комментариев
Популярные
По порядку
Написать комментарий...
10

Классно спасибо, всегда поражало с каким азартом воюет этот пиратский галеон.

Ответить
6

Прочел на одном дыхании) Автор красава

Ответить
0

Автор молодчик3

Ответить
2

Как у них щупальца под водой замаскированы? Вроде же можно нырять

Ответить
2

там все в чернилах и под водой ничего не видно.

Ответить
0

Раньше, не знаю как сейчас, если отплыть можно было увидеть концы щупалец

Ответить
0

Вроде и сейчас можно. По крайней мере, я натыкался на такое.

Ответить
0

Черная вода,ничего не видно

Ответить
1

классная статья

Ответить
0

Как игра в целом? На сколько часов хватит?

Ответить
3

В соляново наплавал часов 10
Если в пати, то часов будет очень много, порой игра порождает очень необычные и смешные геймплейные ситуации

Ответить
0

Часов 200 наиграл. Но с друзьями. Мне просто нравиться воровать чужие сокровища и пвп. Плюс сюжетная линия с уникальными заданиями на 20 часов где-то

Ответить
0

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

Ответить
0

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

Ответить
–1

Спасибо Вам за статью о Конченом.. конечном автомате. Познавательно.

Горите в аду!

Ответить
0

Интересно посмотреть разные варианты решения задач для ИИ в играх.
Какие ещё подходы существуют?

Ответить
0

Машины Тьюринга и Поста. Культисты Дзинча смеются над нами.

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]