Motor de sonido 3D perfecto para la física (o en algún lugar cercano) [cerrado]

11

Soy nuevo en la programación de juegos, aunque tengo algunos años de experiencia en consola / desarrollo web. Mi problema no es tanto que no puedo encontrar lo que estoy buscando, es solo que no tengo la terminología para realizar una búsqueda exitosa.

Estoy buscando un motor de física que tenga un gran enfoque en los sonidos. De hecho, no me importa nada más. Lo que quiero decir se explica mejor con un ejemplo:

Supongamos un juego de tipo en primera persona. Estás mirando al norte, y alguien a tu alrededor te lanza una flauta (no importa lo absurdo de la situación). La flauta gira mientras está en camino, haciendo sonidos a través de sus agujeros. Hay un viento de decir, 5 nudos al sur.

Me imagino que un motor de física será capaz de calcular la trayectoria de la flauta, así como la dirección que toma después de que golpea. Lo que quiero es que el motor de física calcule los sonidos precisos que producirá, desde la perspectiva de cualquier oyente.

¿Existe algún motor de este tipo? Si hay varios, ¿cuál sería mejor para el ejemplo anterior?

Félix Saparelli
fuente

Respuestas:

10

Estás haciendo la pregunta equivocada. Estás cometiendo el error que cometen muchos programadores de juegos nuevos. Los juegos no son simulaciones perfectas, ni siquiera están cerca. Los juegos simulan lo suficiente como para ser divertidos / interesantes. Todo lo demás es falso.

Caso en cuestión:
World of Goo: simula masa, resistencia a la tracción y elasticidad. El resto es falso porque no agrega la sensación del juego. Por ejemplo, no simula la gravedad. Todos los objetos aceleran con fuerza constante. La flotabilidad es falsa. Los globos se levantan con una fuerza constante y las bolas pegajosas bajo el agua también experimentan una fuerza ascendente constante. Todo esto funciona muy bien para el juego. Sin embargo, se rompería si intentaras hacer un ascensor espacial utilizando el motor de física de World of Goo.

Imaginemos un motor de sonido basado en la física casi perfecto. ¿Qué pasa con los efectos ambientales? Es la flauta en una cueva o en un campo. ¿El motor proporciona un conjunto predefinido de entornos (¿cuántos?) O lo calcula calculando la topografía física real (sí, claro)? ¿El jugador tiene orejas direccionales (ala humana) o solo agujeros para las orejas (ala delfín o alienígena) o multidireccionales como un animal? ¿Está caliente el aire? Qué húmedo es Esta lista puede salirse rápidamente de control.

Ahora supongamos por un momento que existió tal verdadero motor de sonido de física. ¿Realmente quieres usarlo para hacer un juego? ¿Cuánto tiempo te llevaría definir el sonido de la flauta volando por el aire? ¿Cuántos parámetros tiene que obtener correctamente (100?).

Lo que debería haber preguntado es:
¿cómo puedo simular el sonido de una flauta cuando pasa volando por el reproductor?

OpenAL puede hacer lo que quieras.

  • Oyente direccional
  • Fuentes de sonido direccionales
  • velocidades de fuente y efectos doppler.

Sugeriría tener un efecto de sonido repetitivo de una flauta giratoria. Ingrese la posición del jugador y la posición / velocidad de la flauta. Omita las cosas direccionales por ahora.
Puede grabar el sonido que proviene de cada extremo de una flauta a medida que pasa el aire y hacer que la flauta use dos fuentes de sonido. Pero dudo que valga la pena el esfuerzo a menos que toda la mecánica del juego girara en torno a flautas arrojadas y giratorias.

código_deft
fuente
Bueno, toda la idea del juego gira en torno a objetos en movimiento que producen sonido. El ejemplo dado es excesivamente complejo a propósito, sin embargo, la idea del juego involucra objetos que suenan de manera realista en movimiento.
Félix Saparelli
La mayoría de los parámetros estarían realmente controlados: considere una habitación cúbica cerrada (sellada) con paredes de un material en particular (cuyas propiedades defino), la temperatura del aire, la presión, la humedad, etc. están controladas. Las orejas son humanas. Ni siquiera necesito considerar el resto del cuerpo. De hecho, en lugar de la lista negra, puedo especificar exactamente qué parámetros uso y definir (constante) todo el resto. Es mi mundo (virtual): lo defino como quiero que sea.
Félix Saparelli
Mi punto fue que la cantidad de esfuerzo que tal motor de audio requeriría en el caso general no merece la pena. Especialmente cuando los ingenieros de sonido talentosos pueden fingir de manera convincente cualquier efecto que necesite. Doppler está incorporado. Echo, amortiguación, etc., todo se puede hacer con filtrado.
deft_code
8

