Atraso de entrada em consoles e emuladores retrô



TL; DR O artigo descreve o problema conhecido de atraso de entrada, que se manifesta ao tentar jogar jogos antigos em hardware moderno: emuladores de consoles retrô, gamepads bluetooth, etc. Às vezes, os atrasos são tão grandes que se torna impossível jogar. Descreverei minha maneira de encontrar uma configuração aceitável para executar meus jogos favoritos.

Com a onda de popularidade dos computadores de placa única RaspberryPi, muitos conhecidos da OrangePi compraram pacotes deles. Sem decidir o que fazer com eles, eles começaram a esculpir deles o console retro com base no emulador RetroArch e na distribuição Recallbox. Quando tentei jogar meus jogos favoritos da infância, fiquei surpreso: " Como eu poderia jogar isso? " A física dos jogos parecia de alguma forma errada, o sentimento era nojento. Depois de um tempo, eles me disseram que o ponto principal é o atraso de entrada, que à primeira vista não parece um atraso, ou seja, como outras físicas.

Acontece que o problema é conhecido há muito tempo entre os geeks de console e está sendo investigado ativamente. Analisarei os estudos de outras pessoas e tentarei medir o atraso da minha configuração.

Qual é o problema?


Atraso na entrada é o tempo desde o momento em que o botão no controle é pressionado até a reação do personagem na tela. Aqui muitos fatores desempenham um papel ao mesmo tempo:

  • Atraso no monitor / TV - Algumas TVs modernas têm um atraso na saída da imagem superior a 100ms. Isso ocorre devido ao pós-processamento da imagem, buffer, filtros, etc. Aqui você pode ver uma comparação de TVs CRT e LCD com alta latência. Normalmente, os fabricantes de monitores indicam a velocidade da matriz nas especificações, referindo-se à velocidade de alternância entre cores, mas isso não tem a ver com o atraso na saída da imagem.

    Um sinal analógico do decodificador em duas televisões. Há um atraso significativo na TV LCD em comparação com o CRT.
  • Atraso no computador - um console de jogos ou um computador com um emulador não processa o sinal instantaneamente, leva tempo. O computador precisa receber um sinal do dispositivo de entrada, processá-lo e exibir a imagem na tela. O atraso também é introduzido pela sincronização vertical da imagem quando exibida na tela. Aqui , os desenvolvedores do RetroArch tentam resolver esse problema.

    Demonstração de um grande atraso no emulador. Video Denis Major
  • Atraso do controlador - O dispositivo de entrada também pode apresentar um atraso. Por exemplo, se conectado a um barramento USB carregado, via Bluetooth, etc.

Emuladores


Todo mundo quer jogar em hardware moderno, TVs e monitores normais com HDMI e também executar todos os jogos possíveis em um dispositivo. Para isso, são usados ​​emuladores de consoles populares executados em computadores X86 ou ARM comuns. Aqui estão os mais populares:

Retroarch



O emulador mais popular e avançado. Capaz de imitar PlayStation1, SNES, NES, GameBoy, Sega Genesis / CD e outros consoles. Ele funciona em sistemas operacionais Windows, Linux, MacOS e nos consoles modernos Xbox, Android, PlayStation2 / 3/4 / Vita, Nintendo Wii / Switch e outros . Com base nele, o popular kit de distribuição Recallox é produzido .⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

Openemu


imagem
Emulador muito conveniente e simples para macOS. Ele suporta os consoles mais populares e possui uma galeria de jogos conveniente, ordenada por plataforma. Fora da caixa, ele suporta playpads de PlayStation 4 via bluetooth. Sua capacidade é inferior ao RetroArch, mas, para meu gosto, é muito mais conveniente de usar. Para minhas medições, vou usá-lo, pois ele funciona imediatamente no macOS, sem se preocupar com as configurações do gamepad.

Procedimento de medição


A maneira mais acessível de medir o atraso é gravar na tela de vídeo e no momento em que você pressiona o botão do joystick. Os smartphones modernos gravam facilmente vídeos a 240 FPS ou mais, o que é suficiente para medições. Para registrar com precisão o momento do pressionamento, você pode soldar o LED nos contatos do botão, que acenderão no momento do pressionamento. O LED acende em nanossegundos, o que permite capturar com precisão o momento da pressão.

