Как одна неожиданная игра навсегда изменила Steam Deck
Steam Deck добилась огромного успеха.
Продав несколько миллионов единиц, это устройство изменило наше представление об играх на ПК, породило множество клонов и обеспечило будущее портативным игровым устройствам. При поддержке многомиллиардной корпорации это может не стать таким уж сюрпризом.
Но за тем, что заставило Steam Deck работать, стоит нерассказанная история — ядро инженерной страсти, которое открыло загадку того, как заставить Linux-игры работать в таком масштабе. Большая часть этого началась с одного независимого разработчика — человека и его любви к игре под названием Nier: Automata — и сообщества, готового вывести игры для Linux на новый уровень.
Скромное происхождение
Во время осенней распродажи Steam в прошлом году я решил приобрести Nier: Automata. Эта революционная приключенческая игра 2017 года входит в список лучших игр всех времен по версии Digital Trends, и хотя я немного играл в нее на PlayStation 4, я никогда не покупал ее на ПК. Как я обычно делаю при покупке игры в Steam, я поискал некоторую информацию о том, как она работает в Steam Deck, и наткнулся на эту ветку на Reddit .
Игра работала отлично, и это я понял, медленно пробираясь по 30-минутным сеансам несколько раз в неделю, но именно первый комментарий в этой теме вызвал у меня навязчивую идею: « Nier: Automata — 80 лет. % причин, по которым игры в Linux так же хороши, как сейчас, возможно, 90%. Посмотрите историю DXVK. Короче говоря, любовь одного человека к 2B — это причина, по которой сегодня у нас есть любой из этих невероятных слоев перевода DirectX».
Там есть что раскрыть для непосвященных, но когда я наткнулся на этот комментарий, меня зацепило. Потому что комментатор был прав: за последние несколько лет игры в Linux претерпели радикальную трансформацию. В прошлом DirectX был основным препятствием, которое нужно было преодолеть. Подавляющее большинство компьютерных игр используют интерфейс программирования приложений DirectX (API) Microsoft, который, как вы могли догадаться, работает только в Windows. Игры отправляют инструкции API, который подготавливает работу вашего оборудования. Учитывая, что большинство игр были разработаны для работы с DirectX, это означало, что в них нельзя было играть на Linux — по крайней мере, на родном языке.
В течение многих лет основным обходным решением был уровень совместимости, известный как Wine, но поддерживаемые игры по-прежнему оставались очень неудачными. Это связано с тем, как Wine в то время работал для игр. Он будет принимать инструкции DirectX и транслировать их в API OpenGL. Это работало для старых или менее требовательных игр, но в современных играх, использующих более сложные инструкции API, производительность сильно снижалась.
На самом деле, только в 2016 году, когда появился кроссплатформенный API под названием Vulkan, ситуация в играх под Linux начала меняться. Созданный тем же консорциумом, который создал OpenGL, Vulkan был разработан, чтобы дать программистам гораздо больший контроль над графическим процессором — аналогично DirectX 12. Поскольку игры становились все более сложными, низкоуровневый API, такой как Vulkan, стал ключом к достижению равенства производительности, когда перевод инструкций DirectX.
Valve годами поддерживала усилия Linux, но Vulkan стал поворотным моментом. Примерно в то время, когда был выпущен Vulkan, Valve начала работать над собственными усилиями по поддержке игр для Linux под названием Proton — уровня совместимости, интегрированного непосредственно в Steam. И вот так — вы можете провести прямую линию от Вулкана и Протона до Steam Deck. «Vulkan определенно является важной частью головоломки», — объяснил мне по электронной почте один из разработчиков Valve, Пьер-Лу Гриффе.
Но Valve сделала это не в одиночку. Фактически, основываясь на собственной приверженности компании философии открытого исходного кода, Proton объединяет несколько уровней перевода с открытым исходным кодом в единый пакет. Все это построено на базе Wine, но для игр используется VKD3D для DirectX 12 и Zink для OpenGL. Однако есть ключевая технология, которая взяла на себя большую часть игр.
Он начался с DirectX 11, но теперь включает в себя даже DirectX 10 и DirectX 9. Название проекта — DXVK , которое самоописывается как «слой перевода на основе Vulkan для Direct3D 9/10/11, который позволяет запускать 3D-приложения». в Linux с использованием Wine».
С момента его создания в него внесли бесчисленное количество участников, но начиналось оно с очень малого. Немецкий разработчик по имени Филип Реболе был вдохновителем, и, по его словам, все началось как проект, который был его страстью.
Как Ниер изменил всё
«Я начал проект по-настоящему примерно в то время, когда окончил университет и начал искать работу, но поначалу он не должен был стать чем-то большим, чем просто хобби-проектом», — сказал мне Ребол. «Тем не менее, первоначальная разработка шла быстро, и я поделился своим прогрессом с небольшим сообществом Discord, которое, в свою очередь, переслало Phoronix некоторые из наиболее важных вех».
Phoronix, если вы незнакомы, — это веб-сайт, посвященный новостям и обзорам оборудования Linux. Запомни это имя.
Согласно интервью GamingOnLinux в 2018 году, Ребол «всегда интересовался графическим программированием», но в основном занимался хобби-проектами, которые, по собственным словам Ребола, «так и не превратились во что-то полезное». DXVK возник из-за некоторого разочарования в реальности игр на Linux, а также потому, что Ребоул «действительно хотел заставить работать одну конкретную игру». Этой игрой была Nier: Automata.
Ребол назвал себя «немного фанатом Nier» на форумах GamingOnLinux в начале 2018 года, через несколько дней после первого выпуска DXVK. Однако Реболе интересовала не только эта игра. В разговоре с разработчиком стало ясно, что Nier: Automata представляет собой уникальную задачу.
«Nier — это игра, которая заставила меня изучить — и отладить — API D3D11, в первую очередь потому, что он даже не работал в Windows на моем RX 480 из-за ошибки драйвера AMD», — сказал мне Ребоул.
Nier: Automata — довольно простая игра для DirectX 11, позволяющая Rebohle без особых хлопот запустить игру в Linux. Порт ПК также имел серьезные проблемы в Windows, не последней из которых была ошибка драйвера AMD, упомянутая Ребоулом. Но, прежде всего, «это просто чертовски хорошая игра», как сказал Ребоул.
«Когда он в конце концов начал работать в Linux с использованием перевода D3D на основе OpenGL от Wine, он работал медленно и не отображался должным образом, поэтому я провел там более серьезную отладку и многому научился в процессе. Раньше я экспериментировал с Vulkan, и идея DXVK родилась во время этого процесса», — сказал Ребол.
Разработка началась в конце 2017 года, но к январю 2018 года Ребол и группа участников уже запустили Nier: Automata на Linux. Фороникс поделился этой новостью , и вскоре после этого Ребол заключил контракт с Valve на постоянную работу над проектами с открытым исходным кодом по переводу API Windows в Vulkan. «Прошло немного времени после публикации этой статьи, и кто-то из Valve связался с нами и спросил, хочу ли я работать над этим полный рабочий день в качестве подрядчика», — сказал мне Ребол.
Разработчик до сих пор работает с Valve, в основном внося свой вклад в уровень трансляции DirectX 12, известный как VKD3D-Proton.
Ребол запустил DXVK и остается ведущим разработчиком, но важно отметить и других разработчиков, внесших свой вклад в проект. В настоящее время проект GitHub насчитывает 137 участников, и справедливо сказать, что проект не был бы тем, чем он является сегодня, без усилий сообщества, вложенных в него. Тем не менее, она, возможно, так и не началась бы, если бы не Nier: Automata.
«Честно говоря, трудно сказать», как сказал мне Ребол.
Что делает Steam Deck особенным
"Ебена мать. Извините, пожалуйста, за выражения, но, честно говоря, меня сейчас физически трясёт. Я не совсем знаю, как это пережить».
Таков был ответ Лиама Доу, главного редактора GamingOnLinux, написавшего в новостном посте об оригинальном выпуске Proton еще в 2018 году. Прочитав более 500 комментариев к посту, вы можете почувствовать нарастающее волнение и нервозность. приходит осознание: это нишевое сообщество собиралось стать мейнстримом.
Всего четыре года спустя была запущена Steam Deck, навсегда сделавшая Linux-игры популярными.
Хотя Valve могла бы создать Steam Deck без Proton, трудно представить, что она имела бы успех. Откуда мне знать? Что ж, одним из доказательств является провал Steam Machines. В 2015 году Valve выпустила Steam Machines, которые были созданы как доступные игровые ПК, похожие на консоли, работающие на собственной SteamOS на базе Linux от Valve. Через полгода после выпуска Valve продала менее полумиллиона Steam Machines, причем некоторые назвали устройство «мертвым в воде».
Есть много возможных объяснений неудачи, но, по словам Valve, одной из проблем была попытка внедрить игры на Linux до того, как они были действительно готовы. В интервью IGN дизайнер Valve Скотт Далтон сказал: «В Steam Machine всегда была классическая проблема курицы и яйца. Это привело нас по пути Протона, где теперь действительно работают все эти игры».
Разрабатывая Steam Deck, Valve не могла сидеть сложа руки и надеяться, что начнут появляться новые порты для Linux, и не могла требовать, чтобы разработчики создавали игры специально для ее платформы. Valve увидела, как это может потерпеть неудачу, на своем опыте со Steam Machines. Для поддержки Steam Deck требовалось большое количество игр, и единственным разумным способом добиться этого было создание надежного уровня совместимости с Linux.
Понятно, что Proton нужно было поработать и над тем, чтобы Steam Deck был успешным. Первоначально Valve выпустила Proton в августе 2018 года, за три с половиной года до выхода Steam Deck. Сейчас вы можете играть в тысячи игр через Proton, но в то время Valve перечисляла лишь небольшое количество поддерживаемых игр, включая Doom, Final Fantasy VI, Star Wars: Battlefront 2 и, конечно же, Nier: Automata.
С тех пор тысячи разработчиков внесли свой вклад либо в Proton, либо в одну из различных основ, на которых он построен, но нельзя отрицать, что DXVK является важной частью Proton, который мы имеем сегодня. Он используется для игр DirectX 11, DirectX 10 и DirectX 9, и даже несмотря на то, что DirectX 12 является последней версией, эти три API по-прежнему составляют львиную долю игр, которые вы найдете в Steam.
Steam Deck — не единственное оборудование, на которое повлиял DXVK. Intel использует DXVK для игр DirectX 9 на своих графических процессорах Arc, переводя устаревшие инструкции DirectX 9 в более современный API Vulkan.
Неожиданный вклад Ребоула в DXVK стал постоянным атрибутом мира разработки игр — прекрасная картина силы разработки с открытым исходным кодом.
У Linux-игр безопасное будущее
Какой бы захватывающей ни была история происхождения DXVK, это не значит, что Steam Deck никогда бы не смог реализоваться сам по себе. Гриффайс из Valve рассказал мне, что в разработке были и другие проекты, направленные на то, чтобы заставить DirectX 11 работать, и если бы DXVK не появился, «вместо этого был бы отдан приоритет одному из этих других проектов DirectX 11 вместо Vulkan».
Очевидно, что у Valve уже была работа над Proton до DXVK, и, вероятно, у нее были планы на Steam Deck. Но сработало бы это? Будет ли поддержка такой же хорошей, как сегодня? Сколько времени это заняло бы? Какое влияние это оказало бы на Steam Deck в целом? Конечно, существует альтернативная реальность, где DXVK никогда не является частью Proton, но это не то, что произошло. DXVK превратился в основополагающий компонент Proton, поэтому Steam Deck и Nier: Automata сыграли в этом ключевую роль.
«DXVK очень важен для Proton», как говорит Гриффайс, и у Valve «нет планов отказываться от DXVK ради Proton».
В результате сегодня игры для Linux находятся в совершенно ином положении, чем в начале 2018 года. Будущее никогда не казалось таким ярким. Все началось с любви одного разработчика к Nier: Automata, но с тех пор усилия переросли в нечто гораздо большее. В конце концов, именно это делает разработку с открытым исходным кодом такой особенной. Никогда не знаешь, чьи отпечатки пальцев окажутся в конечном продукте и помогут сформировать будущее технологий.