¿Quieres modelado físico? Pruebe el kit de herramientas de síntesis:

https://ccrma.stanford.edu/software/stk/classstk_1_1Flute.html .

Tendrá que escribir el código de pegamento que establece la velocidad / amplitud del viento usted mismo.

Lo que estás pidiendo realmente no se ha inventado todavía. Sin embargo, nos estamos acercando, mira esto, lo vi el otro día:

http://www.physorg.com/news198351307.html

cerveza casera
fuente
Cosas interesantes. Esto es a lo que me refiero, y que aún no se haya hecho no me obstaculiza. No planeo comenzar un trabajo real (no conceptual) antes de 1-2 años.
Félix Saparelli
4

Dudo que encuentres un motor de audio físico. Lo más probable es usar cualquier motor de física que le guste (como Bullet ) y usar OpenAL para el sonido. Calcule la posición de la flauta y úsela como la posición de la Fuente.

El pato comunista
fuente
Sin embargo, quiero un poco más que eso.
Félix Saparelli
1
¿Qué más quieres? Con mi sugerencia, puede hacer que la posición del sonido cambie cada fotograma. Creo que me estoy perdiendo algo.
El pato comunista
66
Creo que quiere decir simular las ondas de aire y otras vibraciones para generar los sonidos. Y claro, eso es posible, pero ninguna computadora (excepto quizás algunos grupos de supercomputadoras) podría calcular eso para cualquier espacio de tamaño útil en tiempo real, por lo que no, si quiere decir que no existe tal cosa (ni hay una necesidad real, use el motor de física y leer los datos de colisión para reproducir una muestra adecuada está "lo suficientemente cerca").
Elva
3
Si quieres avanzar así, no solo hay a) Como dijo Yourdoom, no hay forma de que una computadora normal pueda hacerlo, yb) nadie podría notar la diferencia.
El pato comunista
3
Todavía hay mucho que hacen los juegos modernos (y API de nivel superior como FMOD) que OpenAL no puede hacer, o al menos no hace, como los efectores basados ​​en el volumen (geométricos), que también pueden conectarse a portales para simular el audio que pasa por varias habitaciones. No es común, pero está hecho y puede notar la diferencia.
4

Phya es una biblioteca de síntesis de audio de colisión basada en "muestreo físico" que puede ser manejada por un motor de física de juegos. (Se usó la viñeta en los ejemplos)

http://www.zenprobe.com/phya/

No estoy seguro de cuál es la última, la última actualización del sitio se realizó hace un año.

No está tan orientado a modelar la resonancia del aire en un volumen, pero quizás podría ser un buen ejemplo de cómo conducir la síntesis de audio en tiempo real desde la física.

Creo que esto no tiene por qué ser una empresa imposiblemente costosa. El problema planteado es completamente determinista y debería ser posible en el hardware moderno. (al menos a un nivel adecuado para un producto de entretenimiento / aprendizaje).

La pregunta a responder es ¿qué tan completo necesita simular y cuánto puede fingir? Para el audio, solo tener algún tipo de modulación de sonido en tiempo real de una manera razonablemente convincente te da mucho sin tener que modelar las vibraciones acústicas hasta la molécula.

Quizás esto ayude. Buena pregunta, por cierto.

-j

Jason Cobb
fuente
Puedo fingir mucho Simplemente ... mucho menos que los videojuegos contemporáneos. Cuál es el punto: no estoy creando un videojuego, sino un juego de audio. Un poco
Félix Saparelli
3

Realmente hacer una simulación precisa de la física involucrada aquí sería sustancialmente más complejo (y computacionalmente costoso) que un sistema de física común y corriente como Havok o Bullet. Un sistema de física tradicional está optimizado para cuerpos rígidos y cuerpos blandos, los cuales están limitados en su complejidad de malla por razones de velocidad.

El sonido, por otro lado, es una propagación de ondas a través del aire, y las frecuencias generadas por algo como su ejemplo dependen de toneladas y toneladas de propiedades. ¿De qué material está hecho? ¿Qué modelo matemático deberíamos usar para las partículas de aire que interactúan con ese material? Si tiene forma de tubo, ¿cuáles son las dimensiones del tubo? (Esto determina la frecuencia de resonancia). Etc., etc.

Además de todo esto, debe ejecutar una simulación de partículas bastante sofisticada para modelar el aire, así como extraer ondas de movimiento de partículas que son esencialmente las ondas de sonido que golpean los tímpanos. Y ni siquiera mencionemos los tímpanos, porque la resonancia de las ondas en su canal auditivo también afecta lo que escucha.

