Mit sphärischen Harmonischen komplexe Klanglandschaften erzeugen

16

Ich hatte heute eine Diskussion bei der Arbeit darüber, wie die raumakustische Modellierung verbessert werden kann. Es wurde vermutet, dass anscheinend nur sehr wenige Arbeiten zu diesem Thema durchgeführt wurden, während Tonnen in Grafiken verarbeitet wurden. Es wurde weiter vermutet, dass Schall und Licht nur Wellenformen sind und es daher möglich sein könnte, Dinge wie Raytracing und Radios zu verwenden, um eine gute Annäherung zu erhalten.

Zu diesem Zeitpunkt begann ich über sphärische Harmonische nachzudenken, um dieses Verhalten zu simulieren. Sie können gleichzeitig spiegelnde Reflexionen sowie als diffuse Reflexionen modellierte Audiostreuung durchführen. Als Bonus würden Sie auch Hindernisse bekommen, die die Schallübertragung blockieren. Das einzige Problem war, wie man mit der Dämpfung mehrerer Frequenzen umgeht. Sicherlich könnte dies durch Anwenden einer Form der Transformation auf das Audiospektrum (FFT) modelliert werden.

Jedenfalls kennt jemand irgendwelche Artikel zu diesem Thema, insbesondere darüber, wie es in Echtzeit durchgeführt werden würde. Gelingt es Ihnen nicht, dass jemand einen Rat oder nützliche allgemeine Informationen erhalten hat?

Goz
quelle
1
Dies erinnert mich an das Indie-Spiel Devil's Tuning Fork: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html ( Sehen Sie sich das Video an, um ein gutes Gefühl dafür zu bekommen!)
Ricket

Antworten:

5

Ja, das ist eine gute Idee. Malham hat bereits einen Artikel darüber geschrieben, der auf einigen Kommentaren von Menzies (bereits 1999!) Basierte .

Beachten Sie auch die MASc-Arbeit von Nosal, in der es um die Verwendung von Radiosity für die Akustik geht.

In Bezug auf die Beleuchtung (die drei Funktionssätze ausführt, einen für R, einen für G, einen für B) müssten Sie für jedes grobe Frequenzband, das Sie darstellen möchten, einen anderen "Satz" von SH - Funktionen ausführen (sagen wir einen für niedrige Frequenz, 60Hz-1kHz, eine für mittlere 1kHz-2kHz, eine für hohe 10kHz-20kHz usw.). Lass alles unter 60Hz durch alles passieren (das ist so ziemlich das, was der Klang im wirklichen Leben tut)

Sie müssten jedoch die akustischen Reflexionsfähigkeiten jedes Materials modellieren, genauso wie beleuchtete Materialien auf RGB unterschiedlich reagieren.

Bobobobo
quelle
3

Es klingt nach einem interessanten Problem, obwohl ich mich frage, wie viel Genauigkeit Sie brauchen werden, bevor die Leute es einfach nicht sagen können. Wie auch immer, diese Antwort konzentriert sich auf den "Echtzeit" -Teil, aber ich kenne keine Papiere, da es nicht etwas ist, was ich untersucht habe.

Wenn Sie dies mit mobilen Schallquellen in Echtzeit genau berechnen möchten, ist die Berechnung der Reflexion mit der Grafikkarte am schnellsten. Wenn beispielsweise eine vereinfachte Version der Welt gleichzeitig ausgeführt wird, können Sie damit "Reflexionsmuster" in eine Textur oder Cubemap rendern und aus dieser Textur ableiten, wie Sie den Sound ausgeben sollen. Töne (oder separate Frequenzbänder von Tönen) in diesem Modell wären Punktlichtquellen. Mit nur einfachen Reflexionen (1 Bounce) stellen Sie möglicherweise fest, dass Sie sowieso keine höhere Genauigkeit benötigen, während dies besonders bei vereinfachter Geometrie und reduzierter Auflösung sehr schnell gehen sollte. Ich bin mir jedoch nicht ganz sicher, ob es bei mehreren Szenen auf einer Grafikkarte Leistungsprobleme gibt.

Wenn ich weiter in Bereiche vordrecke, von denen ich wenig weiß, scheint ein BSP-Baum nützlich für Wellen zu sein, die sich um Ecken biegen, da er (glaube ich) Volumina und deren Verbindungen zu anderen Volumina definiert.

Abhängig von der Situation wäre eine weitere Optimierung, die Ergebnisse der obigen Tests zwischenzuspeichern. Beispiel: Speichern einer Cubemap mit Sounds, die basierend auf der Ausrichtung des Players gedreht, aber nicht vollständig neu berechnet werden kann, oder einiger Cubemaps, zwischen denen Sie basierend auf der Position des Players interpolieren können.

