Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Зависит ли разумность ботов в видеоиграх от мощности компьютера?

ВидеоигрыКомпьютерные игры+1
Максим Потятиник
  ·   · 1,6 K

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

Итак.

Во многих случаях (вероятно, в подавляющем большинстве) - не зависит. Часто ИИ (искусственный интеллект) специально стараются писать наиболее простыми алгоритмами (способами) для того, чтобы поменьше нагружать машину, потому что хотят сэкономить ресурсы для впечатляющей картинки на экране. Если брать шутеры, то приблизительно 95-99% уходит на графику и физику (падение, столкновение, полёт осколков, пыль, жидкости). Это то, что игроки видят чаще всего, это впечатляет больше всего, поэтому ресурсы выжимаются до капли, чтобы обеспечить наилучшую графику. Остальным аспектам (как ИИ) приходится довольствоваться огрызками.

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

Дело ещё и в том, что создание действительно хорошего ИИ - это очень сложная и не всегда успешная задача (особенно обидно, должно быть, работать полгода и понять, что ИИ не вышел). А талант хорошего разработчика игр заключается также и в том, чтобы уметь определять, как лучше всего потратить деньги, чтобы при затратах поменьше получить игру поуспешнее. С такой позиции, как понимаете, ИИ находится в непростой ситуации. Чаще дополнительные деньги вкладывают в спецэффекты, в кат-сцены, сюжет, скрипты. В ИИ деньги вкладывают тогда, когда он является важной составляющей геймплея (в голову приходят S.T.A.L.K.E.R. и F.E.A.R.).

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

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

Прежде всего, хочу отметить, что хорошо написанный, способный ИИ обязательно работает асинхронно (как отдельная задача для процессора), поэтому от мощности процессора результат, всё-таки, зависит. Чем сложнее ИИ, тем больше вещей он понимает и учитывает, тем больше ему требуется времени на осмысление текущей ситуации. На одном процессоре он может справиться за 0.1 секунды, а на другом - за 0.5. Но, конечно, разработчики не дадут вам догадаться, что ИИ "тупит" и не знает, что ему делать. Пока ИИ думает, он просто будет продолжать делать то, что делал раньше (стрелять, сидеть за укрытием или же бежать, куда бежал, а если прибежал - стоять там и отстреливаться).

Также в некоторых играх есть несколько интересных задач, которые требуют сравнительно долгих вычислений (от 0.1 до 1-2 секунд). В основном это всё касается ориентирования в пространстве: понимание "видимости" (откуда что видно, понимание секторов обстрела и целесообразности укрытий) и определение маршрута до нужного места. Для простых коридорных уровней эта задача решается так, что все возможные маршруты, сектора видимости и укрытия просчитаны заранее и боты просто знают их как таблицу умножения. Если тебе нужно туда-то или в тебя стреляют оттуда-то, значит маршрут такой, а укрытия - такие (так сделан FEAR). При таком подходе боты ориентируются весьма быстро.

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

Поэтому используется комбинированный вариант. Для своих глобальных планов боты пользуются "таблицей умножения". Поскольку по ходу игры она начинает устаревать (рушатся стены, укрытия, открываются или закрываются маршруты), отдельная задача в процессоре (своеобразный "командующий всеми ИИ") занимается тем, что постоянно обновляет эту таблицу умножения. Например, как только стена была разрушена, "командующий" помечает все объекты и маршруты рядом с этой стеной как "под вопросом" и начинает анализировать этот кусок уровня, чтобы понять, какие появились возможности (можно ли сквозь пролом куда-то дойти? а имеет ли смысл это делать? в каких случаях это стоит делать, а в каких нет?), какие возможности закрылись (укрытие разрушено? здесь теперь опасно, простреливаемая область? враг может здесь атаковать?), какой открылся обзор (что теперь позволено видеть боту, когда он здесь стоит?). "Командующий" начинает пересчитывать таблицу начиная от разрушенной стены и потом всё дальше и дальше и дальше, пока не проверит всю таблицу целиком и не решит, что она снова отражает текущую ситуация на уровне. Это может потребовать много секунд (с трудом представляю сколько, но допустим, от 3 до 30 секунд, ведь мы помним, что ресурсы нужно потреблять потихоньку, оставляя большую часть для графики).

Там, где "командующий" ещё не успел обновить таблицу, ботам приходится пользоваться устаревшей версией. То есть они как бы не замечают сломанной стены. Особенно трудно приходится ботам в "секторе под вопросом". Они вынуждены пользоваться упрощённым, ситуативным алгоритмом, действуя в большей степени наугад, чем осмысленно. Их логика действий примерно такова: если ты вроде как в "укрытии" (по данным старой таблицы), но в тебя почему-то попали, вычёркивай это укрытие из таблицы и начинай поиск какой-нибудь стены поблизости. Нашёл стену? Представь, что ты встал рядом с ней. Проведи линию от себя к тому, кто в тебя выстрелил. Линия упёрлась в эту стену? Отлично. Беги к этой стене, стой там и отстреливайся, пока командующий не даст новую таблицу этой части карты. При этом у бота нет возможности проверить множество других мелочей (которые проверяет "командующий" при построении таблицы и поэтому это так долго). Например, может оказаться, что стена-то близко, но она находится этажом выше. При попытке добежать туда по прямой, бот просто встанет под этой стеной и окажется ситуации "чёрт, а где стена? найти стену. вот стена. отлично, бежим к ней. но ты уже прибежал к ней. чёрт, а где тогда стена?". Или же стена правильная, но, встав за неё, ему ничего не видно, ему некуда оттуда стрелять, и он просто стоит и ничего не делает. Спасает только то, что эту область "командующий" начинает обновлять в первую очередь и можно надеяться, что он обновит её за секунду-другую и эту тупость никто не заметит.

Однако, на полное осознание всех новых возможностей, которые даёт сломанная стена, может уйти (сколько мы там решили? 30 секунд?). Например, всё это время бот из отдалённого края карты может старательно бежать в обход уже несуществующей стены. Хотя человек, на полпути увидевший сломанную стену, мигом свернул бы туда и срезал путь.

Ещё интереснее, если маршрут, напротив, закрылся. Например, на верхнем этаже была разрушена лестница или пол. Тогда бот неожиданно для себя провалится вниз. Особенно будет смешно, если бежала группа ботов и они будут падать туда друг за другом как лемминги. Потом будут выбегать оттуда, бежать наверх - и снова падать (если "командующий" к тому времени не успеет обновить таблицу).

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

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

связи с общественностью, история, видеоигры  · 7 июн 2016
Как было сказано, в видеоиграх - нет. Но если взять, к примеру, последние достижения в области нейросетей, с помощью которых машина умеет выигрывать людей в шахматы и го (AlphaGo), то да - скорость и вычислительная мощность... Читать далее
Всё, что не противоречит физическим законам...  · 12 апр 2016

Нет. Разумность поведения ботов зависит от алгоритма заложенного в них программистами при создании игры. Вы же не считаете что если будете апгрейдить до бесконечности свой комп в нем зародится разум?)))

Не совсем верно. Зависит от игры.