Sichtbarkeits-Flags
Mittels Sichtbarkeits-Flags wird LOTUS mitgeteilt, wann er welches Mesh des Fahrzeuges rendern soll und wann er sich welches Detail sparen kann, um die Performance zu verbessern.
1 Einleitung
Einen erheblichen Teil der Auslastung der Grafikressourcen stellen die sogenannten Drawcalls dar. LOTUS optimiert diese Anzahl von sich aus, indem es beim Export eines Fahrzeuges im Content Tool Objekte mit identischen Eigenschaften (selbe Materialien, also auch selbe Texturen, selbe Animations-Einstellungen, etc.) zusammenfasst. Ein wesentlich größerer Teil der Optimierung kann allerdings nicht von LOTUS selbst durchgeführt werden: Die Entscheidung, wann welches Detail für die Spieler wichtig ist und dargestellt werden muss.
Ein Beispiel:
Eine Bahn mit drei Wagenkästen und zwei identischen Fahrerständen besteht aus einer sehr hohen Anzahl von Unterobjekten, da die einzelnen Schalter und Knöpfe in beiden Fahrerständen, die einzelnen Ebenen der Fensterscheiben und die der Klappfenster, die einzelnen unterschiedlichen Objekte jedes Falttür-Flügels, die Detailobjekte im Wagen, wie Haltewunschtaster und so weiter, von LOTUS in jedem Frame berücksichtigt werden.
Dieses Verhalten kann erheblich optimiert werden, indem der Content-Ersteller für jeden Wagenteil und jedes Cockpit sogenannte "reduzierte Meshs" anlegt, die von bestimmten Perspektiven aus die ausdetaillierten Meshs ersetzen. So wäre dann der zweite Fahrerstand vom ersten Fahrerstand aus zwar sichtbar, aber die Knöpfe wären nicht animiert oder beleuchtet, da diese Details ohnehin von dieser Perspektive aus nicht sichtbar wären.
Es gelten einige Grundsätze zur Optimierung dieser Einstellungen, die im Folgenden erläutert werden.
2 Grundsätze Die möglichen Flags für ein Fahrzeug sind:
Außenansicht (F3) KI / Multiplayer / Fremd Fahrerstand 1 Fahrerstand 2 Fahrgasträume 1-8 Im Fahrzeug können also bis zu zwei Fahrerstände und bis zu acht Fahrgasträume (meistens sind das einzelne Wagen) berücksichtigt werden. Die Entscheidung, welches Unterobjekt (oder Mesh) wann sichtbar sein soll, ist eine Frage dessen, ob es in der geflagten Perspektive nachher vollständig funktionieren muss, das bedeutet also inklusive Animationen oder Materialwechsel (zB zum sichtbaren Leuchten). Muss es das nicht, kann die betroffene Flag entfernt werden. Ein paar Beispiele für typische Entscheidungen:
Türflügel sollten für alle Perspektiv-Flags gesetzt werden, da man den Zustand der Türen (offen, geschlossen oder in Bewegung) von jedem Wagenteil aus sehen können soll und auch bei KI oder Multiplayer-Fahrzeugen. Animierte Türgummis dagegen werden nur dort als sichtbar geflagt, wo man sich nahe genug an der Tür befindet, um das Gummi überhaupt zu sehen: Tür 1 erhält die Flags: Fahrerstand 1, Fahrgastraum 1, Außenansicht Tür 2 erhält die Flags: Fahrgastraum 1, Außenansicht - vom Fahrerstand aus muss man dieses Gummi nicht mehr sehen können, also kann es gespart werden Haltestangen, die in der Regel wegen ihrer Materialeigenschaften und Repaint-Fähigkeit nicht zum Innenmesh gehören, können gruppenweise reduziert werden - es hat sich bewährt, dabei auf einige horizontale Stangen zu verzichten und dafür vertikale Stangen überall zu belassen Cockpit-Schalter, die nicht selber leuchten können, sind ausschließlich im zugehörigen Fahrerstand sichtbar, wohingegen Leuchtmelder oder leuchtende Schalter durchaus zusätzlich vom angrenzenden Fahrgastraum aus sichtbar sein dürfen, um ihr Leuchten auch von dort aus sehen zu können - nicht jedoch bei Fremdfahrzeugen Sollen Fahrgastraum-Leuchten auch "leuchtend" gesehen werden, müssen sie natürlich den Flag erhalten. In manchen Fällen, zB bei einem entfernten Wagenkasten oder beim Fremdfahrzeug ist aber lediglich wichtig, dass der Raum beleuchtet wird und nicht, dass man die Lichtquelle selbst leuchten sieht - und die Beleuchtung des Raumes erfolgt unabhängig vom Sichtbarkeits-Flag des Objekts, das leuchtet! Die einzelnen Ebenen der Fensterscheiben, zum Beispiel Normal, Regen, Dreck und Beklebung müssen auch nicht in jeder Perspektive sichtbar sein. Es muss im Einzelfall entschieden werden, in der Regel kann man aber nicht von allen Perspektiven aus zB Regen oder Dreck wahrnehmen - dann kann die Ebene auch ausgeschaltet werden. Regen oder Dreck im zweiten Fahrerstand zum Beispiel kann für den ersten Fahrerstand auch ausgeschaltet werden, da man ihn eh nicht sieht. Die wichtigsten Flags sind die der Fahrerstände, da sich ein Spieler die allermeiste Zeit des Spielens hier aufhält und dort die beste Performance benötigt. Bei jedem einzelnen Objekt sollte also ganz genau abgewägt werden, ob der Fahrer es beim Umdrehen wirklich animiert, leuchtend oder mit hohem Detailgrad sehen muss. Für die meisten Objekte ist das nicht der Fall und sie können eingespart werden. Jedes entfernte Häkchen bei den Fahrerständen ist ein Erfolg!
Etwas kniffliger ist die Entscheidung, was von außen sichtbar sein soll, da man ja schließlich auch um das gesamte Fahrzeug herumgehen kann und LOTUS hier nicht weiter unterscheidet, wo am Fahrzeug man gerade schaut. Es hat sich bewährt, hier Details einzuschließen, die wirklich wichtig und häufig sichtbar sind, wie Türdetails oder Innenlampen, aber auf Objekte zu verzichten, die lediglich ein Detail des Innenraums sind, wie kleine Tischablagen für den Fahrgast oder Haltewunsch-Taster.
Würde man nach dem Setzen aller Flags für jedes Objekt das Fahrzeug so belassen, würde der Spieler in der Simulation anstelle der Objekte, auf die in der Perspektive verzichtet wurde, ein Loch sehen, was natürlich nicht das Ziel war. Stattdessen kann für jede Flag einzeln oder für mehrere Flags zusammen ein oder mehrere reduzierte Meshs angegeben werden, das in diesen Perspektiven automatisch verwendet wird. Dieses Mesh sollte möglichst viele in dieser Perspektive nicht sichtbaren Objekte zusammenfassen - optimaler Weise nach den strengen Grundregeln der Drawcall-Reduzierung: ein Objekt, ein Material (eine Textur), eine oder identische Einstellungen. Die Gelegenheit, diese Vorgabe zu brechen, sollte nicht existieren, da das Objekt andernfalls (also falls es zum Beispiel doch noch leuchten soll oder animiert werden soll) nicht in das reduzierte Mesh gehören sollte.
Die reduzierten Meshs für die einzelnen Perspektiven enthalten also - nur! - die in diesen Perspektiven nicht sichtbaren Objekte und fassen diese zu möglichst einem einzigen Objekt zusammen. Hierbei können sehr gern auch Details eingespart werden, wie äußerst kleine oder unwichtige oder nicht unbedingt wichtige Objekte. Der Fahrerstand der KI braucht bspw. keine ausmodellierten Schalter.
Zum Abschluss noch eine sehr wichtige Überlegung: LOTUS hat drei Grafik-Optionen, bei dessen Aktivierung er die reduzierten Meshs einer der drei Fahrzeugkategorien (eigenes Fahrzeug, Fahrzeuge im eigenen Zug, Fremdfahrzeuge) ignoriert und stattdessen grundsätzlich alle Detail-Meshs rendert. Diese Option muss der individuelle PC natürlich verkraften können, aber zum Beispiel beim Aufnehmen von Videos ist es vielleicht erwünscht, außergewöhnliche Kameraperspektiven zu wählen und dabei dennoch sämtliche Details zu sehen. Der Wunsch, auch in anderen Perspektiven alle Details zu sehen, sollte also beim Setzen der Flags keinerlei Berücksichtigung finden, da es für diesen Fall ja die Option gibt!
3 Anleitung Ein Fahrzeug im Content-Tool laden Ein Unterobjekt (siehe Liste rechts) auswählen Links den Reiter "Ausgewähltes Mesh" aufklappen Sichtbarkeits-Einstellungen treffen nach folgender Entscheidungsfindung: Muss das Objekt von einer angehakten Perspektive aus separat animiert werden, selbst leuchten oder Ähnliches? Falls Nein: Perspektiv-Flag entfernen und Objekt für das reduzierte Mesh vorsehen. Dazu: Zusätzlich im reduzierten Mesh: Muss das Objekt im reduzierten Mesh vorhanden (also sichtbar) oder ausgestaltet (also von Nahem sichtbar) sein oder kann es entfernt bzw. in vereinfachter Form vorgesehen werden? Nachdem alle Flags final vergeben sind, können unter dem Reiter "Test-Umgebung" die verschiedenen Perspektiv-Flags durchgeschaltet werden. Sind noch keine reduzierten Meshs angelegt, kann man mit dieser Funktion gut erkennen, auf welches Detail noch verzichtet werden könnte.
Um die Flags nachher mit den tatsächlichen Kamera-Perspektiven oder im Ego-Modus mit der Position des Spielers zu verbinden, muss noch festgelegt werden, wo Fahrerstand 1 und 2 sich befinden und wo welcher Fahrgastraum (bis zu 8 ) definiert ist. Da ein echter Wagen in der Regel auch eigene Wagenteile-, Wagennummern oder Fahrerarbeitsplatz-Bezeichnungen hat, kann man sich die Zuordnung zu den Flags notieren, damit man sie nicht versehentlich im Laufe des Setzens der Flags wechselt. Die konventionelle Unterteilung in A-, C- und B-Wagen dann in Fahrgastraum 1, 2 und 3 zu wechseln, kann ab einem bestimmten Überarbeitungsgrad erfahrungsgemäß zu Problemen führen und sollte daher wirklich aufgeschrieben werden. ;)
Die beiden Fahrerarbeitsplätze werden mittels des Cockpit-Indexes identifiziert, 0 und 1. Dieser wird unter den Kamera-Einstellungen der jeweiligen Cockpit-Kamera(s) verwaltet:
Die Fahrgasträume werden nur durch die Angabe der Koordinaten ihrer Übergänge definiert - LOTUS berechnet daraus automatisch die Anzahl der eingerichteten Räume. Es ist somit nicht möglich, aus Gründen die Fahrgasträume 1, 2 und 8 in den Flags zu unterscheiden, da LOTUS bei zwei Übergängen dann die Fahrgasträume 1, 2 und 3 identifizieren wird - auch in genau dieser Reihenfolge!
Da im gewählten Beispiel drei Fahrgasträume vorgesehen sind (es dürften auch mehr sein, was für LOTUS keinen Vor- oder Nachteil ausmacht, da eh von acht ausgegangen wird), werden also zwei Übergänge angegeben. Um die Y-Koordinaten festzustellen, können hier die zufällig unter den Übergängen befindlichen Drehgestelle benutzt werden. Dazu also die Drehgestell-Einstellungen per Doppelklick öffnen und die Koordinaten ablesen. Bitte darauf achten, die richtigen Drehgestelle zu nehmen! :)
Sind alle Feinarbeiten abgeschlossen, empfiehlt es sich, den Schalter für das Plotten der Flag-Einstellungen zu verwenden, der sich unter dem Reiter Testumgebung unter der Flag-Test-Auswahl befindet. Neben der *.lob-Datei des geladenen Fahrzeuges wird dann eine Textdatei angelegt, in der die sichtbaren und unsichtbaren Meshs für alle Flags aufgeführt sind. Hier lassen sich (bei einer hohen Anzahl von Objekten schier unvermeidliche) Unregelmäßigkeiten ausmachen - bspw. ein Objekt im Wagen 1 ist vom zweiten Fahrerstand aus sichtbar, das gleiche Objekt im Wagen 3 aber vom ersten Fahrerstand aus nicht.
Diese Liste kann nun verwendet werden, um im 3D-Programm des Vertrauens die reduzierten Meshs für die einzelnen Perspektiven anzulegen. Mehrere unterschiedliche reduzierte Meshs (zB für jede Perspektive ein eigenes) zu verwenden, hat den Vorteil, dass feiner unterschieden werden kann, was genau von welcher Perspektive aus zusehen ist (um zB zwischen benachbarten und nicht benachbarten Wagen oder Fahrerständen zu unterscheiden), aber den Nachteil, dass das Gesamtobjekt natürlich umfangreicher wird.
Die reduzierten Meshs werden nach dem Import mit den entsprechenden Sichtbarkeitsflags versehen und dem Haken "ist ein reduziertes Mesh", damit es von der Option, es im eigenen Fahrzeug zu ignorieren, auch als solches erkannt wird. Die reduzierten Meshs sollten nicht während der intensiven Bau-Phase angelegt werden, da sie sich mit den nicht reduzierten Meshs exakt ausschließen müssen und nicht gleichzeitig sichtbar sein sollten, um Flackern und Flimmern zu verhindern. Das bedeutet, dass wenn nachträglich Sichtbarkeits-Flags verändert werden, das Gegenstück (das reduzierte Mesh) ebenfalls angepasst und neu importiert werden muss.
4 Tipps und Tricks Im Folgenden noch ein paar Kniffe aus der Praxis:
Drehgestelle sind zwar normalerweise nicht von innen sichtbar, fährt ein längeres Fahrzeug aber in einer Kurve, könnte man vom hinteren Wagen aus die Drehgestelle des vorderen Wagenkastens sehen und umgekehrt - und wären diese dann nicht animiert, könnte es schnell doof aussehen. Das selbe gilt für auffällige Detail-Anbauten außen, wie Blinker oder Scheinwerfer. Hier sollte man also regelmäßig überprüfen, ob das Detail nicht doch wichtig genug ist, als dass man es in besonderen Situationen, wie in einer Kurve fahrend, anständig sehen können soll. Für die Fahrerstände empfehlen wir, ggf. darauf zu verzichten. Einerseits soll man sich ja auf das Fahren konzentrieren und nicht dauernd nach hinten schauen und den Zug so genau beobachten, dass man nicht animierte Achsen oder nicht selbst-leuchtende Blinker des eigenen Fahrzeuges bemerken würde, andererseits soll im Fahrerstand ja anständig, aber unauffällig gespart werden - die erwähnten Details sind definitiv Kandidaten zum Einsparen. Einfach mal ausprobieren, es hängt sicher auch vom individuellen Fahrzeug ab. Im selben Maße können bestimmte Details im Innenraum von von einander benachbarten Wagen aus sichtbar sein (nicht vergessen: sichtbar heißt im Zusammenhang mit der Flag, dass sie animiert werden können oder leuchten, was ja der Grund dafür ist, dass sie ein eigenes Unterobjekt sind -- allgemein sichtbar (statt eines Loches) werden sie ja durch das reduzierte Mesh, falls nötig). Die Trittstufen einer Tür in der Nähe eines Übergangs oder auch Klappfenster zum Beispiel werden vom Fahrerstand aus eingespart, sind aber im eigenen und im angrenzenden Wagen animiert und werden daher für diese Perspektiven nicht in das reduzierte Mesh verfrachtet. Beim reduzierten Mesh kann auf viele Details ganz verzichtet werden, wie ein Teil der (vor allem vertikalen) Haltestangen oder den Verbindungsmuffen der verbliebenen Haltestangen, usw. Wichtig ist, dass bei der Reduktion auch die zusätzlichen Schreiben nicht vergessen werden! Unter Umständen reichen 1-2 Fenster-Ebenen (zum Beispiel normal und vielleicht noch Werbung) vollkommen aus. Fremdfahrzeuge (KI / Multiplayer) sieht man übrigens immer nur von außen (vielleicht von Nahem von außen), aber nie von innen, da man im Moment des Betretens das Fahrzeug (zumindest temporär) zum Userfahrzeug macht. Es ist empfehlenswert, Innenscheiben von außen nicht sichtbar zu machen, auch wenn dies den Idealisten weh tut. :) Im Gegenzug aktiviert ja die Grafik-Option wieder alle Meshs, wenn man Wert darauf legt, die Innenseite des Werbedrucks auf der gegenüberliegenden Seite von außen zu sehen. KI-Modelle sollten aufgrund der potentiellen Anzahl von Fahrzeugen im Sichtfeld äußerst sparsam angelegt werden! Der Fahrer sieht zudem im Rückspiegel sein eigenes Fahrzeug als KI-Modell. 5 Beispiele Abschließend seien hier ein paar Beispiele genannt, an denen man sich zunächst orientieren kann. Wichtig ist, dass ein "einfaches" Mesh, was unter bestimmten Umständen ein "komplexes" Mesh ersetzen soll, stets genau die "umgekehrten" Sichtbarkeitsflags hat.
Die erste Tabelle zeigt nun die empfohlenen Sichtbarkeitsflags für verschiedene Meshs:
Die folgende Tabelle nimmt hierbei nun darauf Bezug und zeigt auf, aus welchen Perspektiven das Mesh abhängig von den Einstellungen bei LOTUS sichtbar ist. In der Kopfzeile ist jeweils kodiert, welche Optionen ein- und ausgeschaltet sind:
X X X = Reduzierte Meshs im eigenen Fahrzeug, im eigenen Zug und für Fremdfahrzeuge sind EINgeschaltet O X X = Nur reduzierte Meshs im eigenen Zug und für Fremdfahrzeuge sind EINgeschaltet, reduzierte Meshs im eigenen Fahrzeug ist dagegen AUSgeschaltet O O X = Nur reduzierte Meshs für Fremdfahrzeuge ist EINgeschaltet, die anderen beiden AUSgeschaltet O O O = Alle drei Optionen sind AUSgeschaltet