Pages

Ads 468x60px

terça-feira, 30 de dezembro de 2014

Quake em um osciloscópio: Um relatório técnico

Quake 1 rendeu em hum osciloscópio Hitachi V-422.
Quake 1 rendeu em hum osciloscópio Hitachi V-422.
Um Resumo de Alguns Problemas Que Eu enfrentei when mexer com Quake Para obtê-lo jogar do Bem em hum osciloscópio.
DEPOIS de ver Alguns Clipes bacanas Como ESSA Coisa de Cogumelos e, claro, Youscope ., Quake Jogar em hum Âmbito parecia Ser Uma Ótima Idéia He Carrapatos Todas As Marcas que me fazem feliz: low-poly, realtime rendida e open source.     

Testando, testando

Primeiro eu escrevi hum simples simulador XY-osciloscópio em Processamento. Youscope rendeu Limpa Nele DEPOIS Que Eu adicionei Alguns fósforo Decadência Simulação Para Que como Linhas Maïs prestados Longas São dimmer. Por enquanto, tudo bem.    

Linhas de renderização

O XY-mode de hum osciloscópio E Bastante simples.  Duas Tensões ESPECIFICAR a posição horizontal e vertical faz o raio, POR ISSO, variando Estes Como Uma funcao do Tempo rápido Você PoDE Formas Desenhar. Basicamente voce Saida de Um Conjunto COM Coordenadas de Pontos 2D não Intervalo [-1, 1], em XY-mode VE-la no osciloscópio e de Bob tio seu.
Desenho de hum segmento de Linha E da interpolação linear Entre Dois Pontos Durante Algum Intervalo de ritmo.  E Importante Manter a Velocidade de Desenho constante Entre Linhas de Diferentes comprimentos, Porque senão voce vai Acabar com as Tendo Linhas Diferentes intensidades.  De a Acordo com Uma grande page POR Jed Margolin  , Não É Realmente Necessário Calcular o comprimento da Linha Pará Manter como intensidades uma distância desde Uma Aproximação Será, Suficiente devido à curva de gama Não Linear que monitorar.  Eu fui com uma Solução correta embora.
Um Fim de alinhar OS Segmentos de Desenho de Linha Que NÃO estao Ligados Entre si, rápido Você Precisa mover o raio rapidamente Em Toda a Tela sem Realmente traçando Uma Linha Visível.  Isto É PODE Ser Feito POR Gastar Mais andamento Desenhando como Linhas visíveis e, em Seguida , o Dimensionamento da intensity fazem um acompanhamento de a Acordo com um Esconder Artefactos indesejados.
Um simulador de XY-scope simples Escrito em Processing.
Um simulador de XY-scope simples Escrito em Processing.
Eu chicoteado ATÉ UM Brinquedo Onde você PODE Desenhar Uma Única Linha com hum rato e Iria ELE Ficar reproduzidos Como Áudio dos alto-falantes.  Entao, me juntei a SAÍDA De Audio fazer Sistema Pará a Linha-in e verificou Que parecia OK nenhum escopo simulador .

Saida

Uso De Audio Pará uma SAÍDA das Duas Tensões E natural, ISSO e O Que tejeez fez em Youscope.
Quake e Um Jogo, Os Jogos São em Tempo Real, de MoDo Que Minhas Rotinas de Geração De Audio Melhor Ser Rápido TAMBÉM.  E POR ISSO Que Eu escolhi ASIO Como o backend de áudio. Primeiro eu passei hum par de Noites de pirataria com o Steinberg ASIO SDK, mas eu Simplesmente NÃO conseguia Obter QUALQUÉR som fóruns DELE. Finalmente eu recorreu Ao Uso de PortAudio Que funcionou Muito Bem Pará As minhas Necessidades.      
A gravação Youscope e Um Arquivo de Áudio de 48 kHz e Parece funcionar Muito Bem na fita.  O Problema Aqui e Que, Aparentemente, uma placa de som Utilizado Nenhum vídeo Não se aplica QUALQUÉR filtragem Passa-baixa Pará uma saida, O Que Muito Incomum .
Todas como Placas de som Que Possuo aplicar hum filtro, POR ISSO, a Largura de banda era Bastante limitada. Na Prática, ISSO Significa Menos Linhas PODEM Ser Tiradas POR Quadro.  Eu pensei Que o Problema poderia Ser Resolvido com taxa Uma de Amostragem maior, ENTÃO eu Peguei 96 kHz, o Maior Número Minha Swissonic EASY suporta USB.  Parece Que ISSO NÃO Faz Diferença QUALQUÉR nenhuma final, Como o Quadro E Quase o MESMO em 44,1 kHz TAMBÉM.

