Прогресс эмуляции (июль 2017)

Второй летний месяц закончился, а значит, можно подводить итоги. Приступаем!


RPCS3

Эмулятор PlayStation 3 развивается быстрыми, стабильными темпами. За прошедший месяц было совершено порядка 200 коммитов в основную ветку развития. Основные изменения:
  • реализована поддержка релокаций в LLVM рекомпиляторе PPU
  • реализован фреймскип (пропуск кадров), должно помочь в графически тяжелых играх, жертвуя при этом плавностью анимации
  • возможность многопоточной обработки вершин
  • исправлена эмуляция инструкций FCGT и FCMGT в SPU
  • исправлен "синий / зеленый фильтр", который присутствовал во многих играх (например, Persona 5), а также экстремально высокий уровень яркости
  • исправлены отсутствующие персонажи в Red Dead Redemption, Mafia II и, возможно, в некоторых других играх
  • в Tales of Vesperia теперь отображается почти вся геометрия
  • исправлено мерцание текстур в некоторых играх при использовании Vulkan рендерера
  • LLVM рекомпилятор PPU теперь может повторно использовать загруженные исполняемые файлы
  • улучшена скорость при использовании Vulkan рендерера
  • компиляция функций SPU в asmjit теперь многопоточная (спидап)
  • скомпилированные функции SPU в asmjit рекомпиляторе теперь кэшируются (спидап)
  • реализовано определение состояния зацикливания в SPU (спидап)
  • исправлено начальное состояние таймера в sys_timer, Kingdom Hearts II и другие игры серии ушли в ингейм
  • множество улучшений в LLVM рекомпиляторе PPU, теперь он используется по умолчанию
  • бесчисленное множество фиксов и улучшений в GUI
  • реализован вершинный кэш (ощутимый спидап в большинстве игр)
  • переписан кэш текстур (спидап)
  • теперь возможна загрузка и использование билдов эмулятора под Linux системы с использованием AppImage

Благодаря всем этим изменениям такие игры, как Demon's Souls и Persona 5, стали практически играбельными на не самом топовом железе!



Dolphin

Эмулятор GameCube / Wii традиционно выдает сотни коммитов в месяц. Но в этом месяце произошло особое событие, которое сейчас и рассмотрим.



Убершейдеры (смешное название, правда?). Начнем с того, что GameCube - одна из первых консолей с программируемым графическим конвейером, так называемым TEV юнитом (Texture EnVironment). Это означает, что в процессе эмуляции необходимо дизассемблировать микрокод GPU консоли, разбирать его и воссоздавать на современном GLSL / HLSL в виде фрагментных (пиксельных) и вершинных шейдеров. Казалось бы, всё хорошо и замечательно работает, но есть одна проблема: сгенерированные шейдеры должны скомпилироваться драйвером вашей видеокарты, используя при этом ЦП. В графически тяжелых играх каждый спецэффект, как то взрыв, отражение, блик и т.д. может порождать собственный шейдер, который должен быть тут же скомпилирован. К чему же это приводит? Пример ниже:


Неприятные микрофризы в процессе игры, которые ломают весь геймплей. Разработчики рассматривали несколько вариантов решения данной проблемы:

1. Скомпилировать все шейдеры для всех игр, для различных конфигураций ПК и версий драйверов и хранить их в кэше. Звучит просто, не правда ли? Однако это безумная затея: возможных комбинаций больше, чем песчинок на планете Земля...

2. Предугадать, какие шейдеры требует игра. На самом деле, решение очень сложное, практически нереализуемое. Единственный способ точно узнать, какие шейдеры могут понадобиться игре в различных ситуациях - это пройти её от начала и до конца.

3. Расшаривание шейдеров. Идея заключается в том, что каждому шейдеру можно присвоить UID (Unique ID), и компилировать его перед запуском игры. Решение теоретически должно сработать, однако код графической части эмулятора постоянно изменяется, и не факт, что в скором времени не придется избавляться от UID.

4. Асинхронная компиляция шейдеров. Было реализовано в одном из форков эмулятора разработчиком Tino. Идея заключается в том, чтобы игнорировать компиляцию нового шейдера в тот момент, когда это требуется, а продолжать использовать предыдущий. Новый шейдер компилируется в отдельном потоке, затем применяется после завершения процесса. Да, это действительно избавляет от микрофризов, однако может приводить к неприемлемым багам:


