Один из самых базовых — и самых сложных — вопросов, который встаёт перед ИИ в The Last of Us. Потому что это не «сесть за ящик». Это — решение о выживании. А выживание, как и смерть — вещь нерациональная.
🔹 Сначала — сбор кандидатов:
ИИ ищет cover posts — это точки укрытия, заранее просчитанные в редакторе, с ориентацией против угрозы. Берутся ближайшие 20 штук на NPC. Каждая из них проверяется четырьмя лучами: можно ли стрелять из неё по игроку. Если хотя бы один луч блокирован — точка отбраковывается.
Параллельно находятся open posts — это точки для разведки: из них тоже стреляют лучи, но не по игроку напрямую, а в последнее известное его местоположение.
🎯 Всего за кадр может быть запущено до 160 raycast’ов — они же формируют исходный список точек, куда NPC в теории может пойти. Затем на оставшиеся точки запускается pathfinding, но не сразу — в порядке очереди, максимум 20 на кадр.
🔹 Потом — пост-селекторы (post selectors):
ИИ не выбирает точку сразу. Он передаёт весь массив данных в скриптовую систему. Всего в игре было 17 различных селекторов, каждый из которых подбирает точку под текущее состояние NPC: атака, уклонение, оборона, паника и т.д.
Каждый пост проходит через набор критериев — и каждый критерий выдаёт значение от 0 до 1. Эти значения перемножаются: итоговая точка — это та, у которой наивысший результат. Причём:
– Критерий
ai-criterion-static-pathfind-not-near-player отбраковывает укрытия, путь к которым идёт сначала к игроку, а потом от него. Это частый баг в шутерах — когда NPC «хочет» пойти в дальнее укрытие, но для этого пробегает мимо тебя.– Критерии можно обновлять на лету — всё написано на LISP и перезагружается без перезапуска.
– Все оценки точек идут асинхронно, заранее, поэтому ИИ мгновенно реагирует на смену ситуации — он всегда знает, куда ему двигаться, не тратя кадры на панику.
📌 И именно поэтому люди в The Last of Us кажутся живыми. Потому что они не бегают по скриптам, а взвешивают варианты, анализируют, не слишком ли они сблизятся с тобой при беге к укрытию.
В отличие от заражённых, человек в бою не инстинкт — он расчёт, страх, уклонение и агрессия. А у тебя на него — всего пара патронов.
#devblogTLoU #devblogTLoUAI