PortAudio sem janelas

A liberação v19 stable de PortAudio NÃO compilou fóruns da Caixa não o Windows.  Eu tiva that removedor Manualmente ksguid.lib de portaudio.vxcproj com hum editor de texto. Instalando o ASIO SDK also necessary foi.     

Primeiros vetorizado

Há Dois Processos Diferentes: o Jogo Quake Darkplaces OE sintetizador de áudio.  Comunicação Entre Processos E Feito atraves de hum tubo WinAPI nomeado.
Meu Quake favorito porta de Origem , Darkplaces TEM UM representante de software excelente abusei Pará Obter Acesso a geometria da cena Projetada. O automóvel foi Corrigida Pará salvar Todo o triângulo clip-Espaço Bordas enviado Pará o desenho, E Depois transferi-los Pará hum Processo sintetizador atraves de hum nomeado pipe.     
This fase de Extracção geometria NÃO afecta tornar normal, e hum tampão de profundidade apropriada E Realmente requerida Pará A Última fase de abate Pará funcionar.
O Gasoduto nenhum lado do Quake E basicamente isso:
  • Pará Cada Objeto Que ESTÁ Sendo Desenhada
    • Pará Cada triângulo
      • Cortar como Bordas Para rastrear Fronteiras
      • se borda E Visível
        • e NÃO Já salvou este Quadro
        • salve-o em Uma Lista
      • Processar o triângulo normalmente, embora a cor Não É utilizada
  • se o Processo de synth pediu Mais geometria, ENTÃO:
    • VerificAR se como Linhas estao na frente de geometria via Amostragem z-buffer
    • apresentar Todas As Linhas visíveis desse Quadro Para o synth via tubulação

Diminuir

Livrar-se da geometria Linha duplicada e Invisível E Importante, Porque o Orçamento ritmo POR Quadro E Apertado e TODO O Tempo gasto em Linhas redundantes E Totalmente desperdiçado esforço.
Tampão Ocultando Linhas ocluido COM cheques de profundidade E Muito Importante.
Tampão Ocultando Linhas ocluido COM cheques de profundidade E Muito Importante.
Posterior rosto regular, Tronco e pré-calculados diminuir visibilidade BSP São Feitas Primeiro.  Eu TAMBÉM limitado a distância sorteio, descartando de Todos os Triangulos cujos Todos Os Vértices were suficientemente longe da câmera.
Para abater como duplicatas hum std :: unordered_set da biblioteca C ++ Padrão E USADO. Os índices das Arestas triangulares São salvos em pares, acondicionados em hum Único uint64_t , o menor índice Ser O Primeiro. O Conjunto ESTÁ desmarcada Entre Cada Objeto, de Modo um MESMA Linha AINDA PODE Ser tirada Duas vezes UO Mais, se OS mesmos Vértices São armazenados em Diferentes malhas. Antes de salvar Uma Linha Para O fim-de-the-frame-apresentar, índices SEUs nd malha São verificadas em Relação Ao Conjunto , e descartados se Já salvou este Quadro.       
Nenhum Linhas finais Quadro de Cada TODOS salvos São verificadas em relaçao a reserva profundidade da cena renderizada.  Se Uma Linha Encontra-se Completamente parágrafo Trás do tampão de profundidade, that PODE Ser descartado com Segurança, Porque ELE NÃO DEVE Ser Visível.  ISSO Acontece se ELE ESTÁ POR Tras De Uma Parede OU algo ASSIM.  estas verificações devem Ser Feitas DEPOIS de Tudo Chamar como chamadas São processadas desde geometria Não É Desenhada em Uma Ordem back-to-frente.  Eu implementei ISSO Como Uma Série de dez UO Mais Amostras de buffer de profundidade Ao Longo da Linha e descartou a Linha se they were Todos Fechados.  ISSO funcionou Muito Bem, mas AINDA deixou Alguns vadios "picos" que espreitam Atrás da esquina, em Alguns Casos.

A synth rasterizer

