26 July 2019

Почему на Nintendo Switch так много некачественно портированных игр?

На написание этого текста меня сподвигла история с выпуском игры Bloodstained: Ritual of the Night, проекта с уникальной судьбой. Четыре года назад на Kickstarter'е он побил все рекорды по сборам и получил впечатляющую сумму в несколько миллионов долларов, которая, тем не менее, не позволила быстро и безболезненно пройти фазу разработки и проект, как это часто бывает в индустрии, превратился в долгострой с довольно таки тернистой историей. А с учетом качества продукта, который в итоге получили владельцы консоли от Nintendo, история эта еще очень далека от своего счастливого завершения.

В визуальном плане Bloodstained представляет собой довольно таки заурядный 2,5D платформер, не отличающийся ни какой-то супер проработкой игровых моделей и задников, ни крутыми текстурами, ни какими-то сложными спецэффектами. Даже если бы игра с таким уровнем графики вышла лет десять назад, вряд ли кто-то был бы сильно впечатлен тем, что она показывает на экране.


В случае версии игры для Switch, проблема довольно таки блеклой графики усугубляется тем, что до приставки Nintendo разработчики не смогли донести ее даже на таком уровне. И помимо низкого разрешения с очень мыльный и маловразумительной картинкой, аркадная по своей сути игра работает с не комфортным фреймрейтом в 30 fps. И это я уж не говорю о ряде проблем, лежащих вне графики, вроде ужасного input lag'а или тормознутости переходов из экрана в экран.
Очевидно, что людей, которые из своего кармана профинансировали проект несколько лет назад и конкретно устали ждать его выхода, такое положение вещей, мягко говоря, несколько расстроило.

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

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

К примеру, можно взять картинку того же Bloodstained на Switch и сравнить ее, ну, например, со Super Smash Bros Ultimate. Да, Smash Bros игра несколько другого жанра, это файтинг, но по факту -- тот же самый 2,5D платформер, в котором есть довольно таки большие по площади уровни с очень сложными, богатыми на детали 3D задниками. По которым может скакать аж восемь игроков одновременно, причем на экране постоянно что-то летит, кишит, рушится и взрывается. И работает все это в высоком разрешении с очень стабильными 60 fps. И в целом не выглядит прямо так архаично на фоне практически любого современного файтинга.


Или вот взять картинг гонки, которые были выпущены в этом году -- Sonic Team Racing и Crash Team Racing Nitro-Fueled. В сравнении с картинкой, которую выдает Mario Kart 8 Deluxe, графика в этих играх на Switch навевает тоску и уныние, а если сюда еще включить проблемы типа времени загрузки уровней в CTR...


***

Короче, ситуация с плохой графикой, которую мы наблюдаем чуть не в каждой второй портированной на Switch игре, не является следствием того, что разработчики достигли предела и эта консоль принципиально не может показывать картинку лучше.
А истинных причин такого положения вещей, на самом деле, две.
Первое -- Switch заметно слабее систем, под которые сегодня разрабатываются серьезные игры (ПК, XBox One и PS4). Второе -- программисты имеют склонность городить поверх существующего железа такое количество абстракций, пока вся эта конструкция не начнет приносить проблемы и тормозить. Невозможно выпустить настолько мощное железо, чтобы для него не нашелся совершенно криворукий программист, который поставит его на колени, решая какую-то совершенно примитивную задачу.

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

Когда я пишу про "абстракции" в контексте программировании, я имею ввиду всевозможные технологии и подходы, которые, по задумке их изобретателей, должны упростить решение какой-либо типовой задачи. Упростить обычно не бесплатно, а ценой отъедания части КПД вашей программы.
То и есть, если говорить грубо, из года в год, с ростом возможностей железа, появляются новые возможности решать одну и ту же задачу все более простыми способами, однако, ценой потребления все больших аппаратных ресурсов.

Постараюсь проиллюстрировать суть такого рода "абстракций" на понятных примерах.

Пожалуй, самый популярный на сегодня движок для разработки игр -- Unity. Основной язык, который он предоставляет программистам для написания игровой логики -- C#. Язык прекрасный, если бы не одно "но" -- в нем используется абстракция под названием "сборка мусора", которая освобождает программистов от ручного управления памятью. Это классная абстракция, но проблема заключается в том, что если "мусор" (т.е. память, которая больше не используется) не "убирается" программистом по мере выполнения программы, то он накапливается и, рано или поздно, его приходиться убирать автоматически (потому что иначе программа не сможет дальше работать из-за нехватки свободной памяти). Так вот, момент такой вот автоматической "генеральной уборки" наступает совершенно внезапно и может вызвать остановку игры, например, на несколько сотен миллисекунд. Т.е., с одной стороны, вроде как хотели облегчить жизнь разработчика, предоставив ему возможность не париться по поводу управления памятью, а по факту -- суют ему под нос длинные-длинные инструкции о том, как же правильно использовать память, чтобы сборка мусора не приводила к лагам посреди игрового процесса.
И все равно это не помогает.


