Следующая новость
Предыдущая новость

RPCS3: играбельный Demon's Souls.

Итак, свершилось! На эмуляторе PlayStation 3 запустилась одна из самых культовых игр платформы: Demon's Souls. Вам интересно узнать, как всё это происходило, через что пришлось пройти разработчикам? Добро пожаловать, сейчас мы всё вам расскажем.

Началось всё с того, что на Discord-канале RPCS3 к нам обратился пользователь под ником Numan. Он утверждал, что провел исследование того, что пытается сделать игра, и пришел к одному простому выводу: игра выделяет страницы памяти разного размера, уровня доступа и других атрибутов. При попытке обратиться по определенному адресу игра вылетала с ошибкой несанкционированного доступа к данному участку памяти. Следствием этого открытия стала более точная реализация функции sys_memory_get_page_attribute(), которая и отвечала за данную особенность поведения системы. Игра показала первую анимацию загрузки!

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

Знаете, так бывает, что человек не видит того, что творится у него под самым носом? А происходила совсем обычная вещь: игра загружала в память *.sdat файлы... зашифрованные *.sdat файлы загружаются в память... эмулятор их не расшифровывает (расшифровка "на лету" уже была реализована, но в тот момент висела в запросах на слияние на гитхабе) и загружает в память... Стоп, что?! Всё тот же Numan заметил это в логах, сделал *facepalm* и расшифровал всё вручную (порядка 26 файлов, по несколько килобайт каждый). И, о чудо, игра показала вступительные экраны и игровые сообщения! Видео не отображалось вовсе (только звуки):

Игра пожаловалась на недостаток места на жестком диске... Данную проблему обошли просто созданием директорий, которых требовала игра (позже было сделано исправление в функции модуля cellGame, вызвавшей данное исключение):

Игра дошла до главного меню:

Запуск новой игры:

И... Она дошла до игрового процесса!

Графика не сильно впечатляет, правда? А так?

Разработчику ssshadow при помощи шаманской магии и волшебного бубна (©BlackDaemon) удалось заставить игру вывести изображение. Произошло это случайно: просто он решил полазать в настройках игры и выкрутил яркость на максимум. Способ срабатывал совершенно случайным образом (чаще всего ничего не выходило). Этот счастливый человек пробежал весь первый уровень, поубивал там всех монстров и вообще был всячески доволен 15 фпс, которые выдавала игра на его ноутбуке (мы, честно говоря, не ожидали чего то большего, чем 2 или 3 кадра в секунду). Правда, в игре имеется собственный механизм пропуска кадров, который включается автоматически при недостатке в мощностях: 15 кадров в секунду были с рывками и резкими падениями производительности.

Тем временем очевидным стало то, что в Demon's Souls малой кровью не обойтись: игра изощренно использовала ресурсы и возможности игровой платформы, благодаря чему всплыли некоторые несовершенства нашей системы вывода изображения, и в дело вступил kd-11 - основной графический разработчик. Достаточно быстро он починил отображение видеороликов и главного меню:

Оставалось самое сложное: найти причину, по которой игра пропускала некоторые вызовы отрисовки. kd-11 засучил рукава и принялся переписывать систему работы с графическим кэшем и буферами изображений.

Спустя почти неделю экспериментов, отладок и повторных тестов была найдена основная причина отсутствующего изображения: по какой то причине значение uniform'a фрагментного шейдера, при помощи которого вычислялось освещение, имело нулевое значение! Результирующий вектор соответственно также занулялся, и изображение просто не было видно (хотя оно на самом деле корректно рисовалось). В поисках решения проблемы были обнаружены и исправлены еще несколько специфичных багов в декомпиляторах шейдеров, и наконец то картинка начала выглядеть так:

Корректно отображается большинство спецэффектов: туман, размытие изображения при движении, блум, эффекты частиц и многое другое:

Данные фиксы исправили проблемы с отображением еще в куче игр, но в большей мере для Demon's Souls был сделан специфичный хак, который не ломал другие игры и был достаточно безопасным. Но нет ничего более вечного, чем временное, правда? Руководствуясь данными соображениями, kd-11 копнул еще глубже и сделал действительно правильный фикс: всё та же проблема с чтением / записью буферов цвета, которая уже успела доставить кучу проблем с некоторыми играми (особенности поведения архитектуры PlayStation 3, при которой процессор консоли пишет или читает напрямую в видеопамять). Теперь игра требует включенной опции "Write Color Buffers" в настройках.

Оставалась еще одна серьезная проблема: скорость. Demon's Souls требовательна к ресурсам, играть на такой скорости было невозможно (игра начала выдавать порядка 3-4 кадров в секунду). Тут разработчикам пришла в голову идея попробовать перенести все фиксы в WIP коммит (на тот момент) разработчика Nekotekina, который приводил к серьезному скачку производительности в подавляющем большинстве игр. Результат превзошел все наши ожидания: плавные 15-20 фпс на не самом мощном железе! Это было потрясающе, Demon's Souls должна была стать играбельной на компьютере с мощной начинкой!

Для этих целей sssshadow наладил контакт с двумя людьми, обладающими мощными конфигурациями (один обладал разогнанным 6-ядерным Core i7 5820K, второй - разогнанным Core i7 6700К в паре с GeForce GTX 1080). Игра выдала плавные 30 фпс в большинстве случаев! Было чертовски приятно видеть ТАКОЕ на эмуляторе:

На данный момент игра несовместима с LLVM рекомпилятором PPU (Nekotekina занимается данной проблемой), и видеролики воспроизводятся с небольшими рывками. Также могли остаться несколько случайных багов, которые разработчики еще не успели заметить или исправить, но в целом Demon's Souls действительно играбельна.

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

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

Источник


ТОП НОВОСТЕЙ ИГРОВОЙ ИНДУСТРИИ

В поисках интересного и захватывающего способа развлечения, многие обращают внимание на онлайн-казино. Особое место среди них занимает увлекательный слот - Свит Бонанза . Этот игровой автомат обещает не только азарт, но и потрясающую атмосферу, благодаря яркому и сладкому дизайну. Идеальное занятие для отдыха после тяжелого дня!

Последние новости