Brunnis, do fórum do projeto libretro, fez muita pesquisa sobre o atraso de entrada. Considero os estudos dele os mais completos e objetivos.

imagem
Gamepad USB com LED soldado para capturar o momento em que o botão é pressionado

imagem
Botão não pressionado

imagem
Botão pressionado

imagem
A animação na tela inicia após 24 quadros (100 milissegundos)

Fórmula de cálculo


Em um segundo, 1000 milissegundos.
A câmera do telefone dispara a 240fps.
Então, 1 quadro de vídeo = 1000/240 = 4.16ms.

Também é importante considerar a taxa de quadros na qual o monitor e o computador estão em execução. Por exemplo, para um modo operacional de 30fps, um quadro do monitor terá 33ms e 60fps - 17ms. Isso deve ser levado em consideração, pois o tempo entre os quadros não pode ser menor que esses valores, o que significa que os eventos que ocorrem durante o período de atualização do quadro no monitor serão arredondados para o último quadro.

Não vou dar aqui todos os resultados das medições do cara, que estão interessados ​​em sugerir que se familiarizem por conta própria.
O principal a lembrar: os consoles originais tiveram um atraso médio de 50 a 70ms, dependendo do console e do modo PAL / NTSC. Um emulador de PC bem ajustado adiciona 60-80ms de atraso, dependendo da plataforma emulada. O emulador raspberry pi pode ter até 150ms de atraso no total.

Minhas pesquisas


Quando criança, eu tive um Sega Mega Drive, são os jogos dela que causam a nostalgia mais forte. Portanto, descreverei minha busca por uma configuração confortável especificamente para este console. Quero dizer imediatamente que minha pesquisa não afirma ser uma precisão absoluta de medição.

Minhas exigências:

  • Gamepads sem fio - os nerds do console podem me condenar, mas eu quero jogar confortavelmente enquanto estou sentado no sofá em qualquer posição. Os gamepads com fio são terrivelmente inconvenientes, todo mundo se machuca com eles e você não joga por muito tempo.
  • Saída via HDMI ou DisplayPort - não há entradas analógicas no meu monitor, então não posso comprar o Sega Mega Drive original. Adaptadores USB para captura de vídeo analógico apresentam atraso e são inconvenientes. Também não quero comprar uma TV CRT separada para o decodificador

Macbook + Dualshok 4 + OpenEMU


Eu realmente gosto do jogo do Playstation 4, considero o mais conveniente dos gamepads existentes. Pode funcionar tanto via bluetooth quanto via USB. Totalmente suportado no OpenEMU, pronto para uso, sem configurações.


Apesar de toda a conveniência do OpenEMU, seu principal problema é o rebaixamento do FPS no modo de tela cheia. Não sei ao certo qual é o motivo, e talvez isso esteja consertando, mas não funcionou para mim. Portanto, eu jogo no modo janela.


Interface do emulador OpenEMU. Todos os jogos são classificados por plataforma.

Medições


Eu não queria dissociar o gamestation do Playstation para soldar o LED, então tive que fazer a contagem regressiva do tempo em que o botão era pressionado pelo som. O erro deste método é de aproximadamente 8 a 10 ms. O monitor usa o LG 24UD58 no modo 4K a 60fps conectado ao MacBook via DisplayPort. Jogo Contra Hard Corps.


O atraso no MacBook com um controlador Dualshock4 conectado via bluetooth é de aproximadamente 150ms. Isso é muito!
O MacBook + Dulashock oferece aproximadamente 150ms de atraso. Isso é muito para um jogo confortável, tal atraso é perceptível e plataformas de hardcore como o Contra Hard Corps jogam desconfortáveis.
Apesar de o atraso em um pacote desse tipo ser imperdoavelmente grande, ele ainda merece o direito à vida. Como é suficiente jogar um gamepad na mochila no laptop e obter um console de jogos em qualquer lugar. Mesmo antes das medições, ficou claro para mim que essa não era a melhor opção e continuei a pesquisa.

