Optimieren und überprüfen der Map

Nachdem eine Map kompiliert wurde, sollte man die Performance überprüfen und versuchen, die Map zu optimieren (falls dies nötig ist). In diesem Artikel werden einiger der Features erklärt, mit denen man die Performance überprüfen kann.

Nützliche Konsolen Befehle

Grundsätzlich: Es gibt eine Hilfe für Konsolenbefehle! Tippe einfach help <Befehl> ein, um eine knappe Beschreibung zu erhalten. Ausserdem gibt es einen find Befehl, mit dem man Befehle finden kann, von denen man nur grob den Namen kennt. Tippe zum Beispiel find mat, um alle Befehle mit mat im Namen zu erhalten.

+sv_cheats 0/1 Schaltet die cheats auf dem Server aus/ein. sv_cheats 1 wird für die folgenden Befehle benötigt.
+showbudget Als erstes sollte man +showbudget an einen Key/eine Maustaste binden (über z.B. bind c +showbudget). Showbudget zeigt einem, wie lange die Engine innerhalb eines Frames benötigt, um etwas zu zeichnen. Du wirst sehen, wie lange es z.B. dauert, World Brushes, entity brushes, prop models, Displacements, die 3D-Skybox, Kabel und andere Sachen anzuzeigen. Wenn man nun weiss, dass es in einem Teil des Levels zu viele dynamische props gibt, weil der Balken komplett ausschlägt, sollte man in diesem Teil eventuell die Dynamischen Props reduzieren.
mat_wireframe 0/1/2/3 Mit diesem Befehl schaltet man die Anzeige auf Wireframe um (sowohl für World brushes als auch für alle Models). Dies ist hilfreich, um zu sehen, wie die Brushes durch die Engine aufgeteilt wurde. Ausserdem sieht man, was alles in der entsprechenden Perspektive angezeigt wird. mat_wireframe 2 und 3 unterscheiden sich leicht von 1: Sie zeigen Texturen und Brushwork an.
mat_drawflat 0/1 Schaltet die Anzeige auf Flat-Textured um. Damit kann man zwar nicht alles sehen, das gezeichnet wird, aber es ist eventuell einfacher als bei Wireframe zu sehen, in wie viele Teile eine Wand aufgeteilt wurde.
r_drawdetailprops 0/1 Schaltet prop_details, die automatisch erzeugt wurden an oder aus
mat_leafvis 0/1 Dieser Befehl schaltet die Anzeige des aktuellen Vis-Leafes an, in dem man sich gerade aufhält. Dies ist hilfreich, um zu sehen, wie gross das aktuelle Leaf ist und an welche Bereiche es angrenzt.
mat_bumpmap 0/1 Schaltet die Bumpmap Effekte aus und ein. Damit und mit +showbudget kann man die Performance-einbußen durch Bumpmaps überprüfen.
mat_specular 0/1 Ähnlich dem Befehl mat_bumpmap, nur für Reflektionen.
ent_messages_draw 0/1 Schaltet die Entity Input/Output Aktivität ein. Sobald ein Entity über Input oder Output aktiviert wird, wird eine Linie zwischen den Beteiligten Entities gezeichnet. Kann nützlich sein, um Entity-Aktionen in der Map zu debuggen.
developer 1/2 Zeigt Debugging-Output in der Konsole an. Kann nützlich sein, um Entity-Aktionen in der Map zu debuggen.
cl_showfps 0/1/2 Zeigt die Frames pro Sekunde an. cl_showfps 2 ist langsamer aber einfacher zu lesen.
impulse 81 Ersetzt die aktuelle Waffe durch reflektierende Bälle (models/shadertest/envballs.mdl). Damit kann man überprüfen, ob die Cubemaps richtig gesetzt sind.
impulse 106 Zeigt den Namen des Models/Entities, auf das man zeigt.
impulse 107 Zeigt den Namen des Materials, auf das man zeigt.

Optimiertes Design

Nachdem man nun eventuell weiss, wo man optimieren muss, hier noch ein paar Tricks, die hilfreich sein könnten.

Skybox

