Grundlagen: Was ist ein Node?
Grundlagen: Was ist ein Node?
Eine sehr gute Frage, Ich werde versuchen sie zu beantworten. Doch als
erstes werden wir auf die grundlegenden Dinge etwas eingehen. Keine
Angst, das wird jetzt keine Doktorarbeit. Du solltest aber schon mal
mit dem UEd gearbeitet haben, um alles nachvollziehen zu können. Ich
fange ganz unten an, bei den.....
Vertex
Das sind die Eckpunkte einer Form im 3Dimensionalen Raum des Editors.
Jeder dieser Eckpunkt besitzt die Koordinaten X,Y und Z, die ihre
genaue Position in diesem 3Dimensionalen Raum angibt. Aus diesen
Eckpunkten ergeben sich die.....
Polygone
In dem Bild rechts, siehst du ein solches Polygon, gebildet aus 4
Vertex. Das muß aber nicht immer so sein, sie können auch aus noch mehr
Vertexe bestehen. Was aber immer gleich ist, sie sind nur 2Dimensional.
Das ist auch der Grund weshalb der "BSP Based Terrain-Builder" nur
Polygone verwendet, die aus 3 Eckpunkten bestehen. Wieso?....Nun, du
möchtest doch Berge und Hügel in deiner Map und um diese zu bekommen,
ziehst du doch Eckpunkte nach oben. Zieht man bei einem Polygon mit 4
Eckpunkten einen Eckpunkt nach oben, entsteht eine gebogene Fläche und
diese ist nicht mehr 2Dimensional, es folgen Darstellungsfehler und in
manchen Fällen sogar Abstürze des Editors. Auf jeden Fall bilden
mehrere dieser Polygone eine 3Dimensionale Form, im Editor benannt
als...
Brush
Zu dem Brush gibt es eigentlich nicht viel zu sagen, mit ihm wird
Materie im Editor der Umwelt hinzugefügt oder abgezogen. In der Mitte
des Brush's befindet sich der Pivot, der Punkt wo sich die drei
Achsen(X,Y,Z) des Brush's schneiden, wichtig für den Fall das der Brush
gedreht werden soll.
Wird ein Raum aus nur einem Brush(in diesem Fall ein Cube) gebaut,
besteht dieser aus 6Polys und 6Nodes (nachzulesen in den Stats unten im
Bild). Jedes Polygon besitzt also einen Node. Im Editor werden die
Nodes in verschiedenen Farbtönen dargestellt.
Wird nun ein zweiter Cube mit "Add" in der Mitte eingefügt und plan im
Boden versenkt, schneidet dieser die Polygonfläche und die Nodes müssen
neu angeordnet werden. Im Beispiel rechts wird das Bodenpolygon mit 4
Nodes dargestellt. Das läßt sich auch überprüfen den....
...die Anzeige (Stats in den "Build Options") springt auf 7Polys und
10Nodes, wenn der Brush im Boden eingefügt wird. Davon sind 1Poly und
1Node vom Cube der im Boden steckt. Weitere 5Polys und 5Nodes sind von
dem Teil des Raum-Cubes, der nicht verändert wurde. Bleiben 1Poly und
4Nodes übrig, diese gehören der Bodenfläche, in welcher der zweite Cube
versenkt ist.
Tip:
"Ratio" gibt das Verhältnis zwischen Polys und Nodes vom gesamten Level
an. In diesem Fall besitzt jedes Polygon 1,43 Nodes. Optimal wäre ein
Verhältnis von 1:1.
Zählt man jetzt die Felder (dazu muß man sich aber in der
Zone/Portal-Ansicht befinden) am Boden kommt man auf 5Nodes, von denen
aber eines noch zu dem zweiten Cube gehört. Das BodenPoly wurde also in
4Nodes aufgeteilt.
Wird das ganze jetzt übertrieben und versenkt immer mehr Cubes im
Boden, erscheint beim Build'en irgendwann der Fehler "Warning: Node
side limit reached" im Log-Fenster. Das bedeutet, das ein Poly zu oft
unterteilt wurde. Die Polygone werden aber auch noch vom BSP-Tree in
Nodes unterteilt, damit wird die Performance des Levels erhöht. Um zu
überprüfen ob ein Poly schon zu oft geteilt wurde, wird die
BSP-Optimierung in den BuildOptions vor dem Rendern ausgeschaltet und
danach das LogFenster geöffnet um zu prüfen ob die oben genannte
Fehlermeldung auftaucht. Wenn alles in Ordnung ist wird das Rendern
wiederholt, aber mit der BSP-Optimierung angeschaltet. Sollte jetzt der
Fehler auftauchen, kann mit dem BSP-Slider die Einstellung noch
verändert werden.
Es gibt mehrere Möglichkeiten eine 3D-Spielewelt am Bildschirm
anzuzeigen. Die einfachste wäre die entferntesten Polygone(auch die
hinter dem Betrachter) zuerst darzustellen und dann den Level von dort
in Richtung des Betrachters aufzubauen. Das wurde auch in den Anfängen
der 3D-Grafik so gemacht. Doch Heute ist das nicht mehr möglich die
Grafik wäre zu langsam, um vernünftig Spielen zu können. Die
Unreal-Engine benutzt etwas anderes den sogenannte...
BinarySpacePartioning-Tree
Der BSP-Tree ordnet die Polygone als Knotenpunkte in einer
Baumstruktur. Jedes Polygon schneidet den 3D-Raum mit seiner Ebene
(gedachte vergrößerte 2Dimensonale Fläche des Polygons, im Bild unten
grün dargestellt) in zwei Teile, einen vor dem Polygon und einen hinter
dem Polygon. Die zwei Teilbäume dieses Polygons enthalten nun die
Polygone die sich vor oder hinter dem Polygon befinden. Polygone die
sich in beiden Teilen befinden müssen zerschnitten werden und das
geschieht mit Hilfe der Nodes. Das Polygon (oder Knotenpunkt-A) besitzt
also zwei Knotenpunkte, B vor dem Polygon und C hinter dem Polygon.
Ist zum Beispiel der Bereich von Knotenpunkt-B (Der Teilraum vor dem
Polygon) im Spiel vom Player zur Zeit nicht einsehbar, brauch alles
nach dem Knotenpunkt-B nicht berechnet und angezeigt werden. Das spart
natürlich eine Menge Rechenleistung. Über dieses Thema läßt sich noch
mehr schreiben, aber dann wird es wohl sicherlich eine Doktorarbeit
werden.
Merke:
Wenn man BSP deaktiviert,wird die BSP nicht optimiert und die
sog. BSP-Trees enstehen sehr chaotisch. Solange die Maps klein und
perfomancemäßig problemlos bleiben, ist das nicht so schlimm. Bei
größeren Projekten ist es aber besser,wenn man die Trees optimiert, da
man mit optimierten Trees durchschnittlich 10%-15% bessere fps-Raten
erreicht. Portals Cut All bedeutet, daß bei jedem ZonePortal ein
BSP-Tree endet und ein neuer beginnt.
Anmerkung: Aus heutige Sicht ist eine solche Optimierung nicht mehr unbedingt notwendig. Es ist auch keine spürbare Verbesserung der Perfomance zu erkennen. Zumindest nicht in den beschriebenen Ausmaßen.
ENDE