En general, esto es demasiada simulación para un juego actual, especialmente si tienes alguna esperanza de una velocidad de cuadros interactiva. Como señaló deft_code, los juegos rara vez son simulaciones precisas, sino más bien falsificaciones gloriosas. La mejor manera de abordar esto probablemente sería comenzar con un gran conjunto de muestras de sonido y comenzar a ejecutar las cosas a través de un DSP hasta que tenga una idea de cómo puede afectar el efecto de esos sonidos. Los DSP son definitivamente lo suficientemente rápidos para juegos en tiempo real, y si el sonido sería un gran componente, entonces tiene sentido dedicar una buena parte de su tiempo de cuadros al procesamiento de sonido.

tl; dr: La simulación precisa probablemente sea la pregunta en los próximos años. Grandes juegos lo falsifican. Con un conjunto de muestras lo suficientemente grande y suficientes ajustes DSP, probablemente también pueda simularlo.

Bob Somers
fuente
2

Mira nuestro enfoque.

http://dsp.agh.edu.pl/en:research:rayav

La biblioteca desarrollada utiliza el trazado de haces para proporcionar al usuario una auralización de audio realista. Todos los efectos de audio se calculan en función de la geometría real de un nivel de juego dado, así como de sus propiedades acústicas (materiales acústicos, atenuación de aire). El sonido cambia dinámicamente junto con el movimiento del personaje del juego y las fuentes de sonido. El algoritmo de creación de ruta de sonido admite fenómenos como reflexiones especulares, reflexiones difusas y difracción de bordes, mientras que el procesamiento de audio admite el filtrado de señales (descarga de aire de modelado, impacto de reflexión / difracción, etc.), modelado de efectos Doppler y efectos espaciales. Finalmente, el sonido direccional se implementa utilizando HRTF por cada ruta de sonido.

NoMásMrNiceGaius
fuente
0

Me doy cuenta de que esta es una vieja pregunta, pero las cosas han progresado en los últimos años, y lo que está describiendo se está volviendo cada vez más factible, computacionalmente.

Se utilizan herramientas como Synthesis Toolkit para responder el siguiente tipo de pregunta: "Mi motor de física me dijo que la flauta está vibrando de tal y tal manera. ¿Qué nota produce eso?"

Sin embargo, hay otra pregunta importante que debe responderse: "¿Cómo suena esta nota desde la posición del oyente?"

Es un error común pensar que las API de audio como OpenAL se encargan de esto. De hecho, todo lo que hacen es lo que se llama audio posicional . No modelan la propagación del sonido: las interacciones entre las ondas de sonido y el medio ambiente. La propagación del sonido implica responder preguntas como:

  • ¿Es esta habitación lo suficientemente grande como para que haya una reverberación notable?
  • ¿O los muebles de la habitación absorben la mayor parte del sonido?
  • Al estar de pie al aire libre, ¿debo escuchar ecos de una colina distante? ¿Un edificio cercano?
  • ¿El sonido se disipa a largas distancias?
  • ¿La fuente de sonido está ocluida (oculta) del oyente?
  • Si es así, ¿hay rutas alternativas que las ondas de sonido puedan usar para llegar al oyente? ¿Quizás por debajo de una puerta cerrada, en la esquina de un pasillo o por un respiradero?

Phonon es un motor de audio-física que responde a estas preguntas. (Divulgación completa: estoy involucrado en el desarrollo de Phonon.) Con Phonon, el usuario necesita especificar un conjunto muy pequeño de parámetros (coeficientes de absorción y dispersión). Luego, Phonon realiza el cálculo suficiente para poder recrear de manera convincente los efectos de propagación del sonido para el oyente.

Phonon está actualmente disponible como un complemento para Unity. Además de PC y dispositivos móviles, Phonon también puede ejecutarse en plataformas de realidad virtual como Oculus Rift, y también hace una diferencia notable.

¡Espero que esto ayude!

Lakulish Antani
fuente
0

Al leer su pregunta, puedo traducirla de dos maneras.

  1. ¿Existe un motor que pueda crear sonidos basados ​​en simulaciones físicas? ¿Como el aire que sopla sobre una caña o un martillo golpeando una cuerda?

En los juegos? No es que yo haya escuchado.

  1. ¿Existe un motor que reproduce sonidos preexistentes pero los modifica en función de la información física, como la distancia desde el micrófono, para simular una "experiencia de sonido envolvente"?

¡Si! se llaman "motores de sonido 3D", uno conocido es OpenAL .

Nathan Goings
fuente