Das schlechteste was man seiner Map antun kann: Eine einzige grosse (Sky-)Box um seine Map ziehen. Dadurch werden auch die Bereiche unter der Map gezeichnet und dementsprechend benötigt vvis beim kompilieren deutlich länger. Benutze stattdessen die Skybox nicht als Box, sondern eher als Dach: Die Gebäude sind die Wände, die SkyBox das Dach. Hier ein Beispiel: http://www.student.ru.nl/rvanhoorn/optimization/skybox.PNG

Dynamic Lights

Machen die Map langsamer und werden meistens sowieso nicht benutzt. Wenn Du point_spotlight benutzt, überprüfe die Flags: Hake auf jeden Fall No Dynamic Light an! Ausserdem sollten Lichter möglichst keine Namen bekommen, wenn es nicht unbedingt nötig ist. Wenn ein Licht einen Namen hat, dann wird es von der Engine gesondert behandelt, wodurch es langsamer wird.

Wasser

Benutze es sparsam, wenn Du es unbedingt brauchst. Models, die nicht im Wasser sein müssen, sollten dies auch nicht sein, da das Model sonst doppelt berechnet wird. Ansonsten könnte man mit einem water_lod_control das Wasser auch schlechter aussehen lassen. In der 3D-Skybox sollte Wasser nur verwendet werden, wo es auch wirklich gebraucht wird.

Brushwork

Je weniger Brushes, umso besser. Niemals komplexere Strukturen wie Zylinder carven, da es zu vielen kleinen Brushes führt. Versuche immer, Standard-Grössen (8, 16, 32, 64, 128) zu nehmen, da dies für die Engine einfacher zu berechnen ist und dabei hilft, Leaks zu vermeiden (da keine 1 Unit grossen Löcher entstehen).

Details

Alles was Details sind: Entweder ausmoddeln (als prop_static) oder zu einem func_detail machen. Ein func_wall braucht es nur zu sein, wenn die Wand auch einen Namen benötigt. func_details splitten die Leafs nicht auf, so dass man z.B. alle Kisten und Säulen in einem Raum zu func_detail machen sollte. Ebenso alle Fenstervorsprünge etc. Eben alles, was die Sichtweite innerhalb des Levels nicht einschränkt und dementsprechend das VIS Programm nur „behindert“.

Mit Hilfe der Einstellungsmöglichkeiten des func_detail kann man zudem festlegen, auf welchen Computern dieses gezeigt wird, dies ist dann abhängig von der verwendeten Version von DirectX. So ist es möglich, anstatt einem komplizierten func_detail auf allen Rechnern ein simples func_detail auf Computern mit veralteter DirectX-Version(welche oft mit veralteter Hardware einhergeht) und ein komplexes func_detail auf Rechnern mit moderner Software (und entsprechender Hardware) zu haben. Dies geht jedoch zu Lasten der Größe der Map. Tolle Tips zum Optimieren hier: http://www.student.ru.nl/rvanhoorn/optimization.php

Die nicht sichtbaren Seiten des Brushs (jene, die auf Boden und Wand liegen) sollte man mit der Nodraw-Textur belegen, damit diese Seiten nicht berechnet werden. Das ist aber nur nötig, wenn das entsprechende func_detail nicht auf einem Worldbrush aufliegt. Sollte das func_detail direkt auf einem Worldbrush liegen, lässt VVIS diese Seiten automatisch weg.

Nodraw-Textur

Man sollte sich angewöhnen die Flächen (Faces) eines Brushes mit der Nodraw-Textur zu belegen, sofern sie vom Spieler nicht einsehbar sind. Das ist zwar nicht immer nötig (zum Beispiel bei direkt aneinandergrenzenden Faces oder bei Faces, die nicht Teil einer vom Void abgewandten Hülle sind), kann jedoch hier und da einige Polygone bzw. Frames sparen. Schließlich hat auch Valve das in den offiziellen Maps nicht ohne Grund gemacht…

Sichtbarkeit/Visibility

Wenn Du Deine gesamte Map von einem Punkt aus sehen kannst: Vergiss es, hier kann man nicht mehr viel tun. Mach ein komplettes redesign und teile die Map in kleinere Räume auf.

Achtung: Es wurden kleine Anpassungen zum Original vorgenommen! Original zu finden unter: http://developer.valvesoftware.com/wiki/Optimizing_and_Checking_Your_Map

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
half-life_2/tutorials/map-optimierungen.txt · Zuletzt geändert: 2009/11/28 15:41 von Adrian_Broher