Об эмуляторах PS5 для ПК, на примере Astrobot

На ПК все работает
На ПК все работает

В последнее время часто всплывает тема эмуляторов PS5 и рекомпиляторов. Я решил попробовать на собственном опыте.

Немного матчасти

В чем разница между эмулятором и рекомпилятором?

Эмулятор воспроизводит все программное окружение консоли, полностью имитируя работу ее операционной системы и всех ее API (не обязательно 100%, но как минимум нужных для работы). Эмулятор это всегда отдельная программа, которая сама загружает и запускает на целевом хосте немодицифированную оригинальную игру с консоли. Прослойка короче, точнее целый набор прослоек + UI.

Рекомпилятор берет оригинальный бинарник игры и преобразует его в новый бинарник, совместимый с операционной системой хоста (в нашем случае это Windows) и который можно запускать напрямую, без стороннего софта. И тут есть важный момент: по-сути рекомпилятор "вшивает" все функции эмулятора + саму игру в один исполняемый файл, из-за чего создается иллюзия, будто бы рекомпиляция != эмуляции. Вовсе нет, разница только в том, что эмулятор существует отдельно от игры и нужно сначала запускать его, а потом игру. А при рекомпиляции вы получаете готовый бинарник, в котором есть и код игры, и код для эмуляции системных функции и api консоли.

Картинка чисто что бы разбавить текст
Картинка чисто что бы разбавить текст

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

Однако это не всё. Вторая часть проблемы, это общая память. В PS5 процессор и GPU используют общую быструю память, что сильно упрощает жизнь разработчикам и позволяет делать разные хитрые оптимизационные трюки, которые на обычном ПК невозможны. И вот это уже неизбежно приходится эмулировать. Эмулятор или рекомпилятор - обоим нужно осуществлять точную эмуляцию поведения памяти на консоли. В случае с обычным ПК это в определенных ситуациях может приводить к множеству дополнительных операций чтения/записи/копирования данных CPU <-> GPU, где бутылочным горлышком может стать шина PCI-E (она значительно медленней общей памяти на консолях) или сам процессор хоста. Но здесь сразу следует заметить, что это лишь в общем, а на практике в 99% случаев не нужно постоянно перемещать данные туда-сюда между CPU и GPU, и все ок.

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

GPU и его API

Ну и основная проблема, это конечно разница в работе с GPU на консолях и на ПК. Консоли используют более низкоуровневые API, позволяющие разработчикам иметь больше контроля на процессом и допускающие значительно более хитрые оптимизации, чем можно было бы реализовать на базе Vulkan или DirectX.

Поэтому перед разработчиками любых эмуляторов стоит (вернее стояла, поскольку задача уже почти на 100% решена) сложная задача - 100% точно эмулировать поведение нескольких разных низкоуровневых API консоли, используя только более высокоуровневое Vulkan. Изначально, когда проекты эмуляторов только появлялись, это выглядело как безумие и почти не решаемая задача. Но как мы видим, оказалось что ее можно решить. В том числе благодаря ИИ.

К счастью, язык шейдеров PSSL достаточно похож на HLSL, поэтому через некоторое время удалось решить задачу рекомпиляции шейдеров, путем преобразования их в промежутчный формат SPIR-V, а потом компиляцию уже под Vulkan. Но при этом сразу же возникает типичная для ПК проблема - скомпилированные шейдеры привязаны к драйверу и его обновление инвалидирует кэш шейдеров. Ну и кроме того, в отличии от консолей, любой эмулятор рекомпилирует шейдеры в рантайме, что неизбежно порождает периодические фризы, особенно при первом запуске.

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

Тестировать буду на не самом топовом, но и не нищем ПК: Ryzen 7900X3D, 64Gb DDR5 6400 CL32, RTX 4070Ti, Windows 11.

KytyPS5

KytyPS5, это классический эмулятор.

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

Скачиваете архив с эмулятором, берете где-то игру, запускаете эмулятор и в настройках указываете папку с PS5 играми.

Об эмуляторах PS5 для ПК, на примере Astrobot

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

Об эмуляторах PS5 для ПК, на примере Astrobot

Перед запуском игры стоит подключить геймпад и желательно с гироскопом. У меня нет оригинальных Dualsense, поэтому я взял давно валявшийся какой-то китайский EasySMX X10, но у которого внезапно есть этот самый гироскоп.

Оно работает!
Оно работает!

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

Об эмуляторах PS5 для ПК, на примере Astrobot

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

В 2К разрешении на моем железе Астробот выдает от 30 до 60 FPS, но в среднем во время игры это 38-45 FPS. Работает стабильно, без крашей или каких-либо визуальных артефактов.

Работа гироскопа:

Китайский noname-геймпад

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

Астробот работает стабильно, за несколько часов игры не было ни одного краша.

AnyPS5

В отличии от KytyPS5, AnyPS5 является рекомпилятором, ну или точнее релинкером. Потому что на самом деле код не перекомпилируется, просто заменяются вызовы системных библиотек PS5 на их аналоги + изменяется формат бинарника с ELF на PE, что бы винда могла его запустить.

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

У них есть так называемый web-конвертер, но для астробота он не подошел из-за лимита на размер файлов.

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

Пробный запуск:

Не сегодня
Не сегодня

Исполняемый файл в итоге хотя и запустился, но дальше черного экрана я не смог продвинутся. Не сегодня.

Потом я нашел обсуждение запуска Astrobot на AnyPS5, там надо собирать отдельную ветку из какого-то форка. Мне стало лень, простите. Кроме того из того же обсуждения видно, что с производительностью у AnyPS5 пока проблемы и нет смысла тратить время на компиляцию из исходников, что бы потом посмотреть на 5-7 FPS в лучшем случае.

Что в итоге?

Ну как минимум один эмулятор рабочий, позволяет запускать игру и играть в нее, причем без какого-то супер топового железа. Вам не нужно покупать 5090 и 9950X3D.

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

6677
2266
55
55
33
22
11