Physik-perfekte (oder irgendwo in der Nähe) 3D-Sound-Engine [geschlossen]


11

Ich bin neu in der Spielprogrammierung, obwohl ich einige Jahre Erfahrung in der Konsolen- / Webentwicklung habe. Mein Problem ist nicht so sehr, dass ich nicht finden kann, wonach ich suche, sondern nur, dass ich nicht die Terminologie habe, um tatsächlich eine erfolgreiche Suche durchzuführen.

Ich suche eine Physik-Engine, die sich stark auf Sounds konzentriert. Tatsächlich interessiert mich überhaupt nichts anderes. Was ich meine, lässt sich besser anhand eines Beispiels erklären:

Angenommen, ein Spiel vom Typ 1. Person. Sie sind nach Norden ausgerichtet, und irgendwo in Ihrer Nähe wirft jemand eine Flöte auf Sie (ungeachtet der Absurdität der Situation). Die Flöte dreht sich auf dem Weg und macht Geräusche durch ihre Löcher. Es gibt einen Wind von etwa 5 Knoten nach Süden.

Ich kann mir vorstellen, dass eine Physik-Engine in der Lage sein wird, die Flugbahn der Flöte sowie die Richtung zu berechnen, in die sie nach dem Aufprall geht. Ich möchte, dass die Physik-Engine die genauen Geräusche berechnet, die sie aus der Perspektive eines jeden Hörers erzeugt.

Gibt es einen solchen Motor? Wenn es mehrere gibt, welche wäre für das obige Beispiel am besten geeignet?

Antworten:


11

Sie stellen die falsche Frage. Sie machen den Fehler, den viele neue Spielprogrammierer machen. Spiele sind keine perfekten Simulationen, sie sind nicht einmal nah. Spiele simulieren gerade genug, um Spaß zu haben / interessant zu sein. Alles andere ist gefälscht.

Ein typisches Beispiel:
World of Goo: Simuliert Masse, Zugfestigkeit und Elastizität. Der Rest ist gefälscht, weil er das Spielgefühl nicht verbessert. Zum Beispiel simuliert es keine Schwerkraft. Alle Objekte beschleunigen mit konstanter Kraft. Boyancy ist gefälscht. Ballons ziehen mit konstanter Kraft hoch und Goo-Bälle unter Wasser erfahren ebenfalls eine konstante Aufwärtskraft. Das alles funktioniert gut für das Spiel. Es würde jedoch zusammenbrechen, wenn Sie versuchen würden, einen Weltraumaufzug mit der Physik-Engine von World of Goo zu bauen.

Stellen wir uns eine nahezu perfekte physikbasierte Sound-Engine vor. Was ist mit Umwelteinflüssen? Ist die Flöte in einer Höhle oder auf einem Feld. Bietet die Engine einen vordefinierten Satz von Umgebungen (wie viele?) Oder ermittelt sie dies durch Berechnung der tatsächlichen physischen Topographie (ja, richtig)? Hat der Spieler direktionale Ohren (ala Mensch) oder nur Ohrlöcher (ala Delphin oder Alien) oder multidirektional wie ein Tier? Ist die Luft heiß? Wie feucht ist es? Diese Liste kann schnell außer Kontrolle geraten.

Nehmen wir nun für einen Moment an, dass es eine solche echte Physik-Sound-Engine gab. Möchten Sie es wirklich verwenden, um ein Spiel zu machen? Wie lange würden Sie brauchen, um den Klang einer Flöte zu definieren, die durch die Luft fliegt? Wie viele Parameter müssen Sie genau richtig machen (100er?).

Was Sie hätten fragen sollen ist:
Wie kann ich den Klang einer Flöte simulieren, wenn sie am Player vorbei fliegt?

OpenAL kann machen was Sie wollen.

  • Richtungshörer
  • Richtungsschallquellen
  • Quellgeschwindigkeiten und Doppler-Effekte.

