Utilizzo di armoniche sferiche per creare complessi scenari sonori


16

Oggi stavo discutendo su come migliorare la modellazione acustica della stanza. È stato suggerito che sembra che sia stato fatto pochissimo lavoro sull'argomento, ma tonnellate sono state fatte in grafica. È stato inoltre suggerito che, poiché il suono e la luce sono solo forme d'onda, è possibile utilizzare cose come il ray tracing e le radio per ottenere una buona approssimazione.

A questo punto ho iniziato a pensare alle armoniche sferiche per simulare questo comportamento. È possibile eseguire contemporaneamente riflessi speculari e scattering audio modellato come riflessi diffusi. Come bonus otterrai anche ostacoli che bloccano il trasferimento del suono. L'unico problema era come gestire l'attenuazione di più frequenze. Sicuramente questo potrebbe essere modellato applicando una qualche forma di trasformazione allo spettro audio (FFT).

Ad ogni modo, qualcuno è a conoscenza di documenti su questo argomento, specialmente su come sarebbe eseguito in tempo reale. In mancanza del fatto che qualcuno abbia ricevuto consigli o utili informazioni generali?


1
Questo mi ricorda il gioco indie Devil's Tuning Fork: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html (guarda il video per sentirti bene!)
Ricket

Risposte:


5

Sì, è una buona idea. Malham ha già scritto un articolo su questo, basato su alcuni commenti di Menzies (nel 1999!).

Nota anche la tesi MASc di Nosal che parla dell'utilizzo della radiosità per l'acustica.

Per quanto riguarda l'illuminazione (che fa 3 serie di funzioni, una per R, una per G, una per B) dovresti fare un "set" diverso di funzioni SH per ogni banda di frequenza approssimativa che vuoi rappresentare (dicine una per bassa frequenza, 60Hz-1kHz, uno per metà 1kHz-2kHz, uno per alta 10kHz-20kHz, ecc.). Lascia che tutto sotto 60Hz passi attraverso tutto (che è praticamente ciò che il suono fa nella vita reale)

Dovresti modellare le capacità di riflessione acustica di ciascun materiale, tuttavia, proprio come i materiali illuminati rispondono in modo diverso a RGB.


3

Sembra un problema interessante, anche se mi chiedo quanta precisione avrai bisogno prima che la gente non riesca a dirlo. Ad ogni modo, questa risposta si concentra sulla parte "in tempo reale", ma non conosco nessun documento in quanto non è qualcosa su cui ho indagato.

Ovviamente se vuoi calcolarlo accuratamente in tempo reale, con sorgenti sonore mobili, calcolare la riflessione sarebbe più veloce usando la scheda grafica. Ad esempio, se si dispone di una versione semplificata del mondo in esecuzione contemporaneamente, è possibile utilizzarla per eseguire il rendering di "schemi di riflessione" su una trama o cubemap e dedurre da quella trama come si dovrebbe produrre il suono. I suoni (o bande di frequenza separate di suoni) in quel modello sarebbero fonti di luce puntiforme. Con solo riflessi di base (1 rimbalzo) potresti scoprire che non hai bisogno di maggiore precisione, mentre questo dovrebbe essere molto veloce soprattutto con geometria semplificata e risoluzione ridotta. Tuttavia, non sono del tutto sicuro se ci sono problemi di prestazioni con più scene su una scheda grafica.

Andando più avanti nelle aree che conosco poco, un albero BSP sembra essere utile per le onde che si piegano intorno agli angoli poiché (penso) definisce i volumi e le loro connessioni con altri volumi.

A seconda della situazione, un'ulteriore ottimizzazione sarebbe quella di memorizzare nella cache i risultati dei test precedenti. Ad esempio, memorizzando una cubemap di suono che potrebbe essere ruotata in base all'orientamento del giocatore ma non ricalcolata interamente, o un paio di cubemap che è possibile interpolare in base alla posizione del giocatore.


Mi colpisce però che si possano ottenere riflessioni speculari e diffuse, nonché gli "angoli arrotondati" e gli occludenti, praticamente, praticamente usando le armoniche sferiche in qualche modo ...
Goz,