Toeofdoom
quelle
Es fällt mir allerdings auf, dass Sie spiegelnde und diffuse Reflexionen sowie die "Biegung um die Ecken" und die Okkluder erhalten können, die in gewisser Weise mit sphärischen Harmonischen so gut wie kostenlos sind ...
Goz
Okay, nachdem Sie tatsächlich verstanden haben, was sphärische Harmonische sind und wie sie angewendet werden, ist der Grafikkartenabschnitt (Absatz 2) ziemlich irrelevant. Das bisschen über einen BSP-Baum kann immer noch nützlich sein, vorausgesetzt, Sie haben ein ziemlich 3rd-Person- / 1st-Person-Spiel, da es sich im Allgemeinen um eine vereinfachte Geometrie für ein Level handelt. (ähnlich dem "Cell Adjacency Graph" in der Veröffentlichung AShelly Linked). Das Nicht-Neuberechnen jedes Frames kann auch einige Verarbeitungsschritte einsparen.
Toeofdoom
2

Das habe ich eigentlich nicht ausprobiert, aber ich habe mich immer gefragt, ob ein Ansatz wie die Lichtausbreitung für Audio verwendet werden könnte. In Lichtausbreitungsvolumina wird eine kleine 3D-Textur verwendet (32 x 32 x 32, glaube ich), in der Lichtreflexe und Okklusionen durch Fluten der 3D-Textur simuliert werden. Da es sphärische Harmonische verwendet, ist dies möglicherweise auch mit Audio möglich. Ich bin jedoch kein Audio-Experte

Sander van Rossen
quelle
2

Doug James von Cornells Computergrafikprogramm hat viel Arbeit in der genauen Modellierung von Geräuschen in einer Umgebung geleistet. Die meisten seiner Artikel behandeln jedoch spezielle Fälle von Klangerzeugern (dünne Muschelobjekte, Flammen usw.). Sie sind wahrscheinlich auch nicht effizient genug, um sie in Echtzeit zusammen mit den anderen Aufgaben zu erledigen, die Ihr Spiel zu erledigen hat.

Es kann jedoch hilfreich sein, einige davon durchzulesen. Es kann Ihnen Anregungen geben, wie Sie vorgehen und / oder seine Ansätze ändern können, um gröber, aber effizient genug für Echtzeitleistung zu sein.

Seine Seite ist hier:

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

Von besonderem Interesse könnten seine Arbeiten "Harmonic Fluids" und "Harmonic Shells" sein.

Coderunner
quelle
1

Ich habe auch darüber nachgedacht. Ich war der Ansicht, dass das Hauptanliegen (in Bezug auf Realismus / Leistungskompromiss) darin bestand, dass Ihre Ohren räumlich schlechter sind als Ihre Augen - und dass Sie leicht etwas akzeptieren, das möglicherweise nicht so realistisch ist, wie es Ihre Augen benötigen würden. Es ist sehr wahrscheinlich, dass der Versuch, den Sound in der lokalen Umgebung perfekt zu modellieren, übertrieben ist - EAX ist wahrscheinlich 'gut genug'.

In einer geschlossenen Umgebung (zB Quake) würde ich zunächst zwei Eigenschaften für jeden Raum berechnen: 'Transferrance' und Immersion:

Die Übertragungsrate gibt an, wie sich der Klang auf das Durchlaufen dieses Raums auswirkt, und wird höchstwahrscheinlich auf einen parametrischen EQ angerechnet (idealerweise würden Sie Echo / Hall aus jedem Raum hinzufügen, aber Ihr EAX-Chip verfügt möglicherweise nicht über so viel Bandbreite). Der parametrische EQ würde letztendlich auch die Schalldämpfung simulieren.

Das Eintauchen wird berechnet, indem der Raum in neun Würfel aufgeteilt wird (möglicherweise ist auch nur einer gut genug) und die lokalen Klangeigenschaften aus dieser Perspektive berechnet werden. Diese Parameter würden in der EAX-Umgebung verwendet.

Schließlich würde jeder Ihrer Räume durch eine Grafik verbunden, wobei jeder Punkt in der Grafik die Portale sind, die jeden Raum verbinden.

Wenn der Ton auslöst, würden Sie eine Überflutung durchführen (keine A * -Suche) und den Transfer und die zurückgelegte Strecke verfolgen. Wenn der Ton den Player erreicht, stellen Sie ihn in eine Warteschlange, um ihn zu einem späteren Zeitpunkt wiederzugeben. basierend auf der zurückgelegten Strecke. Sie können die Anzahl der übergebenen Graphenpunkte verfolgen und den Sound schließlich "ausmerzen" (mit anderen Worten, eine kontinuierliche Überflutung). Möglicherweise müssen Sie hierfür CUDA verwenden, da dies zu einer CPU-Bindung führen kann.

Wenn ein Sound abgespielt wird, verwenden Sie eine 3D-Sound-API (OpenAL), um ihn auf dem Portal zu platzieren, über das er eingegeben wurde. Dann ermitteln Sie, in welchem ​​der neun Cubes sich der Player derzeit befindet, und wenden diese EAX-Umgebung an.

Das Schöne dabei ist, dass wenn Ihre Umgebung ausreichend komplex ist, Sie kostenlose "globale" Echos erhalten und die Spieler Geräusche wahrnehmen, die aus der richtigen Richtung kommen. und wenn Sie die EAX-Umgebung richtig einstellen, ist der Effekt hoffentlich überzeugend genug, dass das Gehirn ihn akzeptiert.

Jonathan Dickinson
quelle