Eu estava discutindo hoje sobre como melhorar a modelagem acústica da sala. Foi sugerido que muito pouco trabalho parece ter sido feito sobre o assunto, mas toneladas foram feitas em gráficos. Foi sugerido ainda que, como o som e a luz são apenas formas de onda, pode ser possível usar coisas como rastreamento de raios e rádios para obter uma boa aproximação.
Nesse ponto, comecei a pensar em harmônicos esféricos para simular esse comportamento. Você pode simultaneamente fazer reflexões de estilo especular e espalhamento de áudio modelado como reflexões difusas. Como bônus, você também terá obstruções bloqueando a transferência de som. O único problema era como lidar com a atenuação de múltiplas frequências. Certamente, isso pode ser modelado através da aplicação de alguma forma de transformação no espectro de áudio (FFT).
De qualquer forma, alguém conhece algum artigo sobre esse assunto, especialmente sobre como ele seria executado em tempo real. Na falta de alguém ter algum conselho ou informação geral útil?
Respostas:
Sim, é uma boa ideia. Malham já escreveu um artigo sobre isso, baseado em alguns comentários de Menzies (em 1999!).
Observe também a tese do MASC de Nosal discutindo o uso da radiosidade para acústica.
Quanto à iluminação (que executa três conjuntos de funções, um para R, um para G e um para B), seria necessário fazer um "conjunto" diferente de funções SH para cada faixa de frequência aproximada que você deseja representar (digamos, um para baixa frequência, 60Hz-1kHz, uma para 1kHz-2kHz média, uma para 10kHz-20kHz alta, etc.). Deixe tudo abaixo de 60Hz passar por tudo (que é praticamente o que o som faz na vida real)
Você precisaria modelar os recursos de reflexão acústica de cada material, no entanto, assim como os materiais iluminados respondem ao RGB de maneira diferente.
fonte
Parece um problema interessante, embora eu esteja me perguntando quanta precisão você precisará antes que as pessoas simplesmente não consigam dizer. De qualquer forma, essa resposta se concentra na parte "tempo real", mas não conheço nenhum artigo, pois não é algo que investiguei.
Obviamente, se você deseja calcular isso com precisão em tempo real, com fontes de som móveis, o cálculo da reflexão seria mais rápido usando a placa de vídeo. Por exemplo, se você tiver uma versão simplificada do mundo em execução simultaneamente, poderá usá-la para renderizar "padrões de reflexão" em uma textura ou mapa de cubo e inferir a partir dessa textura como você deve emitir o som. Os sons (ou faixas de frequência separadas dos sons) nesse modelo seriam fontes pontuais de luz. Com apenas reflexões básicas (1 salto), você pode achar que não precisa de mais precisão de qualquer maneira, embora isso deva ser muito rápido, especialmente com geometria simplificada e resolução reduzida. Não tenho certeza se há problemas de desempenho com várias cenas em uma placa gráfica.
Indo mais longe em áreas que pouco conheço, uma árvore BSP parece ser útil para ondas que se dobram nos cantos, já que (penso) define volumes e suas conexões com outros volumes.
Dependendo da situação, uma otimização adicional seria armazenar em cache os resultados dos testes acima. Por exemplo, o armazenamento de um mapa cúbico de som que pode ser rotacionado com base na orientação dos jogadores, mas não recalculado por completo, ou alguns mapas de cubos entre os quais você pode interpolar com base na posição do jogador.
fonte
Vi uma palestra na GDC nesses 6 ou 7 anos atrás. Possivelmente este: Modelagem Geométrica da Propagação de Som em Jogos 3D .
Outros do mesmo autor:
fonte
Na verdade, eu nunca tentei isso, mas sempre me perguntei se uma abordagem como volumes de propagação de luz poderia ser usada para áudio. Nos volumes de propagação de luz, é usada uma pequena textura 3d (32x32x32, acredito), na qual saltos e oclusões de luz são simulados pela inundação preenchendo a textura 3d. Como ele usa harmônicos esféricos, também pode ser feito com áudio. Eu não sou um especialista em áudio no entanto
fonte
O programa de computação gráfica de Doug James, da Cornell, fez muito trabalho na modelagem precisa de sons em um ambiente. No entanto, a maioria de seus trabalhos lida com casos específicos de geradores de som (objetos de casca fina, chamas etc.) Eles provavelmente também não são eficientes o suficiente para serem executados em tempo real, juntamente com as outras tarefas que o jogo deve realizar.
No entanto, pode ser útil ler algumas delas. Pode lhe dar idéias sobre como proceder e / ou modificar suas abordagens para serem mais cruéis, mas eficientes o suficiente para desempenho em tempo real.
O site dele está aqui:
http://www.cs.cornell.edu/~djames/
De particular interesse podem ser seus documentos "Fluidos Harmônicos" e "Cascas Harmônicas".
fonte
Também pensei sobre isso. Senti que a principal preocupação (em termos de troca de realismo / desempenho) era que espacialmente seus ouvidos eram inferiores aos seus olhos - e aceitava facilmente algo que talvez não fosse tão realista quanto seus olhos precisariam. Há uma chance muito boa de que tentar modelar perfeitamente o som no ambiente local seja um exagero - o EAX provavelmente é "bom o suficiente".
Em um ambiente fechado (por exemplo, Quake), primeiramente eu calcularia duas propriedades sobre cada quarto: 'transferrance' e imersão:
A transferência indicaria como o som seria afetado pela viagem por esta sala e provavelmente contaria para um EQ paramétrico (idealmente, você adicionaria eco / reverb de cada sala, mas seu chip EAX pode não ter tanta largura de banda). O EQ paramétrico também simularia a atenuação do som.
A imersão seria calculada dividindo a sala em nove cubos (possivelmente apenas um poderia ser bom o suficiente) e calculando as propriedades do som local a partir dessa perspectiva. Esses parâmetros seriam usados no ambiente EAX.
Finalmente, cada uma das suas salas seria conectada por um gráfico, onde cada ponto no gráfico são os portais que conectam cada sala.
Quando o som é acionado, você faz um preenchimento de inundação (sem uma pesquisa A *) e acompanha a transferência e a distância percorrida. Quando o som chega ao player, você o colocaria na fila para tocar em algum momento no futuro; com base na distância percorrida. Você pode acompanhar o número de pontos do gráfico passados e, eventualmente, 'selecionar' o som (em outras palavras, um preenchimento contínuo). Pode ser necessário usar o CUDA para fazer isso, pois isso pode vincular a CPU.
Quando um som é emitido, você usa uma API de som 3D (OpenAL) para colocá-lo no portal em que entrou, em seguida, você descobre em qual dos nove cubos o player está atualmente e aplica esse ambiente EAX.
O interessante aqui é que, se seu ambiente for suficientemente complexo, você obterá ecos 'globais' gratuitos e os jogadores perceberão o som vindo da direção certa; e se você acertar o ambiente EAX, espero que o efeito seja suficientemente convincente para que o cérebro o aceite.
fonte