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

 

История усатого водопроводчика началась не с Super Mario Bros. - впервые он появился в видеоигре Donkey Kong 1981 года, которая разрабатывалась для аркадных автоматов. Однако именно благодаря домашней консоли NES/Famicom, появившейся в 1983 году, Марио не только проник в гостиные игроков, но и помог индустрии видеоигр пережить кризис, связанный с перенасыщением рынка консолей и растущим интересом к персональным компьютерам.

гейминг, компьютерные игры, разработка, NES , Super Mario Bros. Doom, GTA, Minecraft, видеоигры, C++
Кадр из Super Mario Bros.

Кстати, Nintendo выпустила консоль NES на американском рынке максимально похожей на проигрыватель видеокассет, чтобы она не напоминала покупателям о провалившихся приставках.

По меркам своего времени NES была консолью нового поколения, но разработчики сталкивались с огромными аппаратными ограничениями. В их распоряжении находилось всего 2Кб оперативной и 2Кб видеопамяти. Консоль использовала в качестве носителя картридж, стандартный размер которого составлял всего 48Кб. Таким образом, скриншот с игрой Super Mario Bros. может весить больше, чем сама игра.

Процессор приставки NES был основан на ядре знаменитого MOS 6502, который, помимо сотни других применений, управлял роботом Бендером из Футурамы. И хотя разработчикам скорее всего не нужно было привыкать к работе с таким процессором, игры им все равно приходилось писать на языке ассемблера.

 

 

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

В наши дни при разработке некоторых игр, например The Sims 4 и Eve Online, разработчики используют язык Python. «Hello, world!» на нем выглядит существенно проще.

гейминг, компьютерные игры, разработка, NES , Super Mario Bros. Doom, GTA, Minecraft, видеоигры, C++
Девкит NES, появившийся на eBay в 2011 году

Во времена NES игры, в отличие от сегодняшних ААА-проектов, создавались небольшими командами, чаще из 3-10 человек. Процесс занимал в среднем 3-6 месяцев, а разработке чаще всего учились на ходу: процесс обучения компьютерным наукам в колледжах и университетах тогда был гораздо ближе к железу, поэтому вчерашним студентам было проще приспособиться к новым устройствам.

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

 

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

Помощь пришла откуда не ждали. Вставленный в консоль картридж, в отличие, например, от CD-диска, образует с ней единую систему. Издатели быстро поняли, что с помощью техники смены блоков можно увеличить размер игр и продавали разработчикам картриджи с необходимыми расширениями: картридж сам переключал нужное ПЗУ во время игры, и консоль каждый раз получала новые 48Кб. Некоторые игры таким образом весили и по 1Мб (Metal Slader Glory).

 

В другие картриджи добавлялись усовершенствованные звуковые чипы (Castlevania 3) или батарейки для возможности сохранения игрового процесса (The Legend of Zelda). К сожалению, игрокам, знакомым с NES по ее тайваньскому клону Dendy, это не было доступно: китайские пираты не утруждали себя копированием продвинутых картриджей. Их предпочтения были на стороне сборников «999999 игр в 1».

 

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

гейминг, компьютерные игры, разработка, NES , Super Mario Bros. Doom, GTA, Minecraft, видеоигры, C++
Кадр из Doom (1996).

Doom, великий и ужасный хит 1993 года, стал в свое время настоящим system seller’ом для персональных компьютеров. И хотя его портировали на большинство актуальных консолей того времени, там он выглядел почти как Cyberpunk 2077 на Playstation 4.

Команда разработчиков во главе с Джоном Кармаком и Джоном Ромеро не стала уделять особого внимания сюжету. Кармаку принадлежит известная (и относительно плохо сохранившаяся) цитата: «Сюжет в игре - как сюжет в порнофильме. Он должен быть, но совершенно не важен». Таким образом, наибольшее внимание разработчики уделили движку игры и атмосфере. Некоторые демоны лепились из пластилина, фотографировались и позже переносились в игру после обработки в графической программе, а отдельные виды оружия (бензопила) или руки, которые видны в кадре, принадлежали самим разработчикам или их друзьям.

 

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

Вычисления в Doom проводились с частотой 35 раз в секунду. Чтоб сэкономить такты процессора, управление монстрами было оптимизировано: если из одного сектора не была видна ни одна точка другого, в соответствующей ячейке матрицы ставилась единица, а в противном случае - 0. Таким образом, если в ячейке, связывающей сектор протагониста и сектор демона стоит 0, проводится проверка, видит ли демон игрока. Если же стоит единица, игра считает, что игрок в безопасности.

 