Ich würde vorschlagen, einen sich wiederholenden Soundeffekt einer sich drehenden Flöte zu haben. Geben Sie die Spielerposition und die Position / Geschwindigkeit der Flöte ein. Überspringen Sie vorerst das Richtungsmaterial.
Sie können den Klang aufnehmen, der von jedem Ende einer Flöte kommt, wenn die Luft vorbeiströmt, und die Flöte zwei Schallquellen verwenden lassen. Aber ich bezweifle, dass es die Mühe wert wäre, wenn sich die gesamte Spielmechanik nicht um geworfene und sich drehende Flöten dreht.


Nun, die ganze Spielidee dreht sich um das Bewegen von Objekten, die Geräusche machen. Das gegebene Beispiel ist absichtlich überkomplex, die Spielidee beinhaltet jedoch realistisch klingende Objekte in Bewegung.
Félix Saparelli

Die meisten Parameter würden tatsächlich gesteuert: Betrachten Sie einen geschlossenen (versiegelten) kubischen Raum mit Wänden aus einem bestimmten Material (dessen Eigenschaften ich definiere), Lufttemperatur, Druck, Luftfeuchtigkeit usw. werden alle gesteuert. Ohren sind menschlich. Ich muss nicht einmal den Rest des Körpers berücksichtigen. Tatsächlich kann ich anstelle einer schwarzen Liste genau angeben, welche Parameter ich verwende, und den Rest definieren (konstant). Es ist meine (virtuelle) Welt: Ich definiere sie so, wie ich es möchte.
Félix Saparelli

Mein Punkt war, dass sich der Aufwand, den eine solche Audio-Engine im allgemeinen Fall erfordern würde, nicht lohnt. Besonders wenn talentierte Toningenieure alle Effekte, die Sie benötigen, sehr überzeugend vortäuschen können. Doppler ist eingebaut. Echo, Dämpfung usw. können alle mit Filterung durchgeführt werden.
Deft_code

8

Sie möchten physikalische Modellierung? Probieren Sie das Synthesis Toolkit aus:

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

Sie müssen den Klebercode schreiben, der die Windgeschwindigkeit / -amplitude selbst einstellt.

Was Sie verlangen, wurde noch nicht wirklich erfunden. Wir kommen aber näher - sehen Sie sich das an, ich habe es neulich gesehen:

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


Interessantes Zeug. Das meine ich, und es hindert mich nicht daran, es noch nicht zu tun. Ich habe nicht vor, vor 1-2 Jahren mit der eigentlichen (nicht konzeptionellen) Arbeit daran zu beginnen.
Félix Saparelli

4

Ich bezweifle, dass Sie eine Physik-Audio-Engine finden werden. Es ist wahrscheinlicher, dass Sie eine beliebige Physik-Engine (z. B. Bullet ) verwenden und OpenAL für den Sound verwenden. Berechnen Sie die Position der Flöte und verwenden Sie diese als Position der Quelle.


Ich möchte aber noch viel mehr.
Félix Saparelli

1
Was willst du noch? Mit meinem Vorschlag können Sie die Position des Klangs bei jedem Bild ändern. Ich glaube, ich vermisse etwas.
Die kommunistische Ente

6
Ich denke, er meint, die Luftwellen und andere Schwingungen zu simulieren, um die Geräusche zu erzeugen. Und sicher ist das möglich, aber kein Computer (außer vielleicht einigen Supercomputer-Clustern) könnte dies für einen Raum mit nützlicher Größe in Echtzeit berechnen. Nein, wenn Sie meinen, dass es so etwas nicht gibt (und es auch keinen wirklichen Bedarf gibt) Die Physik-Engine und das Lesen von Kollisionsdaten, um ein geeignetes Sample abzuspielen, ist "nah genug".
Elva

3
Wenn Sie so weit kommen möchten, gibt es nicht nur a) wie Yourdoom sagte, keine Möglichkeit, dass ein normaler Computer dies tun könnte, und b) niemand würde den Unterschied erkennen können.
Die kommunistische Ente

3
Es gibt noch viel, was moderne Spiele tun (und übergeordnete APIs wie FMOD bieten), was OpenAL nicht oder zumindest nicht sofort kann - wie (geometrische) volumenbasierte Effektoren, die zusätzlich angeschlossen werden können zu Portalen, um Audio zu simulieren, das durch mehrere Räume geht. Es ist nicht üblich, aber es ist getan, und Sie können den Unterschied erkennen.

