Dynamische Raummodellierung in Unity
End-of-Life Notice for Oculus Spatializer Plugin
Diese Dokumentation wird nicht mehr aktualisiert und kann jederzeit entfernt werden.
Der Oculus Spatializer ermöglicht dynamische Raummodellierung, mit der Schallreflexionen und Hall generiert werden. Hierfür wird ein dynamisch aktualisiertes Modell des aktuellen Raums im VR-Erlebnis und die Position des*der Nutzer*in in diesem Raum verwendet.
Vor der Version 1.22 konnte der Oculus Spatializer nur ein einfaches Reflexionsmodell verwenden, das auf einem Quader (einem „Schuhkarton“) basierte. Dieser Ansatz füllt den Raum sehr effektiv aus und bietet natürlichen Klang. Schallreflexionen und Hall werden hierbei binaural verräumlicht, d. h. Timing, Lautstärke und andere Effekte werden von beiden Ohren unterschiedlich wahrgenommen. Dadurch können die Nutzer*innen die Klangrichtung besser wahrnehmen. Dieses System ist auf Einfachheit ausgelegt, daher werden die Nutzer*innen immer in der Mitte des Quaders platziert und die Sounddesigner*innen legen lediglich die Abmessungen fest. Dies ermöglicht einen unkomplizierten Workflow, der vollständig über Middleware-Tools gesteuert wird. Sounddesigner*innen können die Abmessungen und Reflexionsfaktoren der Wände des Quaders ermitteln und so eine natürlicher klingende Raumverortung ermöglichen, die so genau wie möglich an das VR-Erlebnis angepasst ist.
Da der Raum jedoch eine feste Größe besitzt, bringt dieser einfache Ansatz einige Einschränkungen mit sich. Die Hörer*innen befinden sich immer in der Mitte des Raum, auch wenn sie sich einer Wand oder einem anderen festen Objekt im virtuellen Raum annähern. Darüber hinaus bietet der Hall nur eingeschränkten Mehrwert, da er nicht dynamisch ist. Der Oculus Spatializer bietet nun dynamischere Funktionen für noch realistischeren Klang, ohne dabei den Rechenaufwand zu erhöhen oder den Workflow zu beeinträchtigen.
Ab der Version 1.22 ist der Oculus Spatializer in die Game-Engine integriert. Dies bedeutet, dass der Quader an den eigentlichen Raum im VR-Erlebnis angepasst wird, damit er sich dynamisch an die Größe und Form der Umgebung anpassen kann. Hierdurch lassen sich die Dimensionen des Raums dynamisch ändern. Auch eine Anpassung der Klangcharakteristiken basierend auf den Bewegungen der Nutzer*innen im Raum ist möglich. Ermöglicht wird dies durch den Einsatz von Raycasting in der Game-Engine. Einfach gesagt: Der Spatializer ist über eine Standardimplementation mit dem Engine-Raycaster verbunden. Um den Rechenaufwand gering zu halten, wird nur eine geringe Anzahl an Rays ausgesendet. Darüber hinaus werden frühere Raycasting-Ergebnisse gespeichert und die Schätzwerte im Laufe der Zeit verfeinert.
Der Spatializer beinhaltet außerdem eine Option zur Visualisierung im Unity-Editor. Hiermit kannst du sehen, welche Maße der Raum hat und wo die Rays auftreffen. Die Raycaster-Visualisierung ist besonders hilfreich für das Erkennen unbeabsichtigter Kollisionen mit Geometrie, die keine Auswirkungen auf den Klang haben soll, z. B. UI-Objekte.
Dynamische Raummodellierung verwenden
Verknüpfe das folgende Skript mit einem Spielobjekt, um den Oculus Spatializer im Unity-Editor zu verwenden:
Assets/OSPNative/scripts/OculusSpatializerUnity.cs
- Klicke auf den Button
Add Component und suche nach Oculus Spatializer Unity. Wähle in den Ergebnissen Oculus Spatializer Unity aus.

Der einfachste Ansatz ist, dieses Skript mit einem statischen, leeren Spielobjekt in der Szene zu verknüpfen. Hierdurch wird die Geometrie-Engine aktiviert, was die aktuelle Implementation überschreibt.
Das Skript stellt öffentliche Variablen bereit, auf die du zugreifen kannst, nachdem das Spielobjekt mit dem Skript zur Szene hinzugefügt wurde:

