1. Einleitung
Statische Level-Meshes werden in i.d.R. in professionellen Modeling-Programmen erstellt (z.B. Lightwave oder 3DS-Studio MAX) und dann als Dateien im .3DS Format innerhalb des Editors Spacer importiert. Zur Steigerung der Render-Performance werden bereits beim Modeling der Level-Meshes bestimmte zusammenhängende Bereiche des Levels als Sektoren kenntlich gemacht und durch Portale voneinander getrennt. Zur Laufzeit ist es der Engine dann möglich, diejenigen Sektoren zu ermitteln und vom Render-Prozeß auszuschließen, die von der aktuellen Kameraposition aufgrund von Verdeckung nicht sichtbar oder weit entfernt sind.
In Outdoor-Leveln werden lediglich die Innenräume von Gebäuden, Höhlen etc. als Sektoren gekennzeichnet, wohingegen das gesamte Areal unter freiem Himmel selbst als ein großer Sektor "Außenwelt" behandelt wird. In Indoor-Leveln sollte der gesamte Level in eine Menge von Sektoren partitioniert wird. Die Unterscheidung Outdoor-/Indoor-Level ist bei der Kompilierung eines Levels innerhalb des Editors Spacer explizit zu wählen. Derzeit unterscheiden sich noch die Konventionen zur Ausstattung von Leveln mit Sektoren/Portalen für Outdoor- und Indoor -Level, wobei im folgenden das Grundsätzliche zusammengefasst ist. Eine einheitliche Konvention ist geplant, die sowohl bei Outdoor- als auch Indoor-Leveln anwendbar ist.
2. Outdoor-Level
2.1 Portal Benennungen
Die Materialnamen von Portal-Polys entsprechen folgender Benennung: "P[N]:Front_Back" ist das Schema (Case-unsensitiv, N ist otional, siehe unten). "Front" ist der Name des Raumes, in das die Portal-Poly Normale hineinzeigt. "Back" ist der Name des Raumes hinter dem Portal. Der Name des "Außenwelt-Raumes" ist "" (Ein Leerstring, siehe Beispiel).
Materialnamen mit dem Präfix "PN:" ("N" für NoFade") "öffnen" sich zwar visuell beim Nähern der Kamera, faden allerdings nicht wie die übrigen "P:"-Portale aus. Das ist z.B. sinnvoll, wenn auf einem solchen Portal eine Textur mit Alphakanal liegt.
Beispiel:
"<" und ">" geben die Richtungen der Normalen an.
**************
* * *
* A * B C*D
* <|> <|>
* * *
* * *
*Raum1 *Raum2* Außenwelt
**************
Material A: "P:Raum1_Raum2" von Raum2 nach Raum1
Material B: "P:Raum2_Raum1" von Raum1 nach Raum2
Material C: "P:Raum2_" von Außenwelt nach Raum2
Material D: "P:_Raum2" von Raum2 nach Außenwelt
2.2 Ghostoccluder
Ghostoccluder sind in Outdoor Leveln Polys, die ein Material mit dem Namen "GHOSTOCCLUDER" besitzen. Diese Polys werden niemals gerendert, sondern dienen nur der Verstärkung der bereits automatisch stattfinden Eliminierung von nicht zu rendernden Level-Bereichen durch Verdeckung bzw. "Occlusion". Ghostoccluder Polys unterliegen im Gegensatz zu "normalen" Polys im Outdoor keiner Größenbeschränkung, müssen also nicht wie Wasser segmentiert werden.
3. Indoor-Level
3.1 Hinweise für das Modeling
- Polys dürfen sich nicht durchdringen
- Es müssen alle Polys eliminiert werden, die vom Spieler aus keiner erlaubten, legalen Position / Blickwinkel gesehen werden können.
- Es ist darauf zu achten, dass zwischen Polygonen, die eine lückenlose Oberfläche bilden sollen auch wirklich kein Zwischenraum vorhanden ist. Beispielsweise sollte die untere Kante einer Wand mit einer Kante des Bodens identisch sein und damit direkt auf den Boden aufliegen. Im Grunde ist mit dieser Forderung eine genaue Vertex-Plazierung gemeint ist. Diese könnte z.B. mit einem feinem Raster bei der Vertex-Plazierung erreicht werden.
- Indoor Level (im Gegensatz zu Outdoor Level) sollten so modelliert werden, dass sie komplett geschlossen sind. D.h. wenn man (rein theoretisch) einen Level mit Wasser füllen würde, dann würde das Mesh des Levels keine Lücken und kein 'Leck' haben, aus dem Wasser entweichen könnte. Dieser Punkt ist sehr wichtig! Es sollte sehr sorgfältig darauf geachtet werden, dass keine Lücken zwischen den Polys entstehen. 'wasserdicht' bzw. 'leckfrei' kann so definiert werden:
- Alle T-Junctions sind laut 3.8 behandelt.
- Mann kann keine Sichtlinie zwischen einem Punkt innerhalb des Levels und einem Punkt außerhalb des Levels aufstellen.
- Es gibt keine 'Papierwände', bzw. Polys, auf deren nicht sichtbare Rückseite man von innerhalb des Levels blicken kann.
- Es darf keine Polys geben, auf deren Vorderseite man von keiner Position aus innerhalb des Levels blicken kann. Oder anders gesagt: kein Poly darf mit der Vorderseite Kontakt zu dem den Level umgebenden 'Nichts' haben. Ein Negativ-Beispiel: ein Kubus mit 4 nach außen gekehrten Wänden wird mitten in dem leeren Raum um den Level platziert => darf nicht!
- Im Allgemeinen sollten sogenannte 'T-Junctions' durch Einfügen von kolinearen Vertices in Polygonen vermieden werden.
3.2 Portale in Indoor-Leveln
- Portale trennen zusammenhängende Bereiche, die Sektoren, voneinander ab.
- Portale müssen Materialien haben, deren Namen mit dem Präfix "PI:" beginnen. Der Rest des Namens ist derzeit egal. Die bisher im Outdoor nötigen Angaben von Sektoren Namen entfallen hier.
- Portale müssen konvexe Polygone sein (triangle, quad, npoly). Genauer: ein Portal zwischen zwei Sektoren besteht aus genau einem konvexen Polygon.
- Portale im Indoor ("PI:") sind im Gegensatz zu Outdoor-Portalen single-sided. Das Programm generiert automatisch die intern immer noch nötige zweite Seite hinzu.
- Portale brauchen nicht mehr mit den Polys/Verts des statischen Level-Meshes verschmolzen werden.
- Portale werden typischerweise an Durchgängen/Türen oder an Tunnelanfängen und Tunnelenden platziert. Sie müssen an dem Ort, an dem sie platziert sind, alle Polys des Durchgangs schneiden bzw. berühren, also die Polys der Wände, Decken und Boden. Das Programm weiß damit, wo die Begrenzung des Sektors ist. Allerdings darf das Portal-Poly außer den direkt anliegenden Polys des Durchgangs KEINE weiteren Polys berühren. Das Portal-Poly darf demnach ein wenig größer sein, als der Durchgang, allerdings nicht so übermäßig groß, dass weitere, nicht beteiligte Polys, berührt werden. Auch ist es für die Leistung des Occlusion-Cullings wichtig, dass Portale nicht unnötig groß sind.
- Ein Poly des Levels darf maximal ein Portal-Poly durchdringen.
|