4

Phya ist eine auf "Physical Sampling" basierende Kollisions-Audiosynthesebibliothek, die von einer Spielphysik-Engine gesteuert werden kann. (Aufzählungszeichen wurde in den Beispielen verwendet)

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

Ich bin mir nicht sicher, was das neueste ist. Das letzte Site-Update ist jetzt über ein Jahr her.

Es ist nicht so sehr darauf ausgerichtet, die Resonanz von Luft in einem Volumen zu modellieren, könnte aber vielleicht ein gutes Beispiel dafür sein, wie man die Echtzeit-Audiosynthese aus der Physik heraus antreibt.

Ich denke, dies muss kein unmöglich CPU-teures Unterfangen sein. Das angegebene Problem ist völlig deterministisch und sollte mit moderner Hardware erreichbar sein. (Zumindest bis zu einem für ein Unterhaltungs- / Lernprodukt geeigneten Niveau.)

Die zu beantwortende Frage ist, wie vollständig Sie simulieren müssen und wie viel Sie fälschen können. Wenn Audio nur eine Art Echtzeit-Modulation des Klangs auf eine einigermaßen überzeugende Weise aufweist, erhalten Sie viel, ohne akustische Schwingungen bis auf das Molekül modellieren zu müssen.

Vielleicht hilft das. Gute Frage übrigens.

-j


Ich kann viel vortäuschen. Nur ... viel weniger als moderne Videospiele. Welches ist der Punkt: Ich erstelle kein Videospiel, sondern ein Hörspiel. Irgendwie.
Félix Saparelli

3

Tatsächlich wäre eine genaue Simulation der hier beteiligten Physik wesentlich komplexer (und rechenintensiver) als ein gewöhnliches Physiksystem wie Havok oder Bullet. Ein traditionelles Physiksystem ist für starre Körper und weiche Körper optimiert, die beide aus Geschwindigkeitsgründen in ihrer Netzkomplexität begrenzt sind.

Schall hingegen ist eine Ausbreitung von Wellen durch die Luft, und die Frequenzen, die von so etwas wie Ihrem Beispiel erzeugt werden, hängen von Tonnen und Tonnen von Eigenschaften ab. Aus welchem ​​Material bestand es? Welches mathematische Modell sollten wir für Luftpartikel verwenden, die mit diesem Material interagieren? Wenn es sich um eine Rohrform handelt, wie groß ist das Rohr? (Dies bestimmt die Resonanzfrequenz.) Usw. usw.

Darüber hinaus müssen Sie eine ziemlich ausgefeilte Partikelsimulation durchführen, um die Luft zu modellieren, und Partikelbewegungswellen extrahieren, die im Wesentlichen die Schallwellen sind, die auf Ihr Trommelfell treffen. Und lassen Sie uns nicht einmal das Trommelfell erwähnen, denn die Resonanz der Wellen in Ihrem Gehörgang beeinflusst auch das, was Sie hören.

Alles in allem ist dies viel zu viel Simulation für ein aktuelles Spiel, insbesondere wenn Sie auf eine interaktive Bildrate hoffen. Wie deft_code feststellte, handelt es sich bei Spielen selten um genaue Simulationen, sondern um herrlich gefälschte. Der beste Weg, dies zu erreichen, besteht wahrscheinlich darin, mit einem großen Sound-Sample-Set zu beginnen und die Dinge über einen DSP auszuführen, bis Sie verstanden haben, wie Sie die Wirkung dieser Sounds beeinflussen können. DSPs sind definitiv schnell genug für Echtzeitspiele, und wenn der Sound eine große Komponente wäre, ist es sinnvoll, einen anständigen Teil Ihrer Frame-Zeit für die Soundverarbeitung aufzuwenden.

tl; dr: Eine genaue Simulation kommt wahrscheinlich für viele Jahre nicht in Frage. Tolle Spiele fälschen es. Mit einem ausreichend großen Sampleset und genügend DSP-Optimierungen können Sie es wahrscheinlich auch fälschen.