Для ускорения построения изображения использовалось BSP-дерево - метод рекурсивного разбиения евклидова пространства в выпуклые множества. Движок игры поочередно отрисовывал стены от ближних к дальним, и только когда этот процесс был окончен, отрисовывал полы и потолки. Джон Кармак оптимизировал алгоритм: он учел, что для набора полигонов дерево имеет невырожденную структуру, если для каждого полигона из набора все остальные расположены с передней или задней стороны. Также при помощи BSP-дерева в игре обнаруживались столкновения с поверхностями.

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

 

 

 

Обитель оптимизации

При упоминании Resident Evil 2, скорее всего, сегодня вспомнят ремейк 2019 года, а не классику первой PlayStation. Для игры был модернизирован движок от предыдущей части, выпущенной в 1996 году. Как и Doom, она была написана на C с некоторыми дополнениями на языке ассемблера. Большинство игр для PS1 писались на этом языке, хотя некоторые крупные проекты, в том числе культовая Crash Bandicoot, частично использовали Lisp.

 

Игра 1998 года использовала все возможности CD-диска и содержала большое количество видеороликов и звуковых эффектов. Все эти особенности были сохранены при портировании игры на малоизвестную в России Nintendo 64 - консоль, в качестве носителей для которой использовались картриджи объемом до 64 Мб. Но какой ценой?

Чтобы игра не теряла плавность при появлении на экране большого количества зомби, в версии для консоли Nintendo разработчики добавили смену разрешения с 640 на 480 до 320 на 240 в моментах, когда от устройства требовалась высокая производительность.

 

Перенос видеороликов и вовсе стал наиболее тяжелой задачей. Частота кадров была понижена с 30 до 15 кадров в секунду. Затем к видеороликам применили интерполяцию - кадры становились более размытыми, но их последовательность выглядела достаточно плавной. Также было понижено разрешение видеоряда. А чтобы еще больше сжать видео и сэкономить место на картридже, разработчики в несколько раз уменьшили глубину цветов, сохранив при этом яркость.

Для переноса музыки и озвученных диалогов на Nintendo 64 была разработана система MusyX. Она позволяла создателям порта использовать собственные семплы, а не выбирать из ограниченных библиотек N64. Качество музыки удалось сделать даже выше, чем в версии для PlayStation, ведь MusyX поддерживала Dolby Surround. К сожалению, то же самое нельзя сказать о диалогах. Они сжимались и воспроизводились с более низкой скоростью, что делало их более приглушенными.

гейминг, компьютерные игры, разработка, NES , Super Mario Bros. Doom, GTA, Minecraft, видеоигры, C++
Кадр из GTA: Vice City

Почему в GTA пропадают люди

Все классические GTA, будем называть такими GTA 3, GTA: Vice City и GTA: San Andreas, использовали один и тот же движок - RenderWare. Поскольку все три игры выходили сперва для консолей, в первую очередь для PlayStation 2, разработчикам приходилось уделять значительное внимание оптимизации игр под ее аппаратные ограничения.

 

Renderware, который давал разработчикам готовое решение для создания графики под PS2 и широкие возможности для своей доработки, был написан на С++. Это язык, который до сих пор занимает центральное место в мире разработки видеоигр, он позволяет очень тонко оптимизировать игру под конкретное железо, будь это ПК или консоль. На RenderWare создавались очень разноплановые игры: от шутеров (Call of Duty: Finest Hour) до гоночных симуляторов (Need for Speed: Most Wanted) и файтингов (Mortal Kombat: Armageddon).

Движок совершенствовался от игры к игре, поэтому Vice City оказалась более производительной, чем GTA III. Разработчики добились этого оптимизацией просчитывания окружения. Если в третьей части игра просчитывает все объекты вокруг игрока, то в Vice City внимание уделяется только тем объектам, которые игрок видит на экране в данный момент. Несмотря на оптимизацию, требования к железу все равно выросли - все-таки качество текстур в Vice City было заметно лучше.

 

RenderWare умел существенно облегчать консолям и ПК обработку больших локаций. При приближении игрока к объектам их текстуры заменялись на более «тяжелые» детализированные. Ну а чтобы игрок не чувствовал себя одиноким в просторных локациях, разработчики добавили в GTA прохожих, которые играли роль декораций и служили источником легких денег.