5. Решение. Написать интерпретатор графического конвейера GameCube / Wii в шейдерах и запускать его на видеокарте. Идея просто безумная, но тем она интереснее для реализации :D Работы в данном направлении были начаты еще в далеком 2015 году разработчиком phire, и доведены до логического завершения разработчиком Stenzek. И это действительно работает!


Подробнее о убершейдерах можете почитать на оф. сайте.



PCSX2

Эмулятор PlayStation 2 развивается достаточно медленно, всего 24 коммита за месяц. Из заметного:
  • удалены хаки для Metal Gear Solid 3 Subsistence
  • исправлены проблемы с эффектом глубины в Finding Nemo
  • упрощены геометрические шейдеры
  • некоторые изменения в GUI
  • переработан алгоритм вычисления высоты фреймбуффера
  • добавлен CRC хак для Dragon Ball Z Budokai Tenkaichi 3



PPSSPP

Эмулятор PSP недалеко ушел от своего старшего брата, всего 52 коммита:
  • исправлена поддержка Windows XP в LocalFileLoader
  • исправлено масштабирование текстур в D3D11
  • реализована возможность запуска без RIP-адресации между сгенерированным кодом и глобальными данными
  • добавлена поддержка геймпадов NYKO CORE
  • улучшена поддержка полноэкранного режима на мониторах 21:9
  • исправлены SIMD оптимизации при манипуляции с 20 битными значениями
  • исправлен вылет эмулятора на FreeBSD при запуске игры


Xenia

Эмулятор Xbox 360 снова не может порадовать большим прогрессом. Из заметного: исправлены темные цвета в Vulkan рендерере, а также белые рамки вокруг некоторых текстур, добавлена WIP реализация NtProtectVirtualMemory.



Cxbx-Reloaded

Эмулятор Xbox выдал в этом месяце 116 коммитов, неплохой результат. Из наиболее заметных изменений - огромные улучшения в HLE эмуляции звука, а также большой объем работ проведен в LLE эмуляции графического процессора.



Cemu

Очередной публичный релиз версии 1.8.2. Улучшена производительность рекомпилятора, улучшена эмуляция звука, а также программного декодирования видео. Из наиболее приятных измененний - начаты работы по поддержке RPL библиотек (по аналогии с SPRX модулями в RPCS3). В настоящее время неюзабельно, но в будущем использование LLE-модулей вместо HLE может серьезно улучшить совместимость эмулятора. Ну и, по традиции, превью новой версии:



Вот таким насыщенным получился июль, начинаем мониторить август.
+53

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

  1. Матвей
    Матвей от 2 августа 2017 01:42
    Как запустить Shattered Memories без багов?
    1. bogusve от 4 августа 2017 22:06
      Я долго мучился с разными версиями эмуляторов.
      Единственный играбельный способ который подошел мне что бы пройти игру с более менее
      каким то комфортом, это играть на pcsx2-v1.0.0 версии. Только на ней у меня не было багов с кат-сценами. Играл в soft режиме и нативном разрешении естественно. В принципе fps проседал иногда и не очень сильно.
      Игру прошел.
      Настройки хаков в эмуляторе я брал с этого сайта.

      Отредактировал:
      Вот к стати свежее видео, человек настроил игру нормально (см. где-то после 6-ой минуты).
      Silent Hill: Shattered Memories on PCSX2 my build (best settings)
      1. Матвей
        Матвей от 5 августа 2017 15:49
        Зря старался. Эмулировать надо Вии-версию, она явно лучше идет
  2. Darkriot от 2 августа 2017 05:37
    ээх, подождали бы буквально 1 денёк и написали бы про GCM ещё в Rpcs3 :)
    --------------------
    Мой ПК:
    Intel Core i7-3770K 4000 GHz.
    Nvidia GTX 770 2GB Gigabyte. (NEW UPGRADE!)
    8GB RAM 1333. (Kingston 4GBx2)
    1. Kuro от 9 августа 2017 11:02
      Напиши, это ведь интересно будет почитать)
Добавить комментарий

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