2

Überprüfen Sie unseren Ansatz.

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

Die entwickelte Bibliothek verwendet Beamtracing, um dem Benutzer eine realistische Audio-Auralisierung zu bieten. Alle Audioeffekte werden basierend auf der tatsächlichen Geometrie eines bestimmten Spielniveaus sowie seinen akustischen Eigenschaften (akustische Materialien, Luftdämpfung) berechnet. Der Sound ändert sich dynamisch zusammen mit der Bewegung des Spielcharakters und der Soundquellen. Der Algorithmus zur Erzeugung von Schallpfaden unterstützt Phänomene wie Spiegelreflexionen, diffuse Reflexionen und Kantenbeugung, während die Audioverarbeitung die Signalfilterung (Modellierung von Luftdumping, Reflexions- / Beugungswirkung usw.), Doppler-Effektmodellierung und räumliche Effekte unterstützt. Schließlich wird der Richtungsklang unter Verwendung von HRTF für jeden Schallweg implementiert.


0

Mir ist klar, dass dies eine alte Frage ist, aber die Dinge haben sich in den letzten Jahren weiterentwickelt, und was Sie beschreiben, wird rechnerisch immer praktikabler.

Werkzeuge wie das Synthesis Toolkit werden verwendet, um die folgende Art von Frage zu beantworten: "Meine Physik-Engine hat mir gesagt, dass die Flöte auf die eine oder andere Weise vibriert. Welche Note erzeugt das?"

Es gibt jedoch noch eine weitere wichtige Frage, die beantwortet werden muss: "Wie klingt diese Note aus der Position des Hörers?"

Es ist ein weit verbreitetes Missverständnis, dass Audio-APIs wie OpenAL sich darum kümmern. Tatsächlich ist alles, was sie tun, das, was als Positionsaudio bezeichnet wird . Sie modellieren nicht die Schallausbreitung: die Wechselwirkungen zwischen den Schallwellen und der Umgebung. Zur Schallausbreitung gehört die Beantwortung von Fragen wie:

  • Ist dieser Raum groß genug, um einen spürbaren Hall zu hören?
  • Oder absorbieren die Möbel im Raum den größten Teil des Geräusches?
  • Sollte ich im Freien Echos von einem entfernten Hügel hören? Ein nahe gelegenes Gebäude?
  • Löst sich der Schall über große Entfernungen auf?
  • Ist die Schallquelle vor dem Hörer verborgen?
  • Wenn ja, gibt es alternative Routen, über die Schallwellen den Hörer erreichen können? Vielleicht unter einer geschlossenen Tür, um eine Flurecke oder durch einen Abzug?

Phonon ist eine Audio-Physik-Engine, die diese Fragen beantwortet. (Vollständige Offenlegung: Ich bin an der Entwicklung von Phonon beteiligt.) Bei Phonon muss der Benutzer einen sehr kleinen Satz von Parametern (Absorptions- und Streukoeffizienten) angeben . Phonon führt dann gerade genug Berechnungen durch, um Schallausbreitungseffekte für den Hörer überzeugend nachzubilden.

Phonon ist derzeit als Plugin für Unity verfügbar. Neben PC und Mobile kann Phonon auch auf VR-Plattformen wie Oculus Rift ausgeführt werden, und dies macht auch dort einen spürbaren Unterschied.

Hoffe das hilft!


0

Wenn ich Ihre Frage lese, kann ich sie auf zwei Arten übersetzen.

  1. Gibt es eine Engine, die basierend auf physikalischen Simulationen Sounds erzeugen kann? Wie Luft, die über ein Schilfrohr weht, oder ein Hammer, der gegen eine Schnur schlägt?

Beim Spielen? nicht das ich davon gehört hätte.

  1. Gibt es eine Engine, die bereits vorhandene Sounds wiedergibt, diese jedoch basierend auf physischen Informationen wie der Entfernung zum Mikrofon modifiziert, um ein "Surround-Sound-Erlebnis" zu simulieren?

Ja! Sie werden als "3D-Sound-Engines" bezeichnet. Eine bekannte ist OpenAL .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.