Есть такая классная игра -- Horizon Chase Turbo, аркадные гонки в духе игр этого жанра 80-х годов. Судя по качеству продукта, делали ее не самые криворукие люди на свете. Но они выбрали Unity в качестве движка для разработки. В итоге, игра, которая по задумке авторов должна работать со скоростью 60 кадров в секунду, практически при каждом заезде нарывается на особо неудачный цикл сборки мусора и все действие на экране замирает чуть ли не треть секунды. Выглядит это, с точки зрения оценки игрового опыта, мягко говоря, не очень красиво. Релиз игры для Switch состоялся довольно таки давно, под нее было выпущено с десяток патчей, но проблему с фризами разработчики так не смогли побороть...

Другой хороший пример из области "абстракций" можно проиллюстрировать недавно вышедшей игрой Blazing Chrome. Тут разработчики вдохновлялись играми из серии Contra для 16-ти битных консолей. Поэтому у нас тут очередная "пиксельная" игра, которая отрисовывает картинку в разрешении 427x240 пикселей (это примерно 5% от Full HD) и потом растягивает ее на весь экран. Итоговый результат и игровой опыт сильно смахивает на те игры, в которые люди играли на консолях в первой половине 90-х.

Ребята из Digital Foundry посвятили целый выпуск этой игре и подняли, в том числе, тему того, как игра работает на самой слабой платформе -- на Switch. И тут выяснился крайне занятный факт: при стрельбе из оружия игра рисует стрелянные гильзы (такие ма-а-аленькие спрайты площадью с пару десятков пикселей). И в версии для Switch их пришлось убрать.
Из соображений производительности.
Потому что для них, оказывается дается расчет коллизий -- а это у нас теперь считается архисложной задачей!
Поэтому на Playstation 4 они есть. А на Switch их нет.


Еще раз. Для игры, которая выглядит как игра для приставок тридцатилетней давности и отрисовывается в разрешении 240p, для того, чтобы нарисовать на экране десяток мелких спрайтов, обязательно нужна консоль c производительностью как у PS4 (т.е. консоль, на которой можно играть не только в пиксельное инди гавно, но и в что-то типа Red Dead Redemption 2).
Про то, что на Switch игра была выпущена как минимум с парочкой мест, где наблюдаются очень серьезные проблемы с производительностью, я вообще молчу.
Создавалась игра с помощью "абстракции" под названием GameMaker Studio 2 -- советую выбирать именно ее, если перед вами будет стоять задача поставить на колени топовый ПК какой-нить игрушкой в духе 16-ти битных консолей...
А вообще, в следующий раз, когда будете размышлять на тему, пробито или нет дно в геймдеве, обязательно вспомните историю про стрелянные гильзы в Blazing Chrome.

Кстати, жалуясь на то, как плохо сегодня работают некоторые игры, нельзя не вспомнить еще и то, сколько места они занимают.
С учетом того, что моя консоль содержит в себе таблетку от жадности, у меня в принципе есть возможность забить ее вообще всеми когда-либо выпущенными играми и единственным реально сдерживающим фактором здесь выступает только количество свободного места на microSD карте. Так вот, в свете этого, практически каждый новый релиз я оцениваю с точки зрения соотношения качества игры к ее размеру. Если есть две хорошие игры, но одна весит 200 метров, а другая -- три гига, то понятно какую именно я себе поставлю...
Я обзавелся системной привычкой обращать внимание на размеры игр, и могу сказать, что тут все тоже очень и очень запущенно. Какая-то совершенно дикая инди поделка, с графикой уровня NES, может легко тянуть на полтора-два гига -- такое впечатление, что разработчики специально набивают свои релизы мусорными файлами. Для солидности.


И на фоне этого безобразия, практически всегда бросается в глаза то, как оптимизирует размеры своих игр Nintendo. Горячо любимая мною New Super Mario Bros U весит жалких два гигабайта -- совершенно типичная для N история, когда количество контента, которое умудрились запихнуть в столь скромные габариты, просто не может не вызвать искреннего восхищения. При этом надо понимать, что маленький размер практически всегда означает еще и быстрые загрузки в игре. А еще -- возможность сэкономить несколько миллионов долларов при выпуске игры на картридже.