Bene, dopo aver effettivamente iniziato a capire cosa sono le armoniche sferiche e come si applicano, la sezione della scheda grafica (paragrafo 2) è abbastanza irrilevante. Il bit su un albero BSP può essere ancora utile, supponendo che tu abbia un gioco abbastanza di terza persona / prima persona, poiché è generalmente una geometria semplificata per un livello. (simile al "grafico adiacenza cellulare" nel documento AShelly collegato). Non ricalcolare ogni frame potrebbe anche salvare un po 'di elaborazione.
Toeofdoom,


2

In realtà non l'ho provato, ma mi sono sempre chiesto se un approccio come i volumi di propagazione della luce potesse essere utilizzato per l'audio. Nei volumi di propagazione della luce viene utilizzata una piccola trama 3d (32x32x32 credo) in cui la luce rimbalza e le occlusioni sono simulate da un'inondazione che riempie la trama 3d. Poiché utilizza armoniche sferiche, potrebbe essere in grado di farlo anche con l'audio. Non sono un esperto di audio, tuttavia


2

Il programma di computer grafica di Doug James of Cornell ha lavorato molto nella modellazione accurata dei suoni in un ambiente. Tuttavia, la maggior parte dei suoi articoli tratta casi specifici di generatori di suoni (oggetti a guscio sottile, fiamme, ecc.). Probabilmente non sono abbastanza efficienti da svolgere in tempo reale insieme agli altri compiti che il gioco deve svolgere.

Tuttavia, potrebbe essere utile leggere alcuni di essi. Potrebbe darti idee su come procedere e / o modificare i suoi approcci per essere più rozzi ma abbastanza efficienti per le prestazioni in tempo reale.

Il suo sito è qui:

http://www.cs.cornell.edu/~djames/

Di particolare interesse potrebbero essere i suoi documenti "Fluidi armonici" e "Conchiglie armoniche".


1

Ho anche pensato a questo. Ho sentito la preoccupazione principale (in termini di realismo / compromesso delle prestazioni) era che spazialmente le tue orecchie sono inferiori ai tuoi occhi - e accettano abbastanza facilmente qualcosa che potrebbe non essere realistico quanto i tuoi occhi avrebbero bisogno. Esistono ottime possibilità che provare a modellare perfettamente il suono nell'ambiente locale sia eccessivo: EAX è probabilmente "abbastanza buono".

In un ambiente chiuso (ad es. Quake) calcolerei innanzitutto due proprietà per ogni stanza: "transferrance" e immersione:

Il transferrance indicherebbe come il suono verrebbe influenzato viaggiando attraverso questa stanza e conterebbe molto probabilmente verso un EQ parametrico (idealmente aggiungeresti eco / riverbero da ogni stanza, ma il tuo chip EAX potrebbe non avere così tanta larghezza di banda). L'EQ parametrico simulerebbe infine anche l'attenuazione del suono.

L'immersione sarebbe calcolata dividendo la stanza in nove cubi (forse, anche solo uno potrebbe essere abbastanza buono) e calcolando le proprietà del suono locale da quella prospettiva. Questi parametri verrebbero utilizzati nell'ambiente EAX.

Infine, ciascuna delle tue stanze verrebbe connessa da un grafico, in cui ogni punto nel grafico sono i portali che collegano ogni stanza.

Quando si attiva il suono, esegui un riempimento di piena (nessuna ricerca A *) e tieni traccia del trasferimento e della distanza percorsa. Quando il suono raggiunge il lettore, lo metti in coda per suonare ad un certo punto in futuro; in base alla distanza percorsa. È possibile tenere traccia del numero di punti del grafico passati ed eventualmente "abbattere" il suono (in altre parole, un riempimento continuo). Potrebbe essere necessario utilizzare CUDA per fare ciò in quanto potrebbe essere associato alla CPU.

Quando viene riprodotto un suono, si utilizza un'API 3D del suono (OpenAL) e la si colloca nel portale in cui è entrato, quindi si scoprirà in quale dei nove cubi si trova il lettore e si applica quell'ambiente EAX.

La cosa bella qui è che se il tuo ambiente è sufficientemente complesso otterresti echi 'globali' gratuiti e i giocatori percepiranno il suono proveniente dalla giusta direzione; e se si ottiene l'ambiente EAX corretto si spera che l'effetto sarebbe abbastanza convincente da essere accettato dal cervello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.