Descent3fischlein.de Ship
MenTop
News D3Edit Levels Mods Tools Links Lan-Pic's Gästebuch Kontakt Fischlein
407070 seit 24.09.2000

Sound Probleme vermeiden
Geschrieben von (LL)ATAN
Wenn Ihr Euch diese Anleitung ausdrucken wollt, dann HIER Klicken.

Problem:
Ein Schuss auf eine gegenüberliegende Wand erzeugt beim Auftreffen keinen Sound. Die Ursache liegt im Leveldesign und lässt sich beim Beachten einiger Punkte beheben, bzw. schon beim Erstellen des Levels vermeiden.

Ein paar Grundlagen:
Während der Erzeugung der BOA Vis berechnet D3Edit auch die Soundentfernungen innerhalb des Levels und trägt diese in eine Tabelle ein. Diese Tabelle wird mit dem Level abgespeichert und von Descent3 für die Sounderzeugung benutzt. Wird die maximale Entfernung von 400 Units überschritten, dann wird diese Entfernung in der Soundtabelle für ungültig erklärt. Descent3 erzeugt bei einer ungültigen Entfernung keinen Treffer-Sound.

Wie wird diese Sound-Entfernungstabelle erstellt?
Es wird für jeden Raum geprüft bis in welchen Raum gesehen werden kann. Dabei werden die Entfernungen zwischen dem ermittelten Start- und Endraum addiert und (sofern gültig) in die Sound-Tabelle eingetragen.

Wie funktioniert das von Raum zu Raum 'sehen'?
Unser Beispiel-Level soll aus 3 in Reihe liegenden Räumen bestehen (A, B, C) die durch Portale verbunden sind. (Raum A -> B; Raum C -> B; Raum B -> A und B -> C) Daher haben Raum A: 1Portal, Raum B: 2 Portale und Raum C: 1Portal.
Bild1
D3Edit ermittelt nun zuerst für jeden Raum die maximale Sichtweite und trägt für jeden dieser Räume (er ist der Start-Raum) den dazugehörigen End-Raum in eine Tabelle ein. Das bedeutet für den Beispiel-Level:

Start RaumEnd Raum
AC
BA
BC
CA

Wie wird die -Raum zu Raum Entfernung- ermittelt?
Lassen wir D3Edit mit Raum A als Start-Raum beginnen. Nach der Tabelle wird nun die Entfernung vom Raum A - Center zum Raum C Center ermittelt. Dazu wird zuerst die Entfernung zwischen dem Raum A - Mittelpunkt und dem ersten Portal dieses Raumes ermittelt.

Die Entfernung AC wird auf 0 gesetzt. Dann wird eine Gerade vom Raum-Center zum Center des Portal-Faces A/B gezogen.
Bild2
Erreicht diese Linie das Portal-Face nicht, ist diese Entfernung ungültig. Entfernung AC = ungültig.

Erreicht die Linie das Portal-Face wird diese Entfernung zwischengespeichert. Entfernung AC = Entfernung AC + (Entfernung A_Mi -> A_P1)

Jetzt wird vom Portal-Center aus eine Gerade zum Raum-Mittelpunkt des Raumes B gezogen.
Bild3
Erreicht diese Linie den Raum B -Mittelpunkt nicht, ist die Entfernung ungültig. Entfernung AC = ungültig. Bei Erfolg wird die Entfernung zu der bereits gespeicherten addiert: Entfernung AC = Entfernung AC + (Entfernung A_P1 -> B_Mi)

Dann wird eine Gerade vom Raum B -Center zum Portal-Face B/C gezogen.
Bild4
Erreicht diese Linie das Portal-Face B/C nicht, ist die Entfernung ungültig. Entfernung AC = ungültig.

Bei Erfolg wird die Entfernung zu der bereits gespeicherten addiert: Entfernung AC = Entfernung AC + (Entfernung B_Mi -> B_P2)

