Итак, свершилось! На эмуляторе 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! Также поддержите разработчиков материально за их труды! Ваша поддержка поможет ускорить разработку эмулятора.
Последние изменения пока не включены в основную ветку, опробовать игру вы можете на этой сборке.
Источник
ТОП НОВОСТЕЙ ИГРОВОЙ ИНДУСТРИИ
В поисках интересного и захватывающего способа развлечения, многие обращают внимание на онлайн-казино. Особое место среди них занимает увлекательный слот - Свит Бонанза . Этот игровой автомат обещает не только азарт, но и потрясающую атмосферу, благодаря яркому и сладкому дизайну. Идеальное занятие для отдыха после тяжелого дня!
Читайте также
Последние новости