***

На самом деле, если уж и плакаться на тему того, на что нынче программисты тратят транзисторы, которые им продолжает из года в год дарить закон Мура, то брать надо точно не геймдев. Потому что в игростроении все-таки есть какие-то более-менее понятные критерии оценки качества. И требования к производительности. Если, к примеру, у тебя аркадная по своей механике игра и хочется 60 fps, довольно легко понять, добился ты этого или нет.

Совсем другое дело -- десктопные приложения.
Сегодня тут царит мода на весьма недешевую "абстракцию" под названием Electron, это когда программисты пишут программу не под операционную систему, а под браузер, который запускается в этой ОС. Писать строки возмущения об этой совершенно нездоровой практике, результаты которой жрут просто как не в себя и процессор, и оперативную память, я могу бесконечно. Мерцание курсора в текстовом редакторе, которое "кушает" 13% CPU. Или вот разработчики Slack недавно хвалились тем, что они понимают желание пользователей использовать на своем компьютере не только их программу, но и какие-то другие, поэтому они усиленно поработали над оптимизацией потребления памяти. И теперь окно с единственным открытым сиротливым чатом (аж с целыми двумя картинками в нем!) жрет не два гига, а всего лишь 700 метров!


Мне, как человеку, который помнит, что Doom работал на машине с 4-мя мегабайтами памяти, и помнит, как и на каком железе работала типичная программа для обмена сообщениями в Сети 15 лет назад, подобные рассказы об "оптимизации" вызывают только ярость.
Да и, на самом деле, не обязательно предаваться историям о стародавних временах -- даже сегодня сохранились, к сожалению, в крайне небольших количествах, правильно написанные программы, взаимодействие с которыми, особенно после "модно" написанных программ, вызывает чертовски приятные ощущения. Посмотрите, к примеру, как классно сделан клиент "Телеграмма" для десктопа!

Наверное, некоторым со стороны может показаться, что все вышенаписанное, это типичное брюзжание старого пердуна, который принципиально против любого движения вперед, против прогресса и новых технологий, и который только и живет приступами ностальгии о тех славных деньках, когда тридцать лет назад он кодил на ассемблере...
Все это не так. Невозможно хвалить или ругать те или иные технологии ("абстракции") вне контекста их применения. Т.е. важно не только, что программист применяет, но и каким образом и для решения какой конкретной задачи. И всякие новые "абстракции" в сравнении со старыми это совсем не обязательно история о том, чтобы "сделать быстро, но плохо" против истории "сделать хорошо, но медленно". В первую очередь, это история о квалификации. Грамотный специалист выберет оптимальную технологию исходя из входных данных по задаче, которую ему предстоит решить. Дилетант -- схватит первое, что попадется под руку. Или поведется на хайп и маркетинг, не имея при такого рода выборе никакого личного опыта (ну или хотя бы компетенции, чтобы объективно оценить опыт чужой). Или вообще будет писать на том, на чем умеет -- когда у тебя в руках молоток, все вокруг начинает казаться тебе гвоздями.
Ильич писал, что скоро кухарки будут управлять государством. Взрывной рост IT индустрии (обусловленный, не в последнюю очередь, взрывным ростом кривой имени Мура) привел к постоянному кадровому голоду в этой отрасли. Нет достаточного количества времени, чтобы привести в индустрию специалистов, имеющий должный уровень образования и квалификации. Поэтому избытки мощности, которые нам регулярно подбрасывает рост числа транзисторов в микросхемах, направляются на создание технологий, позволяющих использовать их людьми с все более низкой квалификацией.
Просто посмотрев по сторонам вокруг себя, мы видим, что работает это не очень хорошо, а развитие IT это, не в последнюю очередь, история о все возрастающей некомпетености задействованных в ней людей. И проблемах, к которым эта некомпетентность приводит.

Именно поэтому Bloodstained на Switch, вместо нормальной картинки, показывает ужасное мыло с низкой частотой кадров.
Именно поэтому "современный" текстовый редактор на машине без SSD диска запускается десять секунд и слету отжирает 400 метров памяти.
Поэтому и Боинги падают. Ибо "компания не нуждается в сеньорах, так как наши продукты уже достаточно зрелые".

Поэтому мы и сидим в нашей постиндустриальной реальности, втянув в плечи голову, в ожидании прилета очередного дятла...



Внеклассное чтение:

Призрак Windows Vista

Мое разочарование в софте

IT'S BEHIND YOU (замечательная книга о том, как в 1988 году чувак практически в одиночку портировал игру R-Type с аркадного автомата на ZX-Spectrum)





No comments:

Post a Comment