Jetzt wird vom Portal-Center B/C aus eine Gerade zum Raum-Mittelpunkt des Raumes C gezogen.
Bild5
Erreicht diese Linie den Raum C -Mittelpunkt nicht, ist die Entfernung ungültig. Entfernung AC = ungültig.

Bei Erfolg wird die Entfernung zu der bereits gespeicherten addiert: Entfernung AC = Entfernung AC + (Entfernung B_P2 -> C_Mi)

Nun überprüft D3Edit ob die Entfernung AC > 400 ist. Ist das der Fall, wird Entfernung AC für ungültig erklärt. Andernfalls wird die ermittelte Entfernung nun in die Max Sound Entfernung Tabelle unter A/C eingetragen. Raum A ist fertig berechnet da er nur ein Portal besitzt.

D3Edit schaltet zu Raum B und ermittelt, wie unter Raum A beschrieben, die Entfernungen Zu Raum A und Raum C. Nachdem auch Raum C bearbeitet wurde ist die Liste der Max-Sound-Entfernungen fertig. Sie ist Bestandteil der d3l-Datei und mit dem Level zusammen abgespeichert (oder geladen).

Das Problem...
In dem o. a. Beispiel würde man bei einem Laserschuss von Raum A nach Raum C den Einschlag in Raum C hören können sofern die Entfernung < 400 ist.

Schauen wir uns diesen Level mal an:
Bild6
Auch hier schießen wir wieder von Raum A nach Raum C, aber wir hören keinen Einschlag in Raum C. Ein weiterer Testschuss direkt vor das Portal B/C ist aber zu hören. Fliegen wir mal in den Raum B und schießen erneut in Raum C, ist der Einschlag hörbar. Nun feuern wir aus Raum C in den Raum A, aber auch jetzt hören wir keinen Einschlag, ein Schuss direkt vor Portal B/A ist wieder ok. Fliegen wir von Raum C in den Raum B und schießen in den Raum A geht's auch... Die Räume A und C liegen doch dicht gegenüber, was ist nur los? Wir erinnern uns daran, dass wir mit dem MD Zoom eine Entfernungsmessung vornehmen können. Also schauen wir mal nach und siehe da, es werden (z. B.) 250 Units angezeigt, also eine Entfernung die durchaus unterhalb der magischen 400er Grenze liegt. Warum hören wir aber trotzdem keinen Sound?

Die Lösung ist relativ einfach wenn man die o. a. Vorgehensweise einigermaßen kennt. Schauen wir uns im nächsten Bild mal an wie die Entfernungen in diesem Level ermittelt werden:
Bild7
(Ich habe das Room - Center von Raum B hier bewusst ein wenig weiter nach unten eingezeichnet um das Problem deutlicher hervorzuheben.)

Wie war das gleich noch? Die Entfernungen werden von den Room Centern zu den Portalen berechnet. Darin liegt hier auch schon das Problem, denn obwohl die direkte Luftlinie zwischen Raum A und Raum C in dem Beispiel nur 250 Units beträgt, ermittelt D3Edit mehr als die doppelte Entfernung wie man unschwer aus dem Bild erkennen kann. Damit liegen wir dann aber weit über der zulässigen Soundentfernung und D3 spielt, beim Schuss von Raum A hinein in den Raum C, (und umgekehrt) keinen Aufschlag-Sound.

Abhilfe für dieses Problem...?
Solange D3Edit die Berechnung auf diese Weise durchführt können wir uns nur durch eine Änderung des Leveldesigns behelfen. Hier ist es am einfachsten wenn wir den Raum B zerschneiden und einen weiteren Raum erzeugen.

Das folgende Bild zeigt den geänderten Level:
Bild8
Die von D3Edit erzeugte Sicht-Tabelle sieht nun so aus:

Start RaumEnd Raum
AC
AD
BA
BC
BD
CA
CD