Clone Sega Genesis


Agora, muitos clones piratas diferentes de consoles retrô com jogos pré-instalados são vendidos. Alguns deles são feitos de decodificadores Android com emuladores de console internos, o que significa que eles sofrem os mesmos problemas com atrasos. Mas alguns prometem um console completo sem um emulador . Encontrei este console no Avito para cortar a relva: modelo retrogenesis.ru Retro Genesis HD Ultra. Eles escrevem no site que este não é um emulador, mas por dentro é realmente um console de hardware. Existem jogos pré-instalados e a capacidade de inserir cartuchos. Ao mesmo tempo, há uma saída HDMI e gamepads sem fio!


Gamepads sem fio


Acima de tudo, fiquei incomodado com os gamepads operando a 2,4 GHz. Conhecendo os problemas de bluetooth e Wi-Fi nessa faixa, a primeira coisa que tentei foi medir o atraso dos próprios gamepads. O console suporta a conexão simultânea de gamepads com e sem fio. Aconteceu que a parte sem fio foi feita usando um módulo separado, que fecha os contatos da mesma maneira que um gamepad com fio. Isto é, de fato, emula um fio comum com a mesma pinagem.

imagem
Um módulo de rádio que emula cliques com fio no gamepad

Conectei a ponta de prova do osciloscópio 1 ao LED no controlador e a outra ao pino correspondente à tecla Para cima no console. Quando o sinal é processado pelo módulo de rádio, ele simula um pressionamento de tecla, e eu o observarei na sonda 2. Comparando a diferença de tempo entre os sinais 1 e 2, pude obter com muita precisão o atraso adicionado pelo gamepad sem fio. Em um osciloscópio, a escala de uma célula é de 5ms, o que significa que o atraso dos gamepads sem fio é de 25ms.


Comparação de sinais no gamepad e console


Módulo sem fio adiciona atraso de 25ms

Medições



Atraso no Sega Retro Genesis aproximadamente 70ms

Subtraindo 25ms de atraso do módulo de rádio, verifica-se que o próprio console tem um atraso de 50ms, o que corresponde ao Sega original. Ao conectar gamepads com fio, o atraso será obviamente menor em 25ms. Em geral, a jogabilidade parece com o console original e estou satisfeito. Apenas a incapacidade de baixar meus jogos (ROMs) me perturba, mas tentarei resolver esse problema com um cartucho regravável ou tentarei encontrar a oportunidade de fazer upload de jogos para a unidade flash embutida.

Conclusão


Minhas medições não levam em consideração o atraso de saída do monitor, mas todas as medições foram feitas no mesmo monitor, portanto, isso não afeta os resultados. Cada medição repeti 10 vezes, às vezes obtendo uma dispersão em leituras de cerca de 4 quadros, ou seja, 16ms. Acredito que o ponto é o atraso na sincronização vertical ao formar uma imagem no console.

Em geral, acho que minhas medidas dão uma idéia geral dos atrasos nas duas configurações e podem ser úteis para quem escolhe um método.

Opção Runahead no RetroArch


Há um ano, os desenvolvedores do RetroArch anunciaram que obtiveram menos atrasos no emulador do que nos consoles originais. Eu ainda não tentei essa opção, mas ela deve ser lembrada.

Referências


Agradecimentos a Denis Major por sua pesquisa. Graças a este vídeo, descobri que o problema não está na física modificada dos jogos, mas nos atrasos de entrada.

Muita pesquisa sobre atrasos entre plataformas .

Outro estudo .

Pro Hux Space Neuron



Em nosso Hackspace Neuron , tocamos regularmente consoles retrô, invertemos o ferro e fazemos muitas outras coisas. Conosco, você pode usar um ferro de solda, um osciloscópio, um analisador de frequência e conversar com nerds engraçados. Venha visitar.

Todas as notícias sobre a vida de Huxpeys no canal de telegrama: @neuronspace

Source: https://habr.com/ru/post/pt446990/


All Articles