При этом, в отличие от, например, S.T.A.L.K.E.R, где жизнь NPC протекала независимо от положения и действий игрока благодаря системе A-Life, в GTA мир живет только вокруг него. Даже в GTA V можно заметить, как пешеходы и автомобили просто исчезают на ровном месте. За это отвечает выбранная в настройках дальность прорисовки: чем она выше, тем больше объектов будут отображаться перед игроком на разных расстояниях. При этом нагрузка на ПК вырастет.

В упомянутом S.T.A.L.K.E.R игрок мог наткнуться на перестрелку враждующих группировок или сражение монстров. Эти события произошли бы и без участия игрока, даже находись он в противоположной точке карты. Впоследствии он мог найти трупы, оставшиеся на поле боя.

 

Компьютер в игре в компьютере

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

Одной из многих особенностей Minecraft является процедурно генерируемый мир. Это не новая технология, более того, она не была новой даже на этапе задумки игры. Проекты, создающие новый мир при каждом запуске появились уже в 1980-х. К числу известных примеров относятся Elite, The Legend of Zelda: A Link to the Past, Diablo II.

 

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

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

Но больше всего поражает даже не это, а что игроки в Minecraft строят в режиме песочницы. В мире этой игры был создан процессор с оперативной памятью 256 байт, названный DjCPU8. В этом процессоре реализован даже ассемблер: стоит увеличить оперативную память, и на нем можно будет написать Super Mario Bros.

 

У компьютера 8-битная разрядность, но есть проекты и с 16 битами. Реализовано это благодаря механике «редстоуна», особого минерала, добываемого в игровом мире под землей. Блоки редстоуна образуют цепи, передающие энергию от одного к другому, благодаря чему у пользователей есть возможность строить логические схемы. Таким образом в игре был создан жесткий диск с памятью 1Кб и эмулятор древней приставки Atari 2600, позволяющий запускать игры внутри игры.

 

 

А игра выйдет? А ты точно этого хочешь?

Cyberpunk 2077. Игра, с которой до нового года управились все, кроме ее создателей. Она была создана на модернизированной версии собственного движка студии CD Project RED - REDengine 4, написанного на C++. Не будем касаться ужасной графики, с которой столкнулись игроки на PlayStation 4. Это - следствие плохой оптимизации игры под предыдущее поколение консолей. 

гейминг, компьютерные игры, разработка, NES , Super Mario Bros. Doom, GTA, Minecraft, видеоигры, C++
Кадр из Minecraft

Открытый мир Cyberpunk 2077 не может целиком храниться в памяти компьютера. На это не хватит ресурсов даже самых современных устройств. Поэтому в картах уровней обычно расположены незаметные швы. Кстати, на консолях нового поколения их будет гораздо меньше: создатели PS5, равно как их конкуренты, акцентировали много внимания на ускоренной подгрузке игровых данных в оперативную память. Когда игрок переходит из одной зоны в другую, игра генерирует новые объекты и обрабатывает их взаимодействия. В Cyberpunk 2077 из-за неверно заданных точек появления автомобилей они создаются игрой просто в небе, а затем прописанная в игре физика «опускает» их на землю.

 

Вскоре после релиза игроки обнаружили, что колясочники, если их атаковать, убегают от протагониста на своих двоих. Объясняется это тем, что в скриптах, отвечающих за взаимодействие игрока с окружающим миром, допущены серьезные ошибки. Разработчики прописали людям с ограниченными возможностями то же поведение, что и остальным неигровым персонажам. Поэтому при столкновении с угрозой, на которую те не могут ответить, маломобильные, казалось бы, NPC просто бегут.

 

Скрипты в играх - участки кода, которые выполняются в ответ на определенные действия игрока. Кроме оптимизации и управления основными геймплейными элементами, скрипты часто отвечают за удержание игрока в сюжетном русле. Например, создают препятствия на пути, чтобы при движении по уровню игрок обнаружил и использовал конкретный маршрут. Скрипты часто содержат ошибки, и порой это помогает спидранерам проходить игру за считанные минуты. Скажем, рекорд по прохождению GTA: Vice City составляет 8 минут 28 секунд.

 

Парадоксально, но спустя много лет жизнь открытого мира в Cyberpunk 2077 проработана немногим лучше, чем в GTA. Огромное множество прохожих, как оказалось, просто ходят по карте кругами, заходя в тупик с помойкой, разворачиваясь и проходя тот же маршрут заново. Полицейские не будут реагировать, если вы начнете избивать прохожих. В Cyberpunk 2077 у автомобилей не простреливаются шины. Но возможно, в мрачном 2077 году все именно так и будет.

Источник

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.

Новости о науке, технике, вооружении и технологиях.

Подпишитесь и будете получать свежий дайджест лучших статей за неделю!