Tuve una discusión en el trabajo hoy sobre cómo mejorar el modelado acústico de la sala. Se sugirió que parece haberse realizado muy poco trabajo sobre el tema, pero se han realizado toneladas en gráficos. Se sugirió además que, dado que el sonido y la luz son solo formas de onda, podría ser posible utilizar cosas como el trazado de rayos y las radios para obtener una buena aproximación.
En este punto comencé a pensar en armónicos esféricos para simular este comportamiento. Al mismo tiempo, podría hacer reflexiones de tipo especular, así como dispersión de audio modelada como reflexiones difusas. Como beneficio adicional, también obtendrás obstrucciones que bloquean la transferencia de sonido. El único problema era cómo manejar la atenuación de múltiples frecuencias. Seguramente esto podría modelarse aplicando alguna forma de transformación al espectro de audio (FFT).
De todos modos, alguien sabe de algún documento sobre este tema, especialmente sobre cómo se llevaría a cabo en tiempo real. ¿En caso de que alguien tenga algún consejo o información general útil?
Respuestas:
Si, es una buena idea. Malham ya escribió un artículo sobre esto, que se basó en algunos comentarios de Menzies (¡en 1999!).
También tenga en cuenta la tesis de Nosal MASc sobre el uso de la radiosidad para la acústica.
En cuanto a la iluminación, (que tiene 3 conjuntos de funciones, uno para R, uno para G, uno para B) necesitaría hacer un "conjunto" diferente de funciones SH para cada banda de frecuencia aproximada que desea representar (digamos uno para baja frecuencia, 60Hz-1kHz, una para mid 1kHz-2kHz, otra para alta 10kHz-20kHz, etc. Deje que todo por debajo de 60Hz pase a través de todo (que es más o menos lo que hace el sonido en la vida real)
Sin embargo, necesitaría modelar las capacidades de reflexión acústica de cada material, al igual que los materiales iluminados responden a RGB de manera diferente.
fuente
Suena como un problema interesante, aunque me pregunto cuánta precisión necesitará antes de que la gente simplemente no sepa. De todos modos, esta respuesta se centra en la parte del "tiempo real", pero no conozco ningún documento, ya que no es algo que haya investigado.
Obviamente, si desea calcular esto con precisión en tiempo real, con fuentes de sonido móviles, calcular la reflexión sería más rápido con la tarjeta gráfica. Por ejemplo, si tiene una versión simplificada del mundo ejecutándose simultáneamente, puede usarla para representar "patrones de reflexión" en una textura o mapa de cubos e inferir de esa textura cómo debe emitir el sonido. Los sonidos (o bandas de frecuencia separadas de sonidos) en ese modelo serían fuentes de luz puntual. Con solo reflexiones básicas (1 rebote), es posible que no necesite más precisión de todos modos, mientras que esto debería ser muy rápido, especialmente con geometría simplificada y resolución reducida. Sin embargo, no estoy completamente seguro de si hay problemas de rendimiento con varias escenas en una tarjeta gráfica.
Al profundizar en áreas de las que sé poco, un árbol BSP parece que podría ser útil para las ondas que se doblan en las esquinas, ya que (creo) define los volúmenes y sus conexiones con otros volúmenes.
Dependiendo de la situación, una optimización adicional sería almacenar en caché los resultados de las pruebas anteriores. Por ejemplo, almacenar un mapa de cubos de sonido que podría rotarse según la orientación de los jugadores pero no volver a calcularse por completo, o un par de mapas de cubos entre los que puede interpolar según la posición del jugador.
fuente
Vi una charla en GDC sobre esto hace 6 o 7 años. Posiblemente este: Modelado geométrico de la propagación del sonido en juegos 3D .
Otros del mismo autor:
fuente
Realmente no he intentado esto, pero siempre me he preguntado si un enfoque como los volúmenes de propagación de luz podría usarse para audio. En los volúmenes de propagación de luz, se utiliza una pequeña textura 3d (32x32x32, creo) en la que los rebotes de luz y las oclusiones se simulan por inundación que llena la textura 3d. Como usa armónicos esféricos, también podría hacerlo con audio. Sin embargo, no soy un experto en audio
fuente
Doug James, del programa de gráficos por computadora de Cornell, ha trabajado mucho en el modelado preciso de sonidos en un entorno. Sin embargo, la mayoría de sus documentos manejan casos específicos de generadores de sonido (objetos de capa delgada, llamas, etc.). Probablemente tampoco sean lo suficientemente eficientes para hacer en tiempo real junto con las otras tareas que tiene que hacer su juego.
Sin embargo, puede ser útil leer algunos de ellos. Puede darle ideas sobre cómo proceder y / o modificar sus enfoques para que sean más crudos pero lo suficientemente eficientes para el rendimiento en tiempo real.
Su sitio está aquí:
http://www.cs.cornell.edu/~djames/
De particular interés podrían ser sus papeles "Fluidos armónicos" y "Conchas armónicas".
fuente
También he pensado en esto. Sentí que la preocupación principal (en términos de compensación de realismo / rendimiento) era que espacialmente sus oídos son inferiores a sus ojos, y aceptan con bastante facilidad algo que podría no ser tan realista como lo necesitarían sus ojos. Existe una gran posibilidad de que tratar de modelar perfectamente el sonido en el entorno local sea excesivo: EAX es probablemente "lo suficientemente bueno".
En un entorno cerrado (p. Ej., Quake), primero calcularía dos propiedades sobre cada habitación: 'transferencia' e inmersión:
Transferencia indicaría cómo se vería afectado el sonido al viajar a través de esta sala y lo más probable es que cuente para un ecualizador paramétrico (idealmente agregaría eco / reverberación de cada sala, pero su chip EAX podría no tener tanto ancho de banda). El ecualizador paramétrico también simularía finalmente la atenuación del sonido.
La inmersión se calcularía dividiendo la habitación en nueve cubos (posiblemente, incluso uno podría ser lo suficientemente bueno) y calculando las propiedades del sonido local desde esa perspectiva. Estos parámetros se usarían en el entorno EAX.
Finalmente, cada una de sus habitaciones estaría conectada por un gráfico, donde cada punto del gráfico son los portales que conectan cada habitación.
Cuando se dispara el sonido, se realiza un relleno de inundación (sin una búsqueda A *) y se realiza un seguimiento de la transferencia y la distancia recorrida. Cuando el sonido llegue al reproductor, lo pondrás en cola para reproducirlo en algún momento en el futuro; basado en la distancia recorrida. Puede realizar un seguimiento del número de puntos del gráfico pasados y, finalmente, 'eliminar' el sonido (en otras palabras, un relleno continuo de inundación). Es posible que tenga que usar CUDA para hacer esto, ya que podría limitar la CPU.
Cuando se reproduce un sonido, usaría una API de sonido 3D (OpenAL) y lo colocaría en el portal por el que ingresó, luego descubriría en cuál de los nueve cubos se encuentra actualmente el reproductor y aplicará ese entorno EAX.
Lo bueno aquí es que si su entorno es lo suficientemente complejo, obtendría ecos 'globales' gratuitos y los jugadores percibirían el sonido proveniente de la dirección correcta; y si obtienes el entorno EAX correcto, esperemos que el efecto sea lo suficientemente convincente como para que el cerebro lo acepte.
fuente