terça-feira, 13 de fevereiro de 2018

Precisão Demanda Poder (Parte 1)

Precisão Demanda Poder: A Saga de 3GHz de Um Homem para Construir o Emulador Perfeito de SNES (I)

Precisão Demanda Poder: A Saga de 3GHz de Um Homem para Construir o Emulador Perfeito de SNES (I)


Emuladores para jogar antigos jogos são imensamente populares online, com argumentos regulares surgindo violentamente sobre qual emulador é o melhor para qual jogo. Hoje apresentaremos um outro ponto de vista de um gentil-homem que criou o emulador de Super Nintendo bsnes. Ele deseja compartilhar seus pensamentos sobre a mais importante parte da experiência de emulação; a precisão.


1 INTRO

Não é necessário muito poder bruto para jogar Nintendo ou SNES em um PC moderno; emuladores podiam fazer isso nos anos 90 com meros 25MHz de poder de processamento. Mas emular estes consoles precisamente - bem, este já é um outro desafio completamente diferente; emuladores precisos podem precisar de uns 3GHz de poder para recriar fielmente tecnologia anciã. Neste espaço nós daremos uma olhada em por que precisão é tão importante para emuladores e por que é tão difícil de conseguir.

Simplificando, precisão é a medida de quão bem o software de emulação imita o hardware original. Compatibilidade aparente é a mais óbvia medida de precisão - um jogo antigo rodará no meu emulador novo? - mas tal visão estreitada pode ignorar muitos probleminhas. Na realidade, a maior parte do software roda com grande tolerância a detalhes de temporização e parece funcionar normalmente mesmo se a temporização estiver desajustada de uns 20%.

Então vem a questão: se podemos alcançar compatibilidade básica, por que se importar melhorando a precisão além quando tal melhoria virá com grandes custos em velocidade? Duas razões: desempenho e preservação.

Primeiro, desempenho. Vamos pegar o caso de Speedy Gonzales. Este é um jogo de plataforma do SNES sem nenhuma funcionalidade de salvar, e tem umas 2-3 horas de duração. À primeira vista, parece que ele roda bem em qualquer emulador. Mesmo assim, quando se chega no estágio 6-1, você pode rapidamente notar a diferença entre um emulador preciso e um rápido: existe um interruptor, requerido para completar o nível, onde o jogo irá travar em deadlock se um caso-limite raro do hardware não é emulado. Podemos imaginar a frustração de perder instantaneamente três horas de progresso e estar de frente a um jogo não-finalizável. A não ser que o software faça exatamente o que o hardware costuma fazer, o jogo permanece injogável.

Ou imagine Air Strike Patrol, onde uma sombra é desenhada debaixo de seu avião. Isto é feito usando efeitos de rasterização mid-scanline, que são extraordinariamente intensivos em termos de recursos para emular. Mas sem os efeitos de rasterização, a sombra do seu avião não vai aparecer, assim como você vê no screenshot abaixo. Isso é fácil de negligenciar, especialmente se você não sabia que ela deveria estar ali. Mas uma vez que você a nota de fato, você vê que ela é bastante útil. Seu avião tem a capacidade de soltar bombas, e esta sombra age como um tipo de sistema de mira para determinar onde as bombas cairão. Algo que fica um pouco mais difícil sem este efeito aparentemente menor.

O segundo assunto é preservação. Dê uma olhada nos hardwares da Nintendo Game&Watch. Estes dispositivos surgiram em 1980, e por ora a maior parte dos 43 milhões produzidos falharam devido à antiguidade ou foram destruídos. Ainda que eles sejam relativamente obteníveis, sua escassez só aumentará, dado que nenhuma unidade adicional será produzida. Este mesmo problema se estende a qualquer hardware: uma vez que se foi, se foi de vez. Neste ponto, emuladores são a única forma de experimentar estes velhos jogos, então eles devem ser capazes de fazê-lo precisamente.

Mas esta precisão vem a um sério custo. Fazer um emulador duas vezes mais preciso o tornará umas duas vezes mais lento; dobre esta precisão novamente e você o terá umas quatro vezes mais lento. Ao mesmo tempo, as recompensas por esta precisão diminuem rapidamente, já que muitos jogos parecem e agem "jogáveis" nos mais modestos níveis de precisão do emulador. (A maior parte dos emuladores almeja um "pote de ouro" de 95% de compatibilidade com desempenho optimal.)

Não há nada de errado com emuladores menos precisos mas mais velozes, e tal código pode rodar em hardware com pouco recurso como celulares e dispositivos de jogo portáteis. Estes emuladores são também mais apropriados para uso em laptops onde a vida da bateria é uma preocupação. Mas existe algo a ser dito sobre buscar precisão, também, e isto é o que eu tenho tentado em meu próprio trabalho. É isto o que importa para mim.

2 Fazendo em software

De volta ao fim dos anos 90, Nesticle era facilmente o emulador NES mais famoso, com requisitos de sistema em volta de uns 25MHz. Este desempenho veio a um custo significativo: imagens dos jogos eram hackadas para funcionar neste emulador especificamente. Traduções e hacks feitos por fãs confiavam nestas estranhezas que tornavam os jogos injogáveis tanto em hardware real quanto em outros emuladores, criando um tipo de efeito lock-in que levou muito tempo para ser desfeito. Naquele tempo, as pessoas não se preocupavam em como os jogos originalmente pareciam e jogavam em geral, eles apenas se preocupavam em como eles ficavam neste ambiente artificial e arbitrário.

Nestes dias, os mais dominantes emuladores são Nestopia e Nintendulator, requerendo 800MHz e 1.6GHz respectivamente para alcançar velocidade total. A necessidade de velocidade não é porque estes emuladores não sejam otimizados: é porque eles são uma recriação bem mais fiel do hardware do NES em software.