Folgende Variablen sind modifizierbar:
- Layer Mask: Geometrie kann mit einem bestimmten Layer-Enum getaggt werden. Der Spatializer verwendet nur Geometrie, die mit der Auswahl in „Layer Mask“ übereinstimmt.
- Visualize Room: Aktiviere diese Option, um im Unity-Editor die Rays zu sehen, die mit der Geometrie kollidieren. Hierbei wird nur die Geometrie angezeigt, die den unter „Layer Mask“ ausgewählten Layers zugewiesen wurde. Du siehst außerdem, wie sich das Hallmodell des Quaders dynamisch an den aktuellen Raum anpasst, während du dich durch das VR-Erlebnis bewegst. Du siehst auch die Ergebnisse anderer Variableneinstellungen, z. B. „Rays per Second“ oder „Max Wall Distance“.
- Rays Per Second: Hiermit legst du die Anzahl der Rays pro Sekunde fest, die zufällig von der Position des*der Hörer*in ausgesendet werden, um Raumgröße und -form einzuschätzen. Ein höherer Wert ermöglicht eine präzisere Schätzung der Raumeigenschaften, erfordert aber auch mehr Rechenleistung.
- Room Interp Speed: Hiermit legst du die Zeit (in Sekunden) fest, in der von einer Raumschätzung zur nächsten übergegangen wird. Je höher die Nummer, desto langsamer der Übergang. Ist dieser Wert zu niedrig, klingen die Reflexionen und der Hall möglicherweise hektisch und sprunghaft. Ist dieser Wert zu hoch, klingen die Reflexionen und der Hall beim Wechsel von einem Bereich zum anderen als wären sie verzögert, insbesondere bei großen Unterschieden in der Größe oder Form des Raums.
- Max Wall Distance: Die maximale Distanz (in Fuß), die ein Ray zurücklegen wird. Wenn in diesem Abstand keine Wand getroffen wird, wird der Ray nicht zur Schätzung der Raumgröße verwendet.
- Ray Cache Size: Die Anzahl der Rays, die zur Schätzung der Raumeigenschaften gecached werden. Je größer der Cache ist, desto mehr Rays werden zur Schätzung der aktuellen Raumeigenschaften eingesetzt. Ist dieser Wert zu hoch, passt sich der Klang beim Wechseln von einem Bereich zum anderen möglicherweise nicht schnell genug an, insbesondere bei großen Unterschieden in der Größe oder Form des Raums. Ist dieser Wert zu niedrig, wird der Klang möglicherweise als zu hektisch wahrgenommen.
- Dynamic Reflections Enabled: Wenn du diese Option deaktivierst, werden die Reflexionen deaktiviert. Der Hall bleibt jedoch bestehen. Weitere Informationen findest du unten unter „Hall und Reflexionen“.
- Legacy Reverb: Der Halleffekt der dynamischen Raummodellierung ist flüssiger und präziser als der veraltete Halleffekt (Legacy Reverb). Die dynamische Raummodellierung benötigt jedoch zusätzliche CPU-Ressourcen. Du kannst das Legacy-Reverb-Modell verwenden, wenn du die CPU-Auslastung reduzieren musst und der veraltete Halleffekt für deine Zwecke ausreicht.
Direktton, Reflexionen und Hall
Nachstehend findest du eine kurze Erläuterung der Unterschiede zwischen Direktton, Reflexionen und Hall.
Wenn ein Ton generiert wird, hört der*die Nutzer*in zuerst den Direktton. Hierbei handelt es sich um das stärkste gehörte Signal. Für den Spatializer ist der Direktton der Schlüssel zur Lokalisierung eines Tons im dreidimensionalen Raum. In einem schalltoten Raum ist nur der Direktton zu hören, da alle Reflexionen von den Wänden absorbiert werden. In der echten Welt wären diese Töne trocken und unrealistisch, da Schall immer von Objekten abprallt und zurück zu den Hörer*innen geworfen wird.
Als nächstes kommen die Reflexionen. Wenn Schallwellen in einem Raum auf eine Wand treffen, werden sie zum Teil absorbiert und zum Teil als Reflexionen zurück in den Raum geworfen. Die erste Reflexion eines Tons wird als Reflexion erster Ordnung bezeichnet. In einem Raum mit sechs Seiten nimmt ein*e Hörer*in zunächst den Direktschall und anschließen sechs Reflexionen wahr. Wenn die sechs Reflexionen erster Ordnung erneut von den Wänden abprallen, entstehen jeweils sechs weitere Reflexionen, also insgesamt 36 (6 x 6 = 36). Diese Reflexionen sind bedeutend leiser als die ersten sechs und werden als Reflexionen zweiter Ordnung bezeichnet.
Reflexionen erster und zweiter Ordnung sind im Vergleich zu späteren Reflexionen relativ deutlich. Wie bei einem Echo ähnelt der Ton stark dem Originalton. Reflexionen erster, zweiter und dritter Ordnung (36 x 6) werden als Schallreflexionen bezeichnet. Diese Reflexionen sind der zweitwichtigste Bestandteil des Spatializers und geben den Hörer*innen ein Gefühl für die Raumform.
Mit Nachhall gehen Reflexionen noch einen Schritt weiter. Nach der Reflexion der dritten Ordnung werden die Reflexionen zunehmend undeutlich und diffus. Dies führt zu einem Netzwerk aus Reflexionen, die wie ein kontinuierlicher Ton klingen. Diese Reflexionen höherer Ordnung werden als Hall bezeichnet. Hall wird anders simuliert als die Reflexionen niedriger Ordnung, da die Modellierung viel CPU-Leistung in Anspruch nimmt. Wir verwenden Tricks, mit denen wir den Leistungsaufwand reduzieren und die komplexeren Reflexionen näherungsweise zu berechnen.
In unserer Terminologie werden die separat wahrnehmbaren „Reflexionen“ als solche bezeichnet. Nicht einzeln wahrnehmbare Reflexionen höherer Ordnung werden als „Hall“ bezeichnet.