Gamedev Андрей Верещагин
3 888

Повелитель зверей: как работают компаньоны в Far Cry Primal

Послушные животные и проблемы со скоростью.

В закладки

Томми Томпсон, автор YouTube-канала AI and Games в блоге на сайте Gamasutra опубликовал расшифровку своего видео о Far Cry Primal. В нём он рассказал, как разработчики из Ubisoft Toronto внедрили в игру механику управления напарниками, не меняя при этом действующих взаимосвязей AI. Мы выбрали из материала главное.

Несмотря на то, что Far Cry разрабатывается студией Ubisoft Montreal, искусственный интеллект компаньонов для Primal создавался небольшой командой в Торонто. Она также помогала с созданием Far Cry 4 и самостоятельно работала над Splinter Cell: Blacklist.

В Far Cry 4 команда из Торонто отвечала за сцену в «Шангри-Ла». Это серия из пяти линейных миссий, в которых игрок приручает тигра и получает возможность использовать его в качестве оружия. Эта механика стала основой для Primal, которая в 2014 году, в момент выхода Far Cry 4, находилась на стадии препродакшена.

Серия шутеров от Ubisoft известна тем, что в ней одновременно взаимодействуют множество систем AI: это и напарники, и противники, и средства передвижения. Однако эпизод в «Шангри-Ла» был заскриптован и практически все вышеназванные системы в нём не работали. Поэтому авторам Primal пришлось основательно поработать над механикой приручения и использования диких животных, чтобы та вписалась в уже апробированную экосистему.

Ubisoft предстояло ответить на два вопроса.

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

Нужно было определиться, как именно животные будут поддерживать игрока. Источниками вдохновения стали пёс из Fallout 4 и Элизабет из BioShock Infinite. На ранних этапах разработки планировалось добавить в игру порядка 50 различных зверей, однако до релиза добрались лишь 17 из них.

AI в Far Cry Primal работает на основе древ поведения. Они построены с помощью инструментов, которые кодируют их в XML. Команда из Торонто не хотела менять уже существующий код не только потому, что это могло бы сказаться на работе монреальской, шанхайской и киевской команд, трудящихся над Primal, но и из-за огромного количества различных систем, задействованных в игре. Любые вносимые изменения влияли бы на уже существующие деревья поведения, вступали бы с ними в конфликт.

Разработчики избежали подобных проблем введением динамического древа поведения: время от времени система создаёт новое микродрево на основе команд, которые пользователь даёт компаньону. Таким образом, команда из Торонто могла экспериментировать с поведением AI, не боясь что-то сломать.

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

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

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

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

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

Когда компаньоны следуют за игроком, они стараются оставаться в его поле зрения, при этом не вырываясь вперёд. Все анимации бега животных проигрываются со скоростью на 30% выше скорости пользователя, когда игрок двигается и видит компаньона. Когда же соратник находится вне поля видимости, скорость анимации повышается до 250%. Так животное никогда не оказывается слишком далеко от игрока.

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

#геймдизайн

{ "author_name": "Андрей Верещагин", "author_type": "editor", "tags": ["\u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d"], "comments": 8, "likes": 46, "favorites": 30, "is_advertisement": false, "subsite_label": "gamedev", "id": 26588, "is_wide": true }
{ "id": 26588, "author_id": 22254, "diff_limit": 1000, "urls": {"diff":"\/comments\/26588\/get","add":"\/comments\/26588\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/26588"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954 }

8 комментариев 8 комм.

Популярные

По порядку

Написать комментарий...
8

По ощущениям животные тупо бегали за своим хозяином и атаковали врагов. Как собственно в любой другой игре с компаньёнами.
Давайте ещё вспомним "РЕВОЛЮЦИОННЫЙ" radiant ai из обливиона.

Ответить
1

Никогда не забуду как лесник за оленем гонялся вокруг моей лошади .

Ответить
0

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

Собственно, а почему он не умеет? Я так понял, там в игре что-то вроде смилодонов, они по поведению, физиологии вполне похожи на наших больших кошек, а большинство из них плавают хорошо. Ирбис не плавает, но ведь то потому, что он пушистенький и привык жить на холоде, где мокнуть вредно) Остальные плавают добровольно.
Пускай бы и этот "тигр" плавал, было бы круто!

Ответить
–2

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

Ответить
0

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

Ответить
–5

как работают компаньоны в Far Cry Primal 

Дерьмово (спойлер!)

Ответить
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": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "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, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "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" } } } ]
Узнавайте новости о мостах
Санкт-Петербурга первыми
Подписаться на push-уведомления