Agora, compare com o mais antigo emulador de N64, UltraHLE, cujos requisitos de sistema são um fracote sistema Pentium II de 350MHz. Para o observador casual, pode ser bastante espantoso ver Mario 64 requerendo menos poder de processamento que o Mario Bros original.

Minha experiência em emulação é no campo do SNES, trabalhando no emulador bsnes. Eu me apaixonei pelo ideal por detrás do Nestopia, e quis recriar este nível de precisão para o Super Nintendo. Como se mostrou, o mesmo nível de dedicação à precisão elevou os requerimentos no intervalo de 2 a 3GHZ, dependendo do título.

Nestopia deu certo porque seus requerimentos eram pequenos para o seu tempo, porém eu não tenho dúvida que liberá-lo em 1997 teria sido desastroso. Desde que meu emulador definitivamente requer um sistema computacional com mais poder que metade do mercado, eu vi em primeira mão o efeito de especificações altas e a repercussão que isto causa. É mais fácil acusar o programa que admitir que seu computador não é poderoso o suficiente, mas a realidade é que imitar um console de jogos completo em software é um processo intenso.

3 Por Que Precisão Importa

Então se um emulador parece rodar todos os jogos corretamente, por que devemos melhorá-lo? A resposta simples é porque isto melhora as coisas que ainda não conhecemos sobre. Isto é particularmente proeminente em software menos popular.

Como um exemplo, compare a animação da Triforce giratória da abertura de Legend of Zelda nos emuladores ZSNES e bsnes. No anterior, as triforces completarão suas rotações muito rapidamente como resultado de a CPU estar rodando mais de 40% mais rápido que um SNES real. Estes são pequenos detalhes, mas se você tem um olho para precisão, eles podem ser bastante incômodos.

Eu encontrei dúzias de títulos com problemas obscuros. Algumas vezes a emulação mais correta, mais precisa, produz um resultado "errado". O modo attract de Super Bonk na realidade dessincroniza, causando Bonk a ficar travado perto do muro em muitos sistemas reais. E Starfox sofre de sérios problemas de retardo ao longo do jogo. Estes certamente não são atributos desejáveis, mas são corretos de qualquer forma. Nós não arredondamos pi para 3 só porque irracionais são inconvenientes, certo?

Eu não nego as vantagens de tratar jogos clássicos como algo que possa ser melhorado: emuladores de N64 empregam impressionantes pacotes de texturas de alta resolução e 1080p-upscaling, enquanto emuladores de SNES geralmente proveem 2x anti-aliasing para gráficos Mode7 e interpolação cúbica para samples de áudio. Tais jogos emulados tem uma melhor aparência. Enquanto não há nada de errado com isto, isto é contrário ao objetivo de um escrever um emulador preciso fiel ao hardware. Estas técnicas de melhoria tipicamente o tornam mais complicado, até mesmo para permitir a opção de emulação precisa, de fato.

Outra área majoritária onde precisão é um benefício é em trabalhos feitos por fãs, como traduções, ROM Hacking, e desenvolvedores caseiros. Poucos deles têm acesso a odar código em hardware real, então eles geralmente desenvolverão seus softwares usando emuladores. Infelizmente, emuladores voltados à velocidade geralmente ignorarão limitações do hardware. Isto jamais é problema para um jogo desenvolvido comercialmente: uma vez requerido o teste em hardware real, o problema seria rapidamente descoberto e resolvido. Mas se você só pode testar em um emulador específico, tais bugs tendem a persistir.

Eu posso apontar alguns poucos exemplos. As traduções por fãs de Dragon Quest 1&2, Dual Orb 2, Sailor Moon: Another Story e Ys 4 todas sofrem de problema de texto invisível como resultado de escreverem na RAM de vídeo enquanto o processador de vídeo o travou para renderizar a tela. Apenas metade destes títulos foi subsequentemente consertada.

Nós já sabíamos desta limitação do hardware desde 1997, a qual consistia de uma simples linha de código para consertar, mas o emulador mais popular não suporta este comportamento. Como resultado, gtraduções feitas somente para este emulador continuarão a causar problemas e lock-in. Quem iria querer usar um emulador mais preciso que não pudesse rodar um grande número de suas traduções favoritas?

Isto não para por aqui, porém. O hardware original tinha um delay sob a solicitação para a unidade matemática para resultados de multiplicação e divisão. Novamente, qualquer jogo comercial já lançado respeitaria tais delays, mas hacks feitos por fãs levaram a uma música da tradução de Zelda ficar cortada e ao chain-chomp de Super Mario World ficar desordenado.

Ou um emulador pode ignorar o fato que o processador de som escreve 'echo samples' em RAM compartilhada. Não é um problema, até que você conclua hacks que usem echo buffers de tamanhos loucamente irrealísticos, que por sua vez acabam sobrescrevendo todo o programa de áudio em memória, falhando de maneira espetacular. Este pequeno detalhe sozinho tornou dúzias de fases feitas por fãs para Super Mario World injogáveis.


4 META

Table 1: META
Título Original Accuracy takes power: one man's 3GHz quest to build a perfect SNES emulator
Autor byuu
Link Original http://arstechnica.com/gaming/2011/08/accuracy-takes-power-one-mans-3ghz-quest-to-build-a-perfect-snes-emulator/
Link Arquivado http://archive.is/rrZLY

Created: 2018-03-24 sáb 20:04

Validate

Nenhum comentário:

Postar um comentário

Entendendo o Combinador Y [hishamhm]

Entendendo, Finalmente, o Combinador Y - Uma Abordagem de uma Perspectiva Amigável a Programadores Entendendo, Finalmente, o...