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! Также поддержите разработчиков материально за их труды! Ваша поддержка поможет ускорить разработку эмулятора.

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

Примечание: в новости были использованы изображения и видео в том виде, в котором они появлялись на Discord-канале в процессе развития эмулятора.
+106

Комментарии 24

  1. Классный хайп в дискорде состоялся ))
    --------------------
    Мой ПК:
    Intel Core i7-3770K 3500 GHz.
    Nvidia GTX 1070 8GB Gigabyte. (NEW UPGRADE!)
    8GB RAM 1333. (Kingston 4GBx2)
  2. Vorfeed
    Vorfeed от 11 марта 2017 22:09
    Вы с английского комментарии разрабов чтоли перевели? 
    1. Как вы считаете: возможно за 3 минуты перевести и оформить такую же новость, как на оф.сайте?
      Я - один из разработчиков (не из самых активных и опытных, правда) и с самого начала присутствовал на закрытом discord-канале и видел, как идет поэтапное доведение игры до играбельного состояния. Ну и участвовал в этом по мере сил, времени и возможностей.
      Более того: новость, которую вы видите тут, изначально была написана мной для эмуплейса на русском языке и ребята использовали её как основу для написания новости на английском для rpcs3.net.
      1. Ярослав
        Ярослав от 11 марта 2017 23:03
        Это повлияет ещё на какие-либо игры?
        1. Конечно! Может то, что вложили для запуска demon's souls, сможет запустить ещё какие-то игры (которые до этого не запускались).
          --------------------
          Мой ПК:
          Intel Core i7-3770K 3500 GHz.
          Nvidia GTX 1070 8GB Gigabyte. (NEW UPGRADE!)
          8GB RAM 1333. (Kingston 4GBx2)
  3. Vorferd
    Vorferd от 11 марта 2017 22:35
    Круть,  оказывается и в СНГ полно очумелых, спасибо за ответ. 
  4. Vorfeed
    Vorfeed от 11 марта 2017 23:11
    Цитата: Ярослав
    Это повлияет ещё на какие-либо игры?

    Вы новость вообще читали?
    Данные фиксы исправили проблемы с отображением еще в куче игр...

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

  5. Гость BLACK
    Гость BLACK от 12 марта 2017 14:51
    Ну что поздравляю всех это наверно один из значимых эксклюзивов на пс3 будем надеяться что и остальные игры скоро смогут запускаться на эмуляторе.
  6. Алексей
    Алексей от 13 марта 2017 15:02
    Вот это просто шикарная новость. Есть один вопрос, т.к. автор один из разработчиков и имеет представление о эмуляции изнутри: есть ли шансы на оптимизацию и увеличение производительности или особенности архитектуры ПС3 требуют действительно много ресурсов для эмуляции и надеяться на программную оптимизацию не стоит? видел ролик на Ютубе с Demon's Souls видюха была загружена меньше половины, а проц на полную.
    1. Там еще есть что ускорить (например, реализовать АОТ рекомпилятор SPU) и оптимизировать (у kd-11 есть кое-какие планы по ускорению рендереров). Например, недавно Nekotekina переписал резервации, это дало огромный прирост в производительности.
      Архитектура консоли действительно сложная и требует много ресурсов, и для быстрой эмуляции нужна мощная машина.
      1. StalkerDolg
        StalkerDolg от 19 марта 2017 13:22
        Ты разработчик? Почему в Кейтрин геймпад не работает?
    2. Froz
      Froz от 14 марта 2017 20:39
      да один только PPU-рекомпилятор должен дать хороший прирост скорости, когда его доработают, не говоря уже про другие оптимизации
  7. Владык
    Владык от 13 марта 2017 22:54
    Я так и не понял что именно нужно сделать что бы вывести изображение во время геймплея. Интерфейс весь есть, управление и звук тоже, но изображения нет
    1. "Write Color Buffers" в настройках графики включили?
      --------------------
      よろしく お願いします
  8. Отлично!
    А еще теперь можно поздравить также и поклонников самураев и периода Сэнгоку (каковым и я являюсь) ибо уже можно хоть как-то поиграть в Sengoku Basara 4 и Sengoku Basara Sanada Yukimura-den! (Требуют opengl и включения все той же "Write Color Buffers"; у меня, правда, после 20-минутной попытки прохождения любой битвы
    эмулятор вылетает, надеюсь это исправят в дальнейшем) Пример геймплея можно посмотреть на Ютубе у Райин Кикё.
    --------------------
    よろしく お願いします
  9. Гость Kasereda
    Гость Kasereda от 15 марта 2017 11:56
    Кто знает, где можно взять нормальные рабочие образы для RPCS3???  
  10. Владык
    Владык от 15 марта 2017 13:37
    Цитата: park2010parad
    "Write Color Buffers" в настройках графики включили?

    Всё, нашёл, спасибо. Но после прохождения первой локации, после смерти в Нексусе и далее игра очень слино тормозит, где то 16 фпс? по началу было терпимо 25-30
    1. Цитата: Владык
      Но после прохождения первой локации, после смерти в Нексусе и далее игра очень слино тормозит, где то 16 фпс? по началу было терпимо 25-30


      Да, к сожалению это так пока. Надеемся, по мере развития эмулятора со временем быстрее будет.
      --------------------
      よろしく お願いします
  11. Гость Kaphibergen
    Гость Kaphibergen от 15 марта 2017 22:10
    OilRush

    У меня такой вопрос (раз уж ты варишься в разработке) почему в Linux версии эмулятора, нет Вулкана?
    Или он в какой-то отдельной ветке?
  12. Гость Abelus
    Гость Abelus от 15 марта 2017 23:09
    А у меня почему то звук сначала есть, потом пропадает: https://www.youtube.com/watch?v=e9ZBYyMidXw
  13. СэрГей
    СэрГей от 17 марта 2017 09:13
    Звук идёт просто ужасно, хрипло и прерывисто, а через какое то время он вообще может исчезнуть. Может дело в том что он синхронизируется с частотой кадров? Но картинка вполне играбельная, а от такого звука уши вянут
  14. Олег
    Олег от 21 марта 2017 18:10
    Что то не получается у меня(((( Вот такая ошибка. Подскажите что не так
    https://pp.userapi.com/c604817/v604817225/3d0e3/EBLCfE_AXJ8.jpg
  15. Hesp
    Hesp от 10 апреля 2017 14:43
    Посоны, маякните, как Heavy Rain пойдёт  blush 
  16. kotik
    kotik от 13 мая 2017 22:15
    лучше бы анчики начали жмулировать хы
Добавить комментарий

Оставить комментарий