- PVSM.RU - https://www.pvsm.ru -
TL;DR В статье описывается известная проблема задержки ввода (input lag), которая проявляется при попытках играть в старые игры на современном железе: эмуляторах ретро-консолей, bluetooth-геймпадах и т.д. Иногда задержки настолько большие, что играть становится невозможно. Я опишу свой путь поиска приемлемой конфигурации для запуска моих любых игр.
С волной популярности одноплатных компьютеров RaspberryPi, OrangePi многие знакомые накупили себе их пачками. Не придумав что с ними делать, они начали лепить из них ретро-консоли на базе эмулятора RetroArch и дистрибутива Recallbox. Когда я попробовал поиграть на этом в свои любимые игры детства я был удивлен: "Как я мог в это играть?". Физика игр казалась какой-то неправильной, ощущение отвратительное. Спустя время мне рассказали, что все дело в задержке ввода, которая на первый взгляд не ощущается как задержка, а именно как другая физика.
Оказалось, что проблема давно известна среди консольных гиков и ее активно исследуют. Я разберу чужие исследования и попытаюсь замерить задержку своего сетапа.
Задержка ввода — это время от момента нажатия кнопки на геймпаде до реакции персонажа на экране. Здесь играет роль сразу множество факторов:
Один аналоговый сигнал от приставки на двух телевизорах. Видна значительная задержка на LCD телевизоре по сравнению с CRT.
Демонстрация большой задержки на эмуляторе. Видео Denis Major [3]
Всем хочется играть на современном железе, нормальных телевизорах и мониторах с HDMI, а еще запускать все возможные игры на одном устройстве. Для этого используются эмуляторы популярных консолей, которые запускаются на обычных X86 или ARM компьютерах. Вот самые популярные из них:
[4]
Самый популярный и продвинутый эмулятор. Умеет эмулировать PlayStation1, SNES, NES, GameBoy, Sega Genesis/CD и другие консоли. Работает на десктопных ОС Windows, Linux, MacOS и на современных консолях Xbox, Adnroid, PlayStation2/3/4/Vita, Nintendo Wii/Switch и других [5]. На его основе сделан популярный дистрибутив Recallox [6].⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Очень удобный и простой эмулятор для macOS. Поддерживает большинство популярных консолей и имеет удобную галерею игр, отсортированную по платформам. Из коробки поддерживает геймпады от Playstation 4 по bluetooth. Он уступает по возможностям RetroArch, но на мой вкус намного более удобный в использовании. Для своих замеров я буду использовать его, так как он сразу работает на macOS без пердолинга с настройкой геймпада.⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Самый доступный способ измерения задержки — запись на видео экрана и момента нажатия на кнопку джойстика. Современные смартфоны легко снимают видео в 240 FPS и больше, что вполне достаточно для замеров. Чтобы точно зафиксировать момент нажатия, можно припаять светодиод к контактам кнопки, который будет загораться в момент нажатия. Светодиод загорается за наносекунды, что позволяет точно фиксировать момент нажатия.
Brunnis c форума проекта libretro провел большое исследование [8] проблемы задержки ввода. Его исследования считаю наиболее полными и объективными.
USB геймпад с припаянным светодиодом для фиксирования момента нажатия кнопки
Кнопка не нажата
Кнопка нажата
Начало анимации на экране спустя 24 кадра (100 миллисекунд)
В секунде 1000 миллисекунд.
Камера телефона снимает в 240fps.
Значит 1 кадр видео = 1000 / 240 = 4,16мс.
Здесь также важно учитывать частоту кадров на которой работает монитор и компьютер. Например для режима работы 30fps, один кадр монитора будет равен 33мс, а для 60fps — 17мс. Это нужно учитывать, так как время между кадрами не может быть меньше этих значений, а значит события происходящие в промежуток обновления кадров на мониторе будут округляться до последнего кадра.
Я не буду приводить здесь все результаты измерений чувака, кому интересно предлагаю ознакомиться самостоятельно.
Главное что нужно запомнить: оригинальные консоли имели в среднем задержку от 50 до 70мс, в зависимости от консоли и режима PAL/NTSC. Хорошо настроенный эмулятор на PC добавляет 60-80мс задержки, в зависимости от эмулируемой платформы. Эмулятор на raspberry pi может в сумме иметь до 150мс задержки.
В детстве у меня была Sega Mega Drive, именно ее игры вызывают самую сильную ностальгию. Поэтому я буду описывать свои поиски комфортного сетапа именно для этой консоли. Сразу хочу сказать, что мое исследование не претендует на абсолютную точность измерений.
Мои требования:
Мне очень нравится геймпад от Playstation 4, я считаю его самым удобным из существующих геймпадов. Он может работать как по bluetooth, так и по проводу USB. Полностью поддерживается в OpenEMU из коробки без настроек.
Несмотря на все удобство OpenEMU, его главная проблема это просадка FPS в полноэкранном режиме. Я не уверен в чем причина, и возможно это исправляется, но у меня не получилось. Поэтому я играю в оконном режиме.
Интерфейс эмулятора OpenEMU. Все игры отсортированы по платформам.
Я не хотел раскурочивать геймпад от Playstation чтобы припаять светодиод, поэтому отсчет момента нажатия кнопки пришлось делать по звуку. Погрешность такого способа примерно 8-10мс. Монитор использую LG 24UD58 в режиме 4K@60fps подключенный к макбуку через DisplayPort. Игра Contra Hard Corps.
Задержка на макбуке с контроллером Dualshock4, подключенным по bluetooth равна примерно 150мс. Это много!
Макбук + Dulashock дает примерно 150мс задержки. Это достаточно много для комфортной игры, такая задержка заметно ощущается и в хардкорные платформеры вроде Contra Hard Corps играть некомфортно.
Несмотря на то, что задержка такой связки непростительно большая, она все равно заслуживает право на жизнь. Так как достаточно кинуть в рюзкак к ноутбуку геймпад, и получить в любом месте игровую консоль. Еще до замеров мне было понятно, что это не лучший вариант и я продолжил поиски.
Сейчас продается много разных пиратских клонов ретро-консолей с предустановленными играми. Некоторые из них сделаны из телевизионных приставок на Android с эмуляторами консолей внутри, а значит страдают теми же проблемами с задержками. Но некоторые обещают полноценную консоль без эмулятора. Я нашел на авито за косарь вот такую консоль: retrogenesis.ru [9] модель Retro Genesis HD Ultra. На сайте пишут, что это не эмулятор а внутри действительно аппаратная консоль. Есть предустановленные игры и возможность вставлять картриджи. При этом есть HDMI выход и беспроводные геймпады!
Больше всего меня напрягали геймпады, работающие на частоте 2.4GHz. Зная проблемы bluetooth и WiFi на этом диапазоне, я первым делом попробовал измерять задержку самих геймпадов. Консоль поддерживает одновременное подключение проводных и беспроводных геймпадов. Оказалось, что беспроводная часть сделана с помощью отдельного модуля, который замыкает контакты так же, как проводной геймпад. То есть по сути эмулирует обычный проводной, с такой же распиновкой.
Радиомодуль, который эмулирует нажатия проводного геймпада
Я подключил щуп 1 осциллографа к светодиоду на геймпаде, а другой к контакту, соответствующему клавише Up на консоле. Когда сигнал будет обработан радиомодулем, он сэмулирует нажатие клавиши, и я увижу это на щупе 2. Сравнив разницу во времени между сигналами 1 и 2, я смог очень точно получить задержку, которую добавляет беспроводной геймпад. На осциллографе масштаб одной клетки 5мс, значит задержка беспроводных геймпадов 25мс.
Сравнение сигналов на геймпаде и консоли
Беспроводной модуль добавляет 25мс задержки
Задержка на Sega Retro Genesis примерно 70мс
За вычетом 25мс задержки радимодуля получается, что сама консоль имеет задержку 50мс, что соответствует оригинальной Sega. При подключении проводных геймпадов, задержка, очевидно, будет меньше на 25мс. В целом геймплей ощущается как на оригинальной приставке, и я доволен. Огорчает только невозможность загружать свои игры (ROM-ы), но я попробую решить эту проблему с помощью перезаписываемого картриджа, либо попытаюсь найти возможность заливать на встроенную флешку игры самостоятельно.
Мои замеры не учитывают задержку вывода монитора, но все измерения сделаны на одном и том же мониторе, поэтому она не влияет на результаты. Каждый замер я повторил 10 раз, получая иногда разброс в показаниях около 4 кадров, то есть 16мс. Полагаю, что дело в задержке вертикальной синхронизации при формировании изображения на консоли.
В целом, считаю, что мои измерения дают общие представления о задержках на двух сетапах и, возможно, будут полезны тем, кто выбирает себе способ.
Год назад разработчики RetroArch заявили [10], что добились на своем эмуляторе задержек меньше чем на оригинальных консолях. Я сам не пробовал эту опцию, но ее нужно иметь в виду.
Спасибо Denis Major [11] за его исследования. Благодаря этому видео я впервые узнал, что проблема не в измененной физике игр, а именно в задержках ввода.
Большое исследование задержек на разных платформах [8].
Еще одно исследование [12].
В нашем Хакспейсе Нейрон [13] мы регулярно играем в ретро-приставки, реверсим железо и делаем много других штук. У нас вы сможете воспользоваться паяльником, осциллографом, частотным анализатором и пообщаться с веселыми задротами. Приходите в гости.
Все новости о жизни Хакспейса в телеграм-канале: @neuron_news [14]
Автор: Павел Жовнер
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/bluetooth/313852
Ссылки в тексте:
[1] Здесь: https://youtu.be/SeMq3BS9wBU
[2] Здесь: https://github.com/libretro/RetroArch/issues/6984
[3] Denis Major: https://www.youtube.com/watch?v=4_7_vROQ7w4
[4] Retroarch: https://www.retroarch.com
[5] других: https://www.retroarch.com/?page=platforms
[6] Recallox: https://www.recalbox.com/en/
[7] OpenEMU: https://openemu.org/
[8] большое исследование: https://forums.libretro.com/t/an-input-lag-investigation/4407
[9] retrogenesis.ru: http://retrogenesis.ru/
[10] заявили: https://www.libretro.com/index.php/retroarch-1-7-2%E2%80%8A-%E2%80%8Aachieving-better-latency-than-original-hardware-through-new-runahead-method/
[11] Denis Major: https://www.youtube.com/watch?v=4_7_vROQ7w4&feature=youtu.be
[12] Еще одно исследование: https://medium.com/@WydD/controller-input-lag-how-to-measure-it-1ebfd2c9d60
[13] Хакспейсе Нейрон: https://neuronspace.ru/
[14] @neuron_news: https://t.me/neuron_news
[15] Источник: https://habr.com/ru/post/446990/?utm_source=habrahabr&utm_medium=rss&utm_campaign=446990
Нажмите здесь для печати.