Томми Томпсон, автор 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 предстояло ответить на два вопроса.
Ubisoft предстояло ответить на два вопроса.
- Кем должен чувствовать себя игрок? В данном случае, речь идёт о повелители зверей, который может буквально решать свои проблемы с помощью медведей.
- Какова роль компаньонов?
AI в Far Cry Primal работает на основе древ поведения. Они построены с помощью инструментов, которые кодируют их в XML. Команда из Торонто не хотела менять уже существующий код не только потому, что это могло бы сказаться на работе монреальской, шанхайской и киевской команд, трудящихся над Primal, но и из-за огромного количества различных систем, задействованных в игре. Любые вносимые изменения влияли бы на уже существующие деревья поведения, вступали бы с ними в конфликт.
Разработчики избежали подобных проблем введением динамического древа поведения: время от времени система создаёт новое микродрево на основе команд, которые пользователь даёт компаньону. Таким образом, команда из Торонто могла экспериментировать с поведением AI, не боясь что-то сломать.
Поведение компаньонов базируется на указаниях игрока, в то время как AI управляет каждым животным и ориентируется на ситуацию, происходящую вокруг в игровом мире. Микродрево лишь устанавливает приоритет действий. Таким образом, зверь, получивший приказ от игрока, будет действовать иначе, чем обычно. Например, тигр, которому вы приказали двигаться к конкретной точке, не побежит сквозь огонь, однако он вернётся к привычному поведению, как только задание будет выполнено.
Систематические древа также могут быть полностью отключены, чтобы компаньоны совершали несвойственные им действия. Например, это происходит, когда игрок натравливает более мелкого зверя на более крупного. Таким образом, поддерживается иллюзия того, что игрок действительно имеет власть над животными. Для её поддержания в игре также присутствует возможность приласкать зверя, несмотря на то, что она никак не влияет на AI или его отношение к пользователю.
Систематические древа также могут быть полностью отключены, чтобы компаньоны совершали несвойственные им действия. Например, это происходит, когда игрок натравливает более мелкого зверя на более крупного. Таким образом, поддерживается иллюзия того, что игрок действительно имеет власть над животными. Для её поддержания в игре также присутствует возможность приласкать зверя, несмотря на то, что она никак не влияет на AI или его отношение к пользователю.
Разработчики столкнулись с двумя проблемами: как сделать так, чтобы компаньоны оставались в непосредственной близости к игроку и как заставить их следовать за пользователем, когда навигационные меши не позволяют сделать этого или игрок совершает что-то глупое (например, прыгает с высокой скалы).
Вторую проблему решили самым простым способом — компаньон просто телепортируется поближе к игроку, но только в том случае, если он находится настолько далеко, что просто не может добраться до пользователя достаточно быстро. Кроме того, для телепортации животное должно не попадать в поле зрения игрока на протяжении нескольких кадров.
Система оценивает территорию позади игрока, прежде чем телепортировать на неё компаньона. Поэтому в Primal никогда не происходит ситуаций, когда огромный медведь, например, появляется на маленьком камушке, или саблезубый тигр внезапно оказывается в реке, хотя не умеет плавать.
Вторую проблему решили самым простым способом — компаньон просто телепортируется поближе к игроку, но только в том случае, если он находится настолько далеко, что просто не может добраться до пользователя достаточно быстро. Кроме того, для телепортации животное должно не попадать в поле зрения игрока на протяжении нескольких кадров.
Система оценивает территорию позади игрока, прежде чем телепортировать на неё компаньона. Поэтому в Primal никогда не происходит ситуаций, когда огромный медведь, например, появляется на маленьком камушке, или саблезубый тигр внезапно оказывается в реке, хотя не умеет плавать.
Когда компаньоны следуют за игроком, они стараются оставаться в его поле зрения, при этом не вырываясь вперёд. Все анимации бега животных проигрываются со скоростью на 30% выше скорости пользователя, когда игрок двигается и видит компаньона. Когда же соратник находится вне поля видимости, скорость анимации повышается до 250%. Так животное никогда не оказывается слишком далеко от игрока.
Впрочем, из-за этой системы у авторов возникали проблемы на этапе разработки. Если игрок всё-таки уходил слишком далеко, животное следовало за ним, не имея возможности вовремя остановиться. Из-за этого, если игрок тормозил, например, рядом с обрывом, компаньон мог попросту сорваться с него. Проблему решили с помощью рейкастинга — животное проверяло окружение вокруг и меняло свою скорость в зависимости от того, что происходило в игровом мире.
Впрочем, из-за этой системы у авторов возникали проблемы на этапе разработки. Если игрок всё-таки уходил слишком далеко, животное следовало за ним, не имея возможности вовремя остановиться. Из-за этого, если игрок тормозил, например, рядом с обрывом, компаньон мог попросту сорваться с него. Проблему решили с помощью рейкастинга — животное проверяло окружение вокруг и меняло свою скорость в зависимости от того, что происходило в игровом мире.