In diesem Level würde man bei einem Schuss von Raum A nach Raum C ( und umgekehrt ) den Einschlag jetzt hören. Im Spiel selber würde man am Leveldesign keinen Unterschied feststellen können, der Level sieht genauso aus wie die vorherige Version.

Das nächste Bild erklärt warum das Soundproblem nun beseitigt ist.
Bild9
Man erkennt, dass die Entfernung Raum A nach Raum C nun der Luftlinie entspricht und somit sicher in dem erlaubten Bereich liegt.

Ein weiteres Problem...
Eine Funktion in D3Edit wird so gut wie nie benutzt obwohl sie Soundprobleme verhindern könnte, es ist die View Room Center Funktion. Ist sie eingeschaltet erscheint in der Room View ein kleines Kreuz in der Mitte des Raumes. Man kann sich in allen 3 Ortho Views ansehen wo sich der Raumschwerpunkt befindet. Wieso nenne ich es auf einmal Schwerpunkt und nicht Room Center oder Raum Mittelpunkt..? Schauen wir uns dazu wieder ein Beispiel ( Draufsicht ) an:
Bild10
Das Room Center liegt wie erwartet mittig im Raum.

Nun Splitten wir ein Face des Raumes:
Bild11
Obwohl der Raum noch dieselbe Form besitzt, verschiebt sich das Room Center in Richtung der neuen Verts. Die Berechnung des Room Centers ist mehr eine Gewichtung der Verts. Ein Face mit vielen Verts zieht das Room Center magisch an. Diese Eigenschaft kann Soundfehler erzeugen aber auch helfen Soundfehler zu beheben.

Beispiel:
Bild12
Nach dem Benden hat sich das Room - Center verschoben. Die Gewichtungsberechnung ermittelt einen Schwerpunkt außerhalb des Tunnels ( siehe roter Pfeil ). Das hat schwerwiegende Folgen für die Soundberechnung. Gehen wir mal davon aus, das der gebogene Raum der Raum C in unserem obigen Beispiel sei. Dann würde die Linie von Raum A durch Raum B bis zum Portal B/C verlaufen, aber die (Sicht-)Linie zwischen dem Portal B/C und dem Raum Center C ( C_Mi ) ist unterbrochen. D3Edit würde die Soundverbindung zwischen Raum A und Raum C für ungültig erklären, die Folge wäre daher das es keinen Treffersound wie oben beschrieben geben wird. Eine Lösung wäre aus dem Bogen 2 oder mehr Räume zu machen, oder aber, wenn der Abstand nicht zu groß ist, an der gegenüberliegenden Wandseite die Gewichtung der Verts zu erhöhen. Denkbar auch durch Ankleben eines Monitors, den man dann mit der Funktion Merge Object into Room Bestandteil des Raumes werden lässt. Die neuen Faces und Verts ziehen den Schwerpunkt u. U. wieder soweit in den Raum das das Room Center von den Portalen aus gesehen werden kann. Damit funktioniert dann auch wieder der Sound.

Hier noch ein schönes Beispiel was man nicht machen sollte:
Bild13
Der Raum Mittelpunkt liegt perfekt in der Mitte, nur leider im falschen Raum ;)

Portale:
Die neueren D3Edit Versionen berücksichtigen inzwischen, dass die Portaltexturen durchlässig sein müssen wenn man keine Soundprobleme im Level haben will. Es wird automatisch die Palmleaf1 Textur auf Portale gesetzt. Das ist die einzige D3Texture die für die o. a. Sichtlinien durchlässig ist und somit eine korrekte Soundberechnung durch D3Edit möglich macht. Möchte man den Sound kappen, dann muss man nur eine andere Textur auf ein Portal legen, hinter diesem Portal hört man dann keinen Treffersound mehr. Die Benutzung der Pamleaf1 Textur bringt auch Vorteile bei den BNodes.

Viel Spass beim Level bauen !!!

Zurück