Вы когда-нибудь задумывались “Почему хороших игр с открытым миром так мало?”
Сегодня мы поговорим с вами о понятии прорисовки и прогрузки. Варите кружку пельменей, с вами на связи разработчик игр с восьмилетним опытом в этой среде и мы начинаем!
Открытый мир и его проблемы
Когда играешь в игру с линейным сюжетом, часто удивляешься, насколько живым может быть вымышленный мир. Хорошим примером тут может послужить игра Metro: Last Light .
Никто не мешает пробежаться в игре от точки А к точке В. Но игра открывается по настоящему, когда приходишь её неторопясь. Проходя по “жилому комплексу” можно встретить неловкий диалог, когда несколько парней пытаются объяснить девушку, что её муж погиб на вылазке. Пройдя чуток дальше, можно увидеть подобие школы, где учитель пытается объяснить детям как выглядел когда-то слон. Зайдя в театр, можно сесть и посмотреть представление. Все эти аспекты не важны для сюжета, но необходимы для атмосферы.
Такая атмосфера хорошо реализуется в линейных играх, ведь разработчик знает где и когда появится персонаж и словно опытный режисер, создает свой мир.
Но с открытым миром начинаются проблемы. Что, если персонаж захочет пойти туда, куда он не должен был идти? А что, если в игре вовсе нет сюжета? Давайте рассмотрим какие хитрости для этого придумали разработчики игр.
Дальность прогрузки
Зачастую в играх с открытым миром используют самую простую схему: Куда игрок смотрит, там и есть “жизнь”.
Играли ли вы в GTA San Andreas?
Замечали ли вы, что если вы делаете что-то не связанное с сюжетом, то КПД таких действий практически 0? Например, если вы оставите свою машину на улице, уедите в другую часть города, вернувшись вы не найдете своей машины. Или пример проще. Играя на слабом ПК или телефоне, разогнавшись до больших скоростей, вам начинает казаться, что транспорт появляется прямо перед вами. И это действительно так. Машины буквально создаются перед вами, так как игра не хранит о них никакой информации, пока вы не появитесь в этой части города и как только покинете её - эти машины и люди удаляться из памяти игры.
Но есть и противоположный эффект. Есть игры которые запоминают каждое ваше действие, но когда вы уходите вдаль, перестают как либо подгружать целые участки карты.
Minecraft - революционная игра.
Эта игра использует систему чанков. Вся игра поделена на чанки размером 16*16*256 метров. Каждую секунду игра обрабатывает каждый чанк 20 раз для корректной работы игры. При самых минимальных настройках игра будет обрабатывать только один чанк. А это 16*16*256*20=1 310 720 операций в секунду.
Думаю - нет нужды разъяснять почему эта игра не подгружает сразу всю локацию. Но кто-то возразит: “В этой игре все действия запоминаются. Если я поставлю блок,отойду на 1000 метров и вернусь назад, он будет там же”. И это верно. Разница лишь в том, что информация об всех изменениях в игре записывается напрямую на жесткий диск. Но проведите эксперимент: закиньте в печь на обжарку мясо, отойдите на 700 метров и постойте так. Сколько бы вы так не стояли, пока вы не возле печи, мясо никогда не приготовится, ведь игра попросту забыла про него и не вспомнить, пока вы не подойдете к печи.
Игры, которым неважны дистанции
А теперь давайте поговорим про алгоритмы сложнее. Понятное дело, что подгружать сразу всю локацию глупо. Обычно прогружаются только те объекты, которые игрок может увидеть. Всё остальное просто не отрисовуется (Разве что в ранних версиях PUBG, где разработчики посчитали хорошей идеей прогружать целиком всю карту, чем вызвали лаги даже на хороших машинах).
Но есть ряд игр, которым всё равно на это. Их персонажи живут вне вашего присутствия.
Самый простой пример - серия игр S.T.A.L.K.E.R.
Первоначальной задумкой игры было, чтоб мир игры жил своей жизнью, а игрок был лишь его частью. Монстры ходили куда хотели. Охотились между собою. Люди собирались в банды, дружили, торговали. И всё это без участия игрока. И для этого не нужна была локация. Любому мобу можно было задать цель, он выполнял бы её виртуально. Например моб мог решить идти с точки А в точку С за N времени. Но вот незадача, когда прошло n/2 времени игрок проходит ровно по центру между точками A и C. Что сделать? Верно! Отрисовать моба в точке В и игрок увидит что то идет в точку С. Но как только игрок уйдет и локация в том месте больше не будет отрисовываться, тело моба так же перестанет отрисовываться и он продолжит свой путь в точку С пока не настало время n уже только в виде математических цифр. Когда же он придет, он решит делать что то новое, например с кем то поторговать или подраться. Но ему не нужно для этого тело. По сути это похоже на те текстовые квесты из 1980, где вся игра проходила в виде цифр. По сути GSC создали игру, которая играет сама в себя.
Но тут же возникла проблема. Многие мобы стали понимать, что поодиночке они слабы и стали объединяться. Дошло до того, что бегая 20 минут по карте, игрок не встречает ни одного моба. А потом он встречает стаю из 30 особей хищных монстров, которые охотятся на стаю из 20 особей травоядных, которые в свою очередь пытаются выгнать со своих владений человек 50, зашедших на их территорию.
Потому разработчики сделали изменения в алгоритмах и теперь мобы были более заскриптованы. Каждый моб имел свой "дом" и несколько точек куда он "захочет пойти". И дошло до того, что некоторые мобы не могли пересектись в принципе, что равномерно расположило их по "Зоне". Как не удивительно, но такая заскриптованность стала выглядеть более реалистично, нежели когда у мобов была "свобода выбора".
Однако разработчики этой игры не отказались от механики со видеовставками и режиссерскими постановками, создав красивый фреш из игры с полным открытым миром и сюжетной игрой с катсценами.
Как бы там ни было, это основные схемы реализации игр с открытым миром. Если вы знаете еще какие варианты реализации Open World - добро пожаловать в комментарии...