A Linha de sintetizador De Audio segmento TEM Uma fila de Linhas uma desenhado ser.  Linhas Novas São solicitados a Partir fazer do motor de Quake (Escrevendo hum tubo Inteiro para) nenhum diretor segmento, se ELE Percebe Que ESTÁ COM Falta de material de Desenhar Pará.  O segmento de Áudio consomé sos Dados de Linha em Seu proprio ritmo - Linhas MAIS Longas LeVar Algum ritmo Pará Desenhar.
O áudio e sintetizado Como 96 kHz de 32 bits de Dados de ponto flutuante IEEE Estéreo, mas internamente em PortAudio ELE E convertido em Números inteiros de 32 bits assinado Antes de Ser submetido à SAÍDA ASIO.
Em Media, 1.800 Linhas POR Quadro São transferidos parágrafo O Processo de synth, e se Nenhum novo dado E Recebido nenhum momento em that O Último Quadro Será, mostrado Novamente.

Em Velocidade

No vídeo, cerca de 5-20 Amostras São atribuídas Pará Cada Linha, dependendo do comprimento do segmento.  ISSO Significa that como Frequências emitidas São Muito altos (5 Amostras POR E Período de 19,2 kHz) e Que Parece uma SAÍDA De Audio ESTÁ Sendo baixo filtrada passe resultando em Linhas Bambas tolas.
Aumenta a Qualidade de Imagem Como como Linhas São desenhadas Mais lento.
Aumenta a Qualidade de Imagem Como como Linhas São desenhadas Mais lento.
Síntese De Audio lev Algum Tempo de CPU, mas a Maior Parte E gasta em Quake tampão rasterization de profundidade.  Enchimento Triângulo E lento when Você faz ISSO COM APENAS Uma Linha em hum Processador de laptop modesto :)
A latência Total E aceitável e Curto o Suficiente parágrafo Jogar confortavelmente com teclado e mouse.  Isto É PODE Ser ajustado POR ajustes Parâmetros de Síntese de áudio.

Problemas em Aberto

Para Ser honesto, eu estava Bastante desapontado com o Desempenho Que Eu Sai do Presente. Meramente 1000 Linhas de na Tela Ao MESMO ritmo, geralmente NEM ISSO.  Quaisquer Números Mais altos acabam Sendo representada Como essas altas Frequências uma SAÍDA De Audio NÃO PODE Manter-se .  PODE-se Aumentar o ritmo gasto em Cada Linha, mas ISSO Faz Com que latência Adicional eA Imagem comeca a cintilar.  Aumentar a Velocidade de Desenho permite Que Mais de material POR Quadro, mas a Qualidade degrada rapidamente Como PODE Ser visto na Imagem de comparação mostrado anteriormente.
Ha tambem algumas Misterioso ruido de Baixa Frequência gerados no Processo. Este è claramente Visível Ao girar a vista rapidamente e Toda a Tela se mover na Tela que monitorar osciloscópio. Suponho Que ISSO e Algum chato equalização bass boost acontecendo Dentro da placa de som.    Se rápido Você tem Alguma Idéia o que Faz com Isto É, por favor , envie-me Sobre ISSO .
Mistério Resolvido:  . E uma placa de som barato  . (! Obrigado Antti) Com Outra placa de som USB do Movimento de baixa Frequência ESTÁ desaparecido  Pena Que Não Há Nenhum ASIO drivers apropriados (ASIO4ALL Não É Suficiente) ELE para, Tornando-o inadequado parágrafo OSU em Tempo Real devido à latência Adicional.

Vídeo


Jogando Pela Primeira E1M1 nivel de Quake.

Como Gravações De Audio

Se rápido Você Quiser Assistir a este hardware Proprio em Seu, Aqui estao como Gravações de Uma MESMA Jogada Que esta no vídeo.  Tente hum Rápido Primeiro E Depois hum lento se NÃO Parece Certo.  A Diferença E Muito Pequena.  Eu Não Testar Estes não osciloscópio, espero that they funcionam Bem.
  • e1m1_fast_48khz WAV (36,9 MiB), FLAC (30,4 MiB)    
  • e1m1_slow_48khz WAV (36,9 MiB), FLAC (29,3 MiB)    

Artigo História

  • 29 de dezembro de 2014
    • Explicação ruido de baixa Frequência
    • Gravações De Audio Adicionado
    • Pequenas adições à Parte abate
    • Adicionado Imagem do Simulador

Referências

0 comentários :

Postar um comentário

 
Blogger Templates