Material-Eigenschaften: Unterschied zwischen den Versionen
K (1 Version importiert: Init) |
(Updated from LOTUS Lexicon on 2025-01-21) |
||
Zeile 1: | Zeile 1: | ||
{{ArticleMetadata | |||
|author=Janine | |||
|created_date=2017-04-25T14:48:06+02:00 | |||
|modified_date=2020-11-17T22:07:13+01:00 | |||
|source_url=https://www.lotus-simulator.de/lexikon/index.php?entry/21-material-eigenschaften/ | |||
}} | |||
Material-Eigenschaften definieren, wie ein Material aussieht und "sich verhält" | Material-Eigenschaften definieren, wie ein Material aussieht und "sich verhält". | ||
== 1 Material-Typ == | |||
Die wichtigste und zuerst einzustellende Material-Eigenschaft ist der **Material-Typ**. Der Material-Typ legt den grundsätzlichen Charakter des Materials fest. Je nach Materialtyp kann der Render-Aufwand erheblich variieren und ebenso können sich die weiteren Materialeigenschaften erheblich unterscheiden. | |||
Intern entspricht jeder Material-Typ einem Shader-Satz. | Intern entspricht jeder Material-Typ einem Shader-Satz. | ||
Momentan verfügt LOTUS über folgende Materialtypen: | Momentan verfügt LOTUS über folgende Materialtypen: | ||
** _Simple_ : Dieses Material lässt sich recht effizient rendern, unterstützt dafür aber nur Transparenz (weich/hart), Glanz (ggf. über den Alphakanal), Schnee und Nachttextur. Damit ist es vor allem für normale Szenerieobjekte geeignet. | |||
** _Direct Texture, no light:_ Dieses Material rendert NUR eine Textur, ohne jeden Effekt | |||
** _Terrain_ : Dieses Material ist insbesondere für die Materialien der Boden-Polygone im Map-Editor vorgesehen. Gegenüber _Simple_ verfügt es zwar nicht über Schnee (der wird auf dem Boden anders realisiert) und Nachttextur, dafür aber über eine Detailtextur, die dem Material in naher Distanz eine zusätzliche Struktur gibt. | |||
** _Complex_ : Dieses Material ist ein universell einsetzbares Material, insbesondere für normale Fahrzeug-Fächen. Neben den Effekten von _Simple_ kann eine Detailtextur und Ambient Occlusion ergänzt werden sowie die Intensität der Nachttextur vorgegeben werden. | |||
** _Complex with normal map_ : Wie _Complex_ , jedoch zusätzlich mit einer Normalen-Textur und der Möglichkeit von Relief Mapping | |||
** _Raindrops:_ Spezialmaterial für regennasse Fensterscheiben. Wird im entsprechenden Artikel beschrieben. | |||
** _Human:_ Wird später für KI-Menschen verwendet. Bitte nicht benutzen. | |||
** _Complex+Normal+Simple Meshanim:_ Erweiterung von _Complex with normal map:_ Mit diesem Material kann eine einfache Meshanimation realisiert werden. Siehe [[https://www.lotus-simulator.de/lexikon/index.php?entry/37-mesh-animationen/|Mesh-Animationen]] | |||
** _User Vehicle Windows:_ Spezialmaterial, welches _dringend_ für die Innenseite der Frontscheibe verwendet werden sollte! Dieses Material wird mit der Grafik-Option "Beleuchtete Frontscheibe" gekoppelt. Hierbei ergibt sich u.U. ein erheblicher Performancegewinn! | |||
** _Roller Blind Display:_ Spezialmaterial für Rollband-Anzeigen. Siehe [[https://www.lotus-simulator.de/lexikon/index.php?entry/145-tutorial-rollbandanzeige/|Tutorial: Rollbandanzeige]] . | |||
== 2 Auf die Schnelle: Einstellungen für einfache Effekte == | |||
2 | |||
Als Motivation, für den schnelleren Einstieg und gleichzeitig als Beispiel für die einzelnen Parameter, die anschließend detaillierter beschrieben werden, hier einige typische Effekte und die nötigen Einstellungen: | |||
== 2.1 Material ohne Transparenz == | |||
** Blendmodus _Normales Rendern_ | |||
** _Min. Alpha_ = 0 | |||
== 2.2 Material mit "weicher" Transparenz == | |||
** Standard-Textur muss über entsprechenden Alphakanal verfügen (schwarz = transparent, weiß = keine Transparenz) | |||
** Blendmodus _Alpha-Transparenz_ | |||
** _Min. Alpha_ = 0 oder ggf. zur Reduzierung von eventuellen Reihenfolgefehlern 0.1 bis 0.5 | |||
== 2.3 Material mit "harter" Transparenz == | |||
** Blendmodus _Normales Rendern_ | |||
** _Min. Alpha_ = 0.5 (0.1 bis 0.9, je nachdem, wie viel "stehenbleiben" soll) | |||
== 2.4 Mattes Material == | |||
** _Glanz-Faktor_ = 0 | |||
** _Alpha-Wert für Glanz nutzen_ aus | |||
== 2.5 Konstant seidenmattes Material == | |||
** _Glanz-Faktor_ = 0.25 | |||
** _Helligkeit des Glanzpunktes_ = 1 | |||
** _Alpha-Wert für Glanz nutzen_ aus | |||
** _Seidenmattere Charakteristik_ an | |||
== 2.6 Konstant hochglänzendes Material == | |||
** _Glanz-Faktor_ = 1 | |||
** _Helligkeit des Glanzpunktes_ = 1 | |||
** _Alpha-Wert für Glanz nutzen_ aus | |||
== 2.7 Material mit variierendem Glanz == | |||
** Standard-Textur muss über entsprechenden Alphakanal verfügen (schwarz = matt, weiß = hochglänzend) | |||
** _Glanz-Faktor_ = 1 | |||
** _Helligkeit des Glanzpunktes_ = 1 | |||
** _Alpha-Wert für Glanz nutzen_ ein | |||
** _Seidenmattere Charakteristik_ aus | |||
== 2.8 Material mit Nachttextur, die automatisch (global) geschaltet wird == | |||
** _Gebäude-Nachtvariable_ an Variable _NightTex_ koppeln | |||
** Die vorbereitete Textur bei _Nachttextur_ eintragen | |||
** Bei _Complex_ oder _Complex with normal map_ : _Helligkeit der Nachttextur_ = 1 | |||
== 2.9 Material mit Nachttextur, die stets aktiv ist == | |||
** _Gebäude-Nachtvariable_ = 1 | |||
** Die vorbereitete Textur bei _Nachttextur_ eintragen | |||
** Bei _Complex_ oder _Complex with normal map_ : _Helligkeit der Nachttextur_ = 1 | |||
== 2.10 Schneetextur mit kompletter Abdeckung == | |||
** _Alpha-Wert für Schneemenge nutzen_ aus | |||
** _Schneetextur_ = _snow.dds_ (oder ggf. eigene Textur auswählen) | |||
== 2.11 Schneetextur mit Abdeckung abhängig vom Untergrund == | |||
** Standard-Textur muss über entsprechenden Alphakanal verfügen (schwarz = kein Schnee, weiß = wird komplett beschneit) | |||
** _Alpha-Wert für Schneemenge nutzen_ ein | |||
== 3 Begriffsklärung Alphakanal == | |||
Für einige Einstellungen ist der Begriff _Alphakanal_ von entscheidender Bedeutung. | |||
== 3.1 Allgemein == | |||
Auch wenn landläufig der Alphakanal oft mit Transparenz gleichgesetzt wird, ist dies so nicht unbedingt zutreffend! | |||
Für die Darstellung einer Textur werden für jeden Pixel lediglich ein Rot-, ein Grün- und ein Blau-Wert benötigt. Für die gesamte Textur spricht man auch von _Kanälen_. Aus technischen Gründen bietet aber jeder Pixel noch Speicher für einen vierten Wert, der Alpha-Wert getauft wurde. Jede Textur verfügt also über vier Kanäle: Den roten, den grünen, den blauen und den _Alphakanal_. | |||
== 3.2 Textur- und resultierender Alphakanal == | |||
Wenn ein Pixel mit einem bestimmten Material gerendert wird, dann kann man dies als "Rechenaufgabe" verstehen: Hinein gehen diverse Texturinformationen und Parameter und heraus kommt die Farbe und der Alpha-Wert des Pixels. | |||
Im Folgenden wird daher unterschieden zwischen dem Alphakanal der jeweiligen Textur und dem _resultierenden Alphakanal_ , d.h. dem jeweiligen Alpha-Wert des fertigberechneten Pixels. | |||
== 4 Script- und Variablen-Einbindung == | |||
Die meisten Material-Eigenschaften können wahlweise über Konstanten fest eingestellt oder über Variablen gesteuert werden. | |||
[[https://www.lotus-simulator.de/index.php?attachment/3103-pasted-from-clipboard-png/|[[File:https://www.lotus-simulator.de/index.php?attachment/3103-pasted-from-clipboard-png/ "pasted-from-clipboard.png"|https://www.lotus-simulator.de/index.php?attachment/3103-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]]]] | |||
Solche Parameter verfügen nicht nur über ein Eingabefeld für den jeweiligen Wert, sondern dahinter auch über einen Haken und eine Auswahl-Box. Über die Auswahl-Box kann nun eine globale oder vom eingebundenen Script bereitgestellte Variable ausgewählt werden, wodurch automatisch der Haken gesetzt wird. | |||
In der Folge wird die Variable den Wert dieser Eigenschaft steuern. Wichtig ist aber, dass insbesondere bei Fließkomma-Zahlen der Variablenwert mit der davor stehenden Konstante multipliziert wird! Es sollte also dann vorne "1" eingetragen werden, um den Variablenwert 1:1 zu übernehmen. | |||
Um die Variablen-Anbindung wieder zu deaktivieren, muss lediglich der Haken wieder entfernt werden. | |||
== 5 Material-Einstellungen == | |||
Im Folgenden werden die Material-Eigenschaften im Detail beschrieben. Es werden hierbei die Parameter nach den verschiedenen Effekten gruppiert beschrieben. Im Einstellungsdialogfeld tauchen diese Parameter aber an unterschiedlichen Stellen auf, da sie dort nach ihrem Datentyp sortiert auftreten. | |||
== 5.1 Transparenz == | |||
Es gibt vier Möglichkeiten für Transparenz: Hart, weich, additiv und Multiplikation. | |||
== 5.1.1 Hart == | |||
Hierbei ist das Material entweder zusehen oder nicht, die Kanten sind also hart und es kann keine Halbtransparenz dargestellt werden. Hierfür muss die Standard-Textur über einen Alphakanal verfügen, wobei 0/schwarz = transparent und 1/weiß = nicht transparent gilt. | |||
Hierfür muss die Variable _Min. Alpha_ auf 0.5 gesetzt werden. Es können auch andere Werte > 0 oder < 1 gesetzt werden, dementsprechend verschiebt sich die "Schneidgrenze". | |||
== 5.1.2 Weich == | |||
Hierbei ist der Übergang zwischen nicht transparent, halbtransparent und ganz transparent fließend. Nachteil ist allerdings, dass die Zeichen-Reihenfolge eine ganz entscheidende Rolle spielt und der Effekt somit zu Problemen führen kann: Bisweilen sind Objekte hinter der transparenten Fläche nicht sichtbar und es entwickelt sich ein "Röntgenblick". Es ist daher, wenn möglich, die "harte" Transparenz zu wählen; allerdings ist die weiche Transparenz bei halbtransparenten Objekten wie Glasscheiben unumgänglich. | |||
Es gibt zwei Möglichkeiten: Entweder konstant halbtransparent - dafür wird kein Alphakanal benötigt. Hierfür wird der _Blendmous_ auf _Halbtransparent_ gestellt. | |||
Oder der Alphakanal steuert die Transparenz: Hierfür muss die Standard-Textur natürlich über einen Alphakanal verfügen, wobei 0/schwarz = transparent und 1/weiß = nicht transparent gilt. Außerdem muss der _Blendmodus_ auf _Alpha-Transparenz_ eingestellt werden. | |||
Insbesondere in diesem Fall gibt es noch den speziellen _Faktor über den Alpha-Kanal_ , mit welchem die Transparenz zusätzlich manipuliert werden kann. Wird hier beispielsweise eine Script-Variable verknüpft, dann kann das Script die Transparenz steuern, indem es die Variable zwischen 0 und 1 einstellt. | |||
== 5.1.3 Additiv == | |||
Diese Form der Transparenz nutzt keinen Alphakanal, sondern die eigentliche Farbe der zu zeichnenden Fläche, wobei diese den Hintergrund aufhellt. Je heller die Farbe ist, desto stärker wird der Hintergrund aufgehellt - ist die Flächenfarbe schwarz, passiert nichts. Hierfür wird der _Blendmodus_ auf _Additives Rendern_ oder _Echte Addition_ gestellt, wobei _Additives Rendern_ etwas korrigiert wird, damit es natürlicher wirkt, _Echte Addition_ aber mathematisch exakt durchgeführt wird. | |||
== 5.1.4 Multiplikatives Rendern == | |||
Dieser Blend-Modus wirkt wie ein (Farb)-Filter. Hiermit kann man z.B. eine getönte Scheibe realisieren, wobei der Farbwert des Materials der Tönungsfarbe entspricht. | |||
== 5.1.5 Mit zunehmender Entfernung ausblenden == | |||
Sofern der Materialtyp "Complex with Normal Map" gewählt und vom Alphakanal gesteuerte, weiche Transparenz aktiviert wird, ist es möglich, das Mesh mit zunehmender Entfernung allmählich transparenter werden zu lassen, bis es schließlich vollständig unsichtbar ist. Hierzu muss der Wert von _"Mit zunehmender Entfernung ausblenden"_ auf einen Wert größer 0 und üblicherweise kleiner als 1 gestellt werden. Je kleiner der Wert, desto weiter ist das Objekt sichtbar. Während sich dieser Bereich bei einem Wert von "1" nur in der Größenordnung eines Meters bewegt, steigt er bei "0,1" auf 10m und bei "0,01" auf 100m. | |||
== 5.2 Glanz == | |||
== 5.2.1 Beleuchtung und Glanzpunkt == | |||
Der eine Teil des Glanzes ist die Frage, wie das Objekt auf die Beleuchtung der umliegenden Lichtquellen reagiert. Objekte können matt, seidenglänzend oder hochglänzend (oder eine beliebige Charakteristik darzwischen) dargestellt werden und der Glanzfleck kann heller oder dunkler sein. | |||
Zunächst ist zu unterscheiden, ob der Alphakanal der Standardtextur für den Glanz zuständig sein soll oder die Parameter konstant sein sollen. Je nachdem ist die Option _Alpha-Wert für Glanz nutzen_ ein- oder auszuschalten. | |||
Gesteuert wird der Glanz über die Parameter _Glanz-Faktor_ und _Helligkeit des Glanzpunktes_. Bei konstantem Glanz kann mit _Glanz-Faktor_ eingestellt werden, ob das Objekt matt (0), seidenmatt (0.1 oder 0.25, s.u.) oder hochglänzend (1) dargestellt werden soll. | |||
Wenn der Alphakanal aktiviert ist, dann wird dieser mit dem Parameter _Glanz-Faktor_ multipliziert, sodass dieser den Maximalwert darstellt. Demzufolge sollte bei aktiviertem Alphakanal der Wert _Glanz-Faktor_ normalerweise den Wert 1 haben. | |||
_Helligkeit des Glanzpunktes_ sollte normalerweise auf 1 eingestellt sein; mit ihm kann bei Bedarf der Glanzeffekt heller oder dunkler eingestellt werden. | |||
Wichtig ist außerdem der Haken _Seidenmattere Charakteristik:_ Für Objekte, bei denen der Alpha-Kanal vor allem dafür verwendet wird, hochglänzende und matte Oberflächen zu unterscheiden, wie z.B. bei Gebäuden, sollte der Haken aus sein. Die Zuordnung Alphawert ==> Glanz ist dann dafür optimiert, den Übergang Hochglanz/Matt mit möglichst wenig Fehlern darzustellen. | |||
Wenn es jedoch darum geht, mit dem Alpha-Wert (oder auch ohne Verwendung des Alphakanals) eine Vielzahl verschiedener Glanzstärken zu erzeugen, dann empfiehlt es sich, den Haken _Seidenmattere Charakteristik_ anzuschalten, da dann eine bessere Steuerung möglich ist. | |||
Hier einige exemplarische Glanz-Faktoren mit _eingeschaltetem_ Haken _Seidenmattere Charakteristik_ mit den jeweiligen Ergebnissen, angewendet auf eine graue Test-Kugel: | |||
[[https://www.lotus-simulator.de/index.php?attachment/348-glanz-small-png/|[[File:https://www.lotus-simulator.de/index.php?attachment/348-glanz-small-png/ "Glanz_small.png"|https://www.lotus-simulator.de/index.php?attachment/348-glanz-small-png/ "Glanz_small.png"]]]] | |||
== 5.2.2 Reflexionstextur == | |||
Ein technisch völlig anderer Effekt sind Reflexionstexturen. Reflexionstexturen sorgen für eine scheinbar mehr oder weniger spiegelnde Oberfläche, in dem sie die Umgebung des Objektes wiedergeben. Diese kann entweder eine von LOTUS selbst in Echtzeit generierte Abbildung der Umgebung sein ("Echtzeitreflexionen") oder über eine konstante Textur, die im Vorfeld bereits erzeugt wurde. | |||
Gesteuert wird die Reflexion über den _Blend-Faktor der Reflexionstextur._ Dieser gibt an, wie stark die Reflexionstextur sichtbar sein soll. Zusätzlich sorgt die bereits bekannte Option _Alpha-Wert für Glanz nutzen_ dafür, dass der Blend-Faktor zusätzlich mit dem Alphakanal multipliziert wird. | |||
Natürlich muss eine Reflexionstextur ausgewählt werden. Standardmäßig liefert LOTUS die beiden Texturen _sharp_envir.bmp_ und _smooth_envir.bmp_ mit. Es können aber wahlweise auch eigene Texturen verwendet werden - es muss sich dann aber um eine sogenannte Cube Map handeln (<https://en.wikipedia.org/wiki/Cube_mapping>). LOTUS bietet die Möglichkeit, Cube Maps auch als Screenshot herzustellen; dies führt an dieser Stelle aber zu weit. | |||
Die Besonderheit bei _sharp_envir.bmp_ und _smooth_envir.bmp_ ist, dass sie automatisch ausgetauscht werden, wenn der User die Grafikoption für Echtzeitreflexionen einschaltet. Der Unterschied zwischen den beiden ist, dass die eine die Umwelt scharf wiedergibt (für verchromte/verspiegelte Oberflächen oder Glas) oder unscharf wiedergibt (für normales Metall usw.). | |||
Wichtig: Die Reflexionstextur kann zwar mit der besagten Option abhängig vom Alphakanal eingestellt werden, ist aber _immer unabhängig_ von _Glanz-Faktor_ und _Helligkeit des Glanzpunktes!_ | |||
== 5.3 Nachttextur == | |||
Die Nachttextur wird über die Standardtextur (additiv) gelegt und ist immer "hell", d.h. unabhängig von Sonnenstand und sonstiger Beleuchtung des Objektes. D.h. sie "leuchtet". | |||
Die Textur selbst kann bei _Nachttextur_ ausgewählt werden. | |||
Im Normalfall wird die Nachttextur einfach zur normalen Textur hinzugefügt. Es ist aber alternativ möglich, dass die Nachttextur keine "eigene" Struktur besitzt, sondern nur die normale Textur "aufhellt", d.h. mit ihr multipliziert wird. Hier muss die Option _Nachttextur mit normaler Textur multiplizieren_ eingeschaltet werden. | |||
== 5.3.1 Automatischer Modus / Gebäude-Nachttextur == | |||
Um den "Automatikbetrieb" zu aktivieren, muss für die Option _Gebäude-Nachtvariable_ die Variable "NightTex" ausgewählt werden. Um die Nachttextur dauerhaft zu aktivieren, wird hier lediglich 1 eingestellt. Für den Automatikbetrieb kann die Nachttextur ihrerseits ebenfalls über einen Alphakanal verfügen, welcher dann steuert, welche Bereiche wann aktiviert werden sollen. Details hierzu werden hier **_(fehlt!)_** erläutert. | |||
Manueller Modus / Script-gesteuert | |||
Wahlweise kann die Nachttextur auch direkt über das Script gesteuert werden. Hierfür wird bei _Gebäude-Nachtvariable_ 0 eingestellt und darauf geachtet, dass keine Variable eingetragen ist. Dann kann die Textur direkt über den Wert _Helligkeit der Nachttextur_ gesteuert werden. | |||
Wenn die Nachttextur manuell gesteuert wird, dann sollte sie auch nicht über einen Alphakanal verfügen. | |||
== 5.4 Translumination == | |||
Hiermit ist gemeint, dass das Licht durch Objekte durchscheinen kann. Typisches Beispiel sind die Blätter eines Baumes; wenn man einen Baum im Gegenlicht betrachtet, dann sieht man, dass die Blätter hell strahlen, weil die Sonne von der gegenüberliegenden Seite aus durchscheint. | |||
Die Transluminationstextur wird unter _Nachttextur_ eingetragen, dazu aber die Option _Translumination_ eingeschaltet. | |||
== 5.5 Retroreflexion == | |||
Retroreflexion ist der Fachbegriff für den Licht-Effekt, den man von Rückstrahlern/"Katzenaugen" und Verkehrsschildern u.Ä. kennt: Das auftreffende Licht wird genau in die Richtung zurückgeworfen, aus der es kommt, sodass das Objekt besonders dann sehr hell zusehen ist, wenn es aus ungefähr derselben Position wie die Lichtquelle betrachtet wird, z.B. wenn man im Dunkeln mit eingeschalteten Scheinwerfern vorne aus dem Auto auf Verkehrsschilder usw. schaut. | |||
Dieser Effekt steht nur dem "Complex"-Materialtyp zur Verfügung und wird über zwei Retroreflexion-Häkchen im Abschnitt "[[https://www.lotus-simulator.de/lexikon/index.php?entry/78-optionen/|Optionen]] und ganzzahlige Werte" gesteuert. Mit dem Ersten wird die Retroreflexion aktiviert und gilt zunächst für die ganze Fläche. Mit dem Zweiten kann man dafür sorgen, dass die Intensität abhängig vom Alphakanal der Haupttextur gesteuert wird. | |||
== 5.6 Schneetextur == | |||
LOTUS verfügt über einen automatischen Schnee-Effekt. Hierzu wird eine beliebige Schnee-Textur, für die jedoch im Normalfall die "snow.dds" verwendet werden sollte, von oben senkrecht auf das Objekt projeziert. Die Sichtbarkeit variiert abhängig von der gefallenen Schneemenge und dem Neigungswinkel der jeweiligen Fläche, sodass also steile Dachflächen automatisch weit weniger Schnee abbekommen als Flachdächer. | |||
Eingestellt wird die Schnee-Textur im gleichnamigen Parameter. | |||
Bei besonders strukturierten Flächen, wie z.B. Dachziegeln, kann zusätzlich der Alphakanal hinzugezogen werden, um die Intensität zu beeinflussen; in der Folge lässt sich auch die ursprüngliche Struktur trotz Schnee erkennen. Hierfür muss lediglich der Haken bei _Alpha-Wert für Schneemenge nutzen_ gesetzt werden. | |||
== 5.7 Detail-Textur (nur _Terrain_ , _Complex_ , _Complex with normal map,_ _Complex+Normal+Simple Meshanim_ und _Roller Blind Display_ ) == | |||
Damit Flächen sowohl bei ferner als auch naher Betrachtung über einen ausreichenden Detailgrad verfügen, ist es möglich, die "großflächige" Standardtextur mit einer "kleinräumigen" Detail-Textur zu versehen, die eingemischt wird. Bei naher Betrachtung dominiert also die Detail-Textur die Struktur, bei entfernter Betrachtung die Standardtextur. | |||
Die Detail-Textur kann über den gleichnamigen Parameter aktiviert werden. Um welchen Faktor die Detail-Textur kleiner ist, steuert der Parameter _Skalierung der Detailtextur_. | |||
Die Arbeitsweise unterscheidet sich je nachdem, ob der Haken "Alpha-gesteuerte Detailtextur" gesetzt wird, oder nicht. | |||
Falls er _nicht_ gesetzt ist, dann wird die Mischung so vorgenommen, wie es für die Bodenpolygone empfehlenswert ist. Siehe auch [[https://www.lotus-simulator.de/lexikon/index.php?entry/46-detailtexturen/|Detailtexturen]]. | |||
_Falls_ er gesetzt ist, dann muss der Alphakanal der Standard-Textur vorhanden sein und dieser wird _ausschließlich_ für das Mischungsverhältnis genutzt: 0/Schwarz = keine Detailtextur, Standardtextur dominiert, 1/Weiß = nur Detailtextur, Standardtextur unsichtbar. Hinzu kommt noch eine Spezialität: Zwar wird der Alpha-Kanal der Standard-Textur so gemappt, wie die Textur im 3D-Programm ursprünglich gemappt wurde, jedoch werden die Farben der Standard-Textur selbst so gemappt, wie die Detailtextur! | |||
Genau genommen werden also eigentlich zwei [[https://www.lotus-simulator.de/lexikon/index.php?entry/46-detailtexturen/|Detailtexturen]] gegeneinander abgemischt, abgemischt über den "normal" gemappten Alphakanal. | |||
== 5.8 Ambient Occlusion (nur Complex, Complex with normal map, Complex+Normal+Simple Meshanim und Roller Blind Display) == | |||
Ambient Occlusion ist eine Technik, bei der die weichen Schatten, die sich infolge der indirekten Umgebungsbeleuchtung ergeben, vorberechnet und in eine separate Textur gespeichert werden. Der Hintergrund ist der sehr hohe Rechenaufwand, der heutzutage eine Echtzeitberechnung nicht erlaubt und die Tatsache, dass die Umgebungsbeleuchtung näherungsweise konstant ist. | |||
Es gibt drei Möglichkeiten, wie Ambient Occlusion (kurz AO) in LOTUS realisiert werden kann: | |||
** Pro Mesh-Eckpunkt: Hierbei werden die Helligkeitsinformationen in den einzelnen Eckpunkten des Meshs gespeichert. Dies kann direkt im ContentTool durchgeführt werden. Hierzu das Mesh auswählen, links auf _Ausgewähltes Mesh_ klicken, ganz unten im Abschnitt _Per-Vertex-Ambient Occlusion_ die Qualität einstellen und auf _Generieren_ klicken. | |||
In den Materialeigenschaften ist dann der Haken _AO-Textur aktivieren_ _nicht_ gesetzt. | |||
** Mit einer AO-Textur, die genauso gemappt wird, wie die Haupttextur: Hierzu werden in den Material-Eigenschaften die Haken _AO-Textur aktivieren_ und _AO verwendet das originale Mapping_ gesetzt und es wird bei _Ambien Occlusion (AO) Textur_ die entsprechend angefertigte AO-Textur eingestellt | |||
** Mit einer AO-Textur, die mit abweichenden Texturkoordinaten gemappt werden soll: Hierzu wird in den Material-Eigenschaften der Haken _AO-Textur aktivieren_ gesetzt und der Haken _AO verwendet das originale Mapping_ _nicht_ gesetzt und es wird bei _Ambien Occlusion (AO) Textur_ die entsprechend angefertigte AO-Textur eingestellt. Außerdem muss das importierte Mesh über sekundäre Texturkoordinaten verfügen (s.u.). | |||
In allen Fällen kann die Intensität der AO mit dem Parameter _Intensität der AO-Textur_ justiert werden. | |||
Siehe hierzu bitte auch den Hauptartikel: [[https://www.lotus-simulator.de/lexikon/index.php?entry/27-ambient-occlusion-einrichten/|Ambient Occlusion einrichten]] | |||
Normalen-Textur (nur Complex with normal map und Complex+Normal+Simple Meshanim) | |||
Die Lage einer Fläche im Raum wird u.A. über die sogenannte Normale beschrieben. Hierbei handelt es sich um eine gedachte Linie (Vektor), die senkrecht auf der Fläche steht. Sie beeinflusst insbesondere, wie die Berechnung des Lichteinfalls und des Glanzes erfolgt. | |||
Mittels einer Normalen-Textur lässt sich nun diese Information mittels einer eigenen Textur beeinflussen. Hierdurch können beispielsweise feine Strukturen wie Nieten oder Beulen im Material simuliert werden, die das Licht anders reflektieren als ihre Umgebung. Landläufig wird auch von einer _Bump-Map_ gesprochen, was aber insofern nicht korrekt ist, weil eine _Bump-Map_ eine andere Information enthält als eine Normalen-Textur (lokaler Höhenunterschied statt Flächennormale). | |||
Im Dialogfeld muss hierfür lediglich der Materialtyp und unter "Normal-Textur" eine Textur ausgewählt werden. Allerdings müssen die betroffenen Meshs auch mit zusätzlichen Tangenten-Informationen versehen werden - siehe hierzu die allgemeine Beschreibung des Object & Vehicle Tools. **_(fehlt!)_** | |||
Die Intensität der Normalen-Textur lässt sich mit dem Faktor _Intensität der Normal-Textur_ justieren. | |||
== 5.9 Parallax Mapping == | |||
Hierbei handelt es sich um ein Verfahren, bei dem dem Betrachter eine räumliche Tiefe nicht nur durch die Beeinflussung der Normalen vorgegaukelt wird, sondern bei dem bei schräger Betrachtung tatsächlich einen vertikalen Versatz der Struktur erkennen kann, wie im folgenden Beispiel erkennbar: | |||
[[https://www.lotus-simulator.de/index.php?attachment/604-parallaxocclusion-png/|[[File:https://www.lotus-simulator.de/index.php?attachment/604-parallaxocclusion-png/ "ParallaxOcclusion.png"|https://www.lotus-simulator.de/index.php?attachment/604-parallaxocclusion-png/ "ParallaxOcclusion.png"]]]] | |||
Die Konfiguration des Materials erfolgt zunächst wie bei einer Normalen-Textur. Zusätzlich benötigt der Effekt eine Normalen-Textur _mit einem Alphakanal_ , der die Höheninformationen enthält. Die zum Beispiel zugehörige Normal-Map enthält folgenden Alpha-Kanal: | |||
[[https://www.lotus-simulator.de/index.php?attachment/606-parallaxocclusion-normalalphamap-png/|[[File:https://www.lotus-simulator.de/index.php?attachment/606-parallaxocclusion-normalalphamap-png/ "ParallaxOcclusion_NormalAlphaMap.png"|https://www.lotus-simulator.de/index.php?attachment/606-parallaxocclusion-normalalphamap-png/ "ParallaxOcclusion_NormalAlphaMap.png"]]]] | |||
Ersichtlich ist, dass die tieferliegenden Bereiche dunkler sind als die höherliegenden. Sind Bereiche reinweiß, dann befinden sie sich in der eigentlichen Polygon-Ebene, es sieht also so aus, als wäre das Parallax Mapping deaktiviert. | Ersichtlich ist, dass die tieferliegenden Bereiche dunkler sind als die höherliegenden. Sind Bereiche reinweiß, dann befinden sie sich in der eigentlichen Polygon-Ebene, es sieht also so aus, als wäre das Parallax Mapping deaktiviert. | ||
Zu beachten sind folgende Dinge: | Zu beachten sind folgende Dinge: | ||
Auch hier müssen die Tangenten-Informationen hinzugefügt werden (siehe Abschnitt Normalen-Textur). | ** Auch hier müssen die Tangenten-Informationen hinzugefügt werden (siehe Abschnitt Normalen-Textur). | ||
Tieferliegende Bereiche benötigen mehr Performance als höherliegende. Die Bereiche, die reinweiß sind, benötigen gegenüber Normal Mapping (fast) keinen höheren Rechenaufwand. | ** Tieferliegende Bereiche benötigen mehr Performance als höherliegende. Die Bereiche, die reinweiß sind, benötigen gegenüber Normal Mapping (fast) keinen höheren Rechenaufwand. | ||
Da die Tiefe nur simuliert wird, das Polygon aber weiterhin an derselben Stelle liegt, entstehen z.T. erhebliche Darstellungsfehler, wenn der Alphakanal an den Rändern nicht weiß ist. Im gezeigten Beispiel werden tieferliegende Fenster "modelliert", was grundsätzlich fehlerfrei möglich ist. Erhabene Strukturen dagegen erfordern, dass die "Grundfarbe" nicht mehr weiß ist, sondern ein Grauton. Damit werden die Ränder aber gemäß der genannten Regel unsauber und bei zunehmend schrägem Betrachtungswinkel extrem fehlerhaft. | ** Da die Tiefe nur simuliert wird, das Polygon aber weiterhin an derselben Stelle liegt, entstehen z.T. erhebliche Darstellungsfehler, wenn der Alphakanal an den Rändern nicht weiß ist. Im gezeigten Beispiel werden tieferliegende Fenster "modelliert", was grundsätzlich fehlerfrei möglich ist. Erhabene Strukturen dagegen erfordern, dass die "Grundfarbe" nicht mehr weiß ist, sondern ein Grauton. Damit werden die Ränder aber gemäß der genannten Regel unsauber und bei zunehmend schrägem Betrachtungswinkel extrem fehlerhaft. | ||
Es kann bei bestimmten Polygon-Textur-Mapping-Konstellationen zu erheblichen Problemen kommen. Ein Beispiel: | ** Es kann bei bestimmten Polygon-Textur-Mapping-Konstellationen zu erheblichen Problemen kommen. Ein Beispiel: | ||
[[https://www.lotus-simulator.de/index.php?attachment/607-parallaxocclusion-problem1-png/&thumbnail=1|[[File:https://www.lotus-simulator.de/index.php?attachment/607-parallaxocclusion-problem1-png/ "ParallaxOcclusion_Problem1.png"|https://www.lotus-simulator.de/index.php?attachment/607-parallaxocclusion-problem1-png/ "ParallaxOcclusion_Problem1.png"]]]] | |||
Hier treffen zwei Polygone aufeinander, die mit demselben Texturbereich gemappt wurden, wobei dieser gespiegelt wurde. Auf diese Weise greifen die Polygone in der Mitte auf exakt denselben Eckpunkt zu (sowohl Position als auch Texturkoordinate sind identisch). Durch das Spiegeln benötigen die Polygone jedoch unterschiedliche Tangenten-Informationen. Es kommt beim Berechnen der Tangenten somit zu groben Fehlern, was sich natürlich auf die Darstellung auswirkt. Die Lösung besteht darin, das Mapping von einem der Polygone ein kleines bisschen zu ändern, sodass es an den betroffenen Punkten nicht mehr komplett identisch ist. Dann erhält jedes Polygon seinen "eigenen" Punkt und das Berechnungsproblem tritt nicht mehr auf. | |||
** Je "steiler" die Übergänge sind, d.h. je scharfkantiger der Alphakanal ist, desto unsauberer wird die Darstellung. Exemplarisch habe ich das kreisförmige Fenster über dem Portal ganz scharf konstruiert - die Konsequenz ist sehr gut im Screenshot sichtbar: Einerseits entsteht ein nahezu 1-Pixel-Mapping, andererseits sieht es schnell so aus, als wäre der Ausschnitt "scheibchenweise" ausgefräst! ![[https://www.lotus-simulator.de/images/smilies/smiley3.png|;\)]] | |||
Empfehlung: Wenn es sich um Texturen handelt, die vor allem durch sehr weiche Übergänge charakterisiert werden, sollte erwogen werden, auf die Parallax Occlusion zu verzichten, indem der Alphakanal komplett weiß gelassen wird, damit es nicht zu Stufen kommen kann! Ein Beispiel wäre die Beblechung von Fahrzeugen, die mit einer Normal-Map leicht "wabbelig" gezeichnet werden soll. Hier ist Parallax Occlusion unangebracht. | Empfehlung: Wenn es sich um Texturen handelt, die vor allem durch sehr weiche Übergänge charakterisiert werden, sollte erwogen werden, auf die Parallax Occlusion zu verzichten, indem der Alphakanal komplett weiß gelassen wird, damit es nicht zu Stufen kommen kann! Ein Beispiel wäre die Beblechung von Fahrzeugen, die mit einer Normal-Map leicht "wabbelig" gezeichnet werden soll. Hier ist Parallax Occlusion unangebracht. | ||
Die Tiefe wird ebenfalls wie die Normalen-Textur über den Parameter _Intensität der Normal-Textur_ gesteuert. | |||
== 5.10 Manipulation des Z-Buffers == | |||
Als Z-Buffer wird eine Information bezeichnet, die darüber Auskunft gibt, wie weit ein bestimmter Pixel des fertigen Bildes vom Betrachter entfernt ist. Diese Information wird insbesondere beim weiteren Zeichnen des Bildes genutzt, um zu entscheiden, ob der neue Pixel gezeichnet werden soll (wenn er "vor" dem bisher gezeichneten Bild liegt) oder nicht (wenn er "hinter" dem bisher gezeichneten Bild liegt). | Als Z-Buffer wird eine Information bezeichnet, die darüber Auskunft gibt, wie weit ein bestimmter Pixel des fertigen Bildes vom Betrachter entfernt ist. Diese Information wird insbesondere beim weiteren Zeichnen des Bildes genutzt, um zu entscheiden, ob der neue Pixel gezeichnet werden soll (wenn er "vor" dem bisher gezeichneten Bild liegt) oder nicht (wenn er "hinter" dem bisher gezeichneten Bild liegt). | ||
Für spezielle Einsätze kann die Verarbeitung des Z-Buffers manipuliert werden: | |||
** _Verschiebung Richtung Betrachter_ tut so, als sei der zu zeichnende Pixel dichter am Betrachter als er es tatsächlich ist. Typischer Anwendungsfall ist bspw. ein auf ein zuvor gezeichnetes Polygon aufgebrachtes Label. Die sog. Z-Prüfung steht dann "auf Messers Schneide" und kommt zufällig zu unterschiedlichen Ergebnissen - es kommt zum typischen Flimmern. Der Verschiebungsparameter sorgt nun dafür, dass die neuen Pixel "angeblich" dichter am Betrachter liegen und die Prüfung somit in allen Fällen positiv erfolgt. | |||
** Wenn _Tiefen-Buffer schreiben_ deaktiviert wird, dann sorgt diese Einstellung dafür, dass der neu zu zeichnende Pixel im Z-Buffer "unsichtbar" bleibt. Alles, was danach gezeichnet wird, berücksichtigt dieses Polygon nicht. Auch hier ist das Beispiel des Labels passend: Durch die _Verschiebung Richtung Betrachter_ würde der falsche Wert normalweise in den Z-Buffer geschrieben werden. Da der richtige Wert aber zuvor schon vorhanden war (weshalb die Verschiebung ja überhaupt nötig geworden ist), kann auf das Schreiben der Offset-Z-Daten verzichtet werden, da sie nur zu Fehlinformationen führen würden. | |||
== 6 Spezielle Texturkoordinaten == | |||
== 6.1 Anlegen sekundärer Texturkoordinaten == | |||
6.1 Anlegen sekundärer Texturkoordinaten | |||
Sekundäre Texturkoordinaten müssen angelegt werden, wenn das Material mit einer AO-Textur mit separatem Mapping oder Meshanimationen enthalten soll (siehe [[https://www.lotus-simulator.de/lexikon/index.php?entry/37-mesh-animationen/|Meshanimationen]]). | |||
Es wird zunächst eine Kopie des zu animierenden 3D-Objektes angelegt. Dieses erhält den Namen des Originalobjektes und zusätzlich den Präfix "@2m_". Heißt das Originalobjekt also "Objekt", dann heißt die Kopie "@2m_Objekt". | Es wird zunächst eine Kopie des zu animierenden 3D-Objektes angelegt. Dieses erhält den Namen des Originalobjektes und zusätzlich den Präfix "@2m_". Heißt das Originalobjekt also "Objekt", dann heißt die Kopie "@2m_Objekt". | ||
Diese Kopie muss künftig in JEDEM Export des Originalobjektes mit exportiert werden und muss - nach Änderungen am Originalobjektes - diesem von der Form her wieder genau angeglichen werden, idealerweise muss eine neue Kopie angelegt werden. Kleinste Abweichungen der Vertex-Daten (Position, Normale usw.) sind ok, aber mehr wird nicht toleriert. | Diese Kopie muss künftig in JEDEM Export des Originalobjektes mit exportiert werden und muss - nach Änderungen am Originalobjektes - diesem von der Form her wieder genau angeglichen werden, idealerweise muss eine neue Kopie angelegt werden. Kleinste Abweichungen der Vertex-Daten (Position, Normale usw.) sind ok, aber mehr wird nicht toleriert. | ||
Die Technik ist nun die Folgende: Beim Import von Original-Objekt und @2m_-Kopie in das ContentTool werden nun die Texturkoordinaten der Kopie in das Originalobjekt übernommen und als zweiten Satz Texturkoordinaten gespeichert. | Die Technik ist nun die Folgende: Beim Import von Original-Objekt und @2m_-Kopie in das ContentTool werden nun die Texturkoordinaten der Kopie in das Originalobjekt übernommen und als zweiten Satz Texturkoordinaten gespeichert. | ||
6.2 Globale Texturkoordinaten | == 6.2 Globale Texturkoordinaten == | ||
Es gibt Fälle, in denen sich [[https://www.lotus-simulator.de/lexikon/index.php?entry/68-splines/&synonym=115|Splines]] überlappen können sollen, nicht jedoch flimmern ("Z-Fighting") dürfen. Klassischer Fall ist die Schotterbettung: Im Weichenbereich nähern sich die zwei Schotterbettungen der beiden Gleise immer weiter, beginnen sich dann zu überlappen und tun dies an der Weichenspitze exakt, bis das nun folgende, eine Gleis wieder eine einzelne Schotterbettung generiert. Da sich die Textur einerseits ohnehin gleichmäßig mappen lässt und es sogar von Vorteil ist, wenn die Wiederholungen der Textur nicht unbedingt dem genauen Gleisverlauf folgt, wurde die Möglichkeit eingerichtet, diese Textur global im Koordinatensystem der Kachel zu mappen. Während die Spline im ContentTool und während des Verlegens im Map-Editor noch "ursprünglich" gemappt wurde, werden die Koordinaten beim "Backen" der Kachelmeshs automatisch umgerechnet. Sich überlappende [[https://www.lotus-simulator.de/lexikon/index.php?entry/68-splines/&synonym=115|Splines]] werden dadurch dann – global betrachtet – exakt identisch gemappt und können nicht mehr gegenseitig flimmern. | |||
Um diese Funktion zu aktivieren, kann nach Auswählen des betreffenden Meshs im ContentTool im Abschnitt "Ausgewähltes Mesh" der Parameter | Um diese Funktion zu aktivieren, kann nach Auswählen des betreffenden Meshs im ContentTool im Abschnitt "Ausgewähltes Mesh" der Parameter _Glob. Tex-Gr._ auf einen Wert größer 0 eingestellt werden. Dieser Wert beeinflusst dann die Mapping-Größe der Textur relativ zur Kachel, d.h. wie oft die Textur in x- und y-Richtung auf die Kachel passt. |
Aktuelle Version vom 21. Januar 2025, 21:55 Uhr
Material-Eigenschaften definieren, wie ein Material aussieht und "sich verhält".
1 Material-Typ
Die wichtigste und zuerst einzustellende Material-Eigenschaft ist der **Material-Typ**. Der Material-Typ legt den grundsätzlichen Charakter des Materials fest. Je nach Materialtyp kann der Render-Aufwand erheblich variieren und ebenso können sich die weiteren Materialeigenschaften erheblich unterscheiden.
Intern entspricht jeder Material-Typ einem Shader-Satz.
Momentan verfügt LOTUS über folgende Materialtypen:
- _Simple_ : Dieses Material lässt sich recht effizient rendern, unterstützt dafür aber nur Transparenz (weich/hart), Glanz (ggf. über den Alphakanal), Schnee und Nachttextur. Damit ist es vor allem für normale Szenerieobjekte geeignet.
- _Direct Texture, no light:_ Dieses Material rendert NUR eine Textur, ohne jeden Effekt
- _Terrain_ : Dieses Material ist insbesondere für die Materialien der Boden-Polygone im Map-Editor vorgesehen. Gegenüber _Simple_ verfügt es zwar nicht über Schnee (der wird auf dem Boden anders realisiert) und Nachttextur, dafür aber über eine Detailtextur, die dem Material in naher Distanz eine zusätzliche Struktur gibt.
- _Complex_ : Dieses Material ist ein universell einsetzbares Material, insbesondere für normale Fahrzeug-Fächen. Neben den Effekten von _Simple_ kann eine Detailtextur und Ambient Occlusion ergänzt werden sowie die Intensität der Nachttextur vorgegeben werden.
- _Complex with normal map_ : Wie _Complex_ , jedoch zusätzlich mit einer Normalen-Textur und der Möglichkeit von Relief Mapping
- _Raindrops:_ Spezialmaterial für regennasse Fensterscheiben. Wird im entsprechenden Artikel beschrieben.
- _Human:_ Wird später für KI-Menschen verwendet. Bitte nicht benutzen.
- _Complex+Normal+Simple Meshanim:_ Erweiterung von _Complex with normal map:_ Mit diesem Material kann eine einfache Meshanimation realisiert werden. Siehe [[1]]
- _User Vehicle Windows:_ Spezialmaterial, welches _dringend_ für die Innenseite der Frontscheibe verwendet werden sollte! Dieses Material wird mit der Grafik-Option "Beleuchtete Frontscheibe" gekoppelt. Hierbei ergibt sich u.U. ein erheblicher Performancegewinn!
- _Roller Blind Display:_ Spezialmaterial für Rollband-Anzeigen. Siehe [Rollbandanzeige] .
2 Auf die Schnelle: Einstellungen für einfache Effekte
Als Motivation, für den schnelleren Einstieg und gleichzeitig als Beispiel für die einzelnen Parameter, die anschließend detaillierter beschrieben werden, hier einige typische Effekte und die nötigen Einstellungen:
2.1 Material ohne Transparenz
- Blendmodus _Normales Rendern_
- _Min. Alpha_ = 0
2.2 Material mit "weicher" Transparenz
- Standard-Textur muss über entsprechenden Alphakanal verfügen (schwarz = transparent, weiß = keine Transparenz)
- Blendmodus _Alpha-Transparenz_
- _Min. Alpha_ = 0 oder ggf. zur Reduzierung von eventuellen Reihenfolgefehlern 0.1 bis 0.5
2.3 Material mit "harter" Transparenz
- Blendmodus _Normales Rendern_
- _Min. Alpha_ = 0.5 (0.1 bis 0.9, je nachdem, wie viel "stehenbleiben" soll)
2.4 Mattes Material
- _Glanz-Faktor_ = 0
- _Alpha-Wert für Glanz nutzen_ aus
2.5 Konstant seidenmattes Material
- _Glanz-Faktor_ = 0.25
- _Helligkeit des Glanzpunktes_ = 1
- _Alpha-Wert für Glanz nutzen_ aus
- _Seidenmattere Charakteristik_ an
2.6 Konstant hochglänzendes Material
- _Glanz-Faktor_ = 1
- _Helligkeit des Glanzpunktes_ = 1
- _Alpha-Wert für Glanz nutzen_ aus
2.7 Material mit variierendem Glanz
- Standard-Textur muss über entsprechenden Alphakanal verfügen (schwarz = matt, weiß = hochglänzend)
- _Glanz-Faktor_ = 1
- _Helligkeit des Glanzpunktes_ = 1
- _Alpha-Wert für Glanz nutzen_ ein
- _Seidenmattere Charakteristik_ aus
2.8 Material mit Nachttextur, die automatisch (global) geschaltet wird
- _Gebäude-Nachtvariable_ an Variable _NightTex_ koppeln
- Die vorbereitete Textur bei _Nachttextur_ eintragen
- Bei _Complex_ oder _Complex with normal map_ : _Helligkeit der Nachttextur_ = 1
2.9 Material mit Nachttextur, die stets aktiv ist
- _Gebäude-Nachtvariable_ = 1
- Die vorbereitete Textur bei _Nachttextur_ eintragen
- Bei _Complex_ oder _Complex with normal map_ : _Helligkeit der Nachttextur_ = 1
2.10 Schneetextur mit kompletter Abdeckung
- _Alpha-Wert für Schneemenge nutzen_ aus
- _Schneetextur_ = _snow.dds_ (oder ggf. eigene Textur auswählen)
2.11 Schneetextur mit Abdeckung abhängig vom Untergrund
- Standard-Textur muss über entsprechenden Alphakanal verfügen (schwarz = kein Schnee, weiß = wird komplett beschneit)
- _Alpha-Wert für Schneemenge nutzen_ ein
3 Begriffsklärung Alphakanal
Für einige Einstellungen ist der Begriff _Alphakanal_ von entscheidender Bedeutung.
3.1 Allgemein
Auch wenn landläufig der Alphakanal oft mit Transparenz gleichgesetzt wird, ist dies so nicht unbedingt zutreffend!
Für die Darstellung einer Textur werden für jeden Pixel lediglich ein Rot-, ein Grün- und ein Blau-Wert benötigt. Für die gesamte Textur spricht man auch von _Kanälen_. Aus technischen Gründen bietet aber jeder Pixel noch Speicher für einen vierten Wert, der Alpha-Wert getauft wurde. Jede Textur verfügt also über vier Kanäle: Den roten, den grünen, den blauen und den _Alphakanal_.
3.2 Textur- und resultierender Alphakanal
Wenn ein Pixel mit einem bestimmten Material gerendert wird, dann kann man dies als "Rechenaufgabe" verstehen: Hinein gehen diverse Texturinformationen und Parameter und heraus kommt die Farbe und der Alpha-Wert des Pixels.
Im Folgenden wird daher unterschieden zwischen dem Alphakanal der jeweiligen Textur und dem _resultierenden Alphakanal_ , d.h. dem jeweiligen Alpha-Wert des fertigberechneten Pixels.
4 Script- und Variablen-Einbindung
Die meisten Material-Eigenschaften können wahlweise über Konstanten fest eingestellt oder über Variablen gesteuert werden.
[https://www.lotus-simulator.de/index.php?attachment/3103-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
Solche Parameter verfügen nicht nur über ein Eingabefeld für den jeweiligen Wert, sondern dahinter auch über einen Haken und eine Auswahl-Box. Über die Auswahl-Box kann nun eine globale oder vom eingebundenen Script bereitgestellte Variable ausgewählt werden, wodurch automatisch der Haken gesetzt wird.
In der Folge wird die Variable den Wert dieser Eigenschaft steuern. Wichtig ist aber, dass insbesondere bei Fließkomma-Zahlen der Variablenwert mit der davor stehenden Konstante multipliziert wird! Es sollte also dann vorne "1" eingetragen werden, um den Variablenwert 1:1 zu übernehmen.
Um die Variablen-Anbindung wieder zu deaktivieren, muss lediglich der Haken wieder entfernt werden.
5 Material-Einstellungen
Im Folgenden werden die Material-Eigenschaften im Detail beschrieben. Es werden hierbei die Parameter nach den verschiedenen Effekten gruppiert beschrieben. Im Einstellungsdialogfeld tauchen diese Parameter aber an unterschiedlichen Stellen auf, da sie dort nach ihrem Datentyp sortiert auftreten.
5.1 Transparenz
Es gibt vier Möglichkeiten für Transparenz: Hart, weich, additiv und Multiplikation.
5.1.1 Hart
Hierbei ist das Material entweder zusehen oder nicht, die Kanten sind also hart und es kann keine Halbtransparenz dargestellt werden. Hierfür muss die Standard-Textur über einen Alphakanal verfügen, wobei 0/schwarz = transparent und 1/weiß = nicht transparent gilt.
Hierfür muss die Variable _Min. Alpha_ auf 0.5 gesetzt werden. Es können auch andere Werte > 0 oder < 1 gesetzt werden, dementsprechend verschiebt sich die "Schneidgrenze".
5.1.2 Weich
Hierbei ist der Übergang zwischen nicht transparent, halbtransparent und ganz transparent fließend. Nachteil ist allerdings, dass die Zeichen-Reihenfolge eine ganz entscheidende Rolle spielt und der Effekt somit zu Problemen führen kann: Bisweilen sind Objekte hinter der transparenten Fläche nicht sichtbar und es entwickelt sich ein "Röntgenblick". Es ist daher, wenn möglich, die "harte" Transparenz zu wählen; allerdings ist die weiche Transparenz bei halbtransparenten Objekten wie Glasscheiben unumgänglich.
Es gibt zwei Möglichkeiten: Entweder konstant halbtransparent - dafür wird kein Alphakanal benötigt. Hierfür wird der _Blendmous_ auf _Halbtransparent_ gestellt.
Oder der Alphakanal steuert die Transparenz: Hierfür muss die Standard-Textur natürlich über einen Alphakanal verfügen, wobei 0/schwarz = transparent und 1/weiß = nicht transparent gilt. Außerdem muss der _Blendmodus_ auf _Alpha-Transparenz_ eingestellt werden.
Insbesondere in diesem Fall gibt es noch den speziellen _Faktor über den Alpha-Kanal_ , mit welchem die Transparenz zusätzlich manipuliert werden kann. Wird hier beispielsweise eine Script-Variable verknüpft, dann kann das Script die Transparenz steuern, indem es die Variable zwischen 0 und 1 einstellt.
5.1.3 Additiv
Diese Form der Transparenz nutzt keinen Alphakanal, sondern die eigentliche Farbe der zu zeichnenden Fläche, wobei diese den Hintergrund aufhellt. Je heller die Farbe ist, desto stärker wird der Hintergrund aufgehellt - ist die Flächenfarbe schwarz, passiert nichts. Hierfür wird der _Blendmodus_ auf _Additives Rendern_ oder _Echte Addition_ gestellt, wobei _Additives Rendern_ etwas korrigiert wird, damit es natürlicher wirkt, _Echte Addition_ aber mathematisch exakt durchgeführt wird.
5.1.4 Multiplikatives Rendern
Dieser Blend-Modus wirkt wie ein (Farb)-Filter. Hiermit kann man z.B. eine getönte Scheibe realisieren, wobei der Farbwert des Materials der Tönungsfarbe entspricht.
5.1.5 Mit zunehmender Entfernung ausblenden
Sofern der Materialtyp "Complex with Normal Map" gewählt und vom Alphakanal gesteuerte, weiche Transparenz aktiviert wird, ist es möglich, das Mesh mit zunehmender Entfernung allmählich transparenter werden zu lassen, bis es schließlich vollständig unsichtbar ist. Hierzu muss der Wert von _"Mit zunehmender Entfernung ausblenden"_ auf einen Wert größer 0 und üblicherweise kleiner als 1 gestellt werden. Je kleiner der Wert, desto weiter ist das Objekt sichtbar. Während sich dieser Bereich bei einem Wert von "1" nur in der Größenordnung eines Meters bewegt, steigt er bei "0,1" auf 10m und bei "0,01" auf 100m.
5.2 Glanz
5.2.1 Beleuchtung und Glanzpunkt
Der eine Teil des Glanzes ist die Frage, wie das Objekt auf die Beleuchtung der umliegenden Lichtquellen reagiert. Objekte können matt, seidenglänzend oder hochglänzend (oder eine beliebige Charakteristik darzwischen) dargestellt werden und der Glanzfleck kann heller oder dunkler sein.
Zunächst ist zu unterscheiden, ob der Alphakanal der Standardtextur für den Glanz zuständig sein soll oder die Parameter konstant sein sollen. Je nachdem ist die Option _Alpha-Wert für Glanz nutzen_ ein- oder auszuschalten.
Gesteuert wird der Glanz über die Parameter _Glanz-Faktor_ und _Helligkeit des Glanzpunktes_. Bei konstantem Glanz kann mit _Glanz-Faktor_ eingestellt werden, ob das Objekt matt (0), seidenmatt (0.1 oder 0.25, s.u.) oder hochglänzend (1) dargestellt werden soll.
Wenn der Alphakanal aktiviert ist, dann wird dieser mit dem Parameter _Glanz-Faktor_ multipliziert, sodass dieser den Maximalwert darstellt. Demzufolge sollte bei aktiviertem Alphakanal der Wert _Glanz-Faktor_ normalerweise den Wert 1 haben.
_Helligkeit des Glanzpunktes_ sollte normalerweise auf 1 eingestellt sein; mit ihm kann bei Bedarf der Glanzeffekt heller oder dunkler eingestellt werden.
Wichtig ist außerdem der Haken _Seidenmattere Charakteristik:_ Für Objekte, bei denen der Alpha-Kanal vor allem dafür verwendet wird, hochglänzende und matte Oberflächen zu unterscheiden, wie z.B. bei Gebäuden, sollte der Haken aus sein. Die Zuordnung Alphawert ==> Glanz ist dann dafür optimiert, den Übergang Hochglanz/Matt mit möglichst wenig Fehlern darzustellen.
Wenn es jedoch darum geht, mit dem Alpha-Wert (oder auch ohne Verwendung des Alphakanals) eine Vielzahl verschiedener Glanzstärken zu erzeugen, dann empfiehlt es sich, den Haken _Seidenmattere Charakteristik_ anzuschalten, da dann eine bessere Steuerung möglich ist.
Hier einige exemplarische Glanz-Faktoren mit _eingeschaltetem_ Haken _Seidenmattere Charakteristik_ mit den jeweiligen Ergebnissen, angewendet auf eine graue Test-Kugel:
[https://www.lotus-simulator.de/index.php?attachment/348-glanz-small-png/ "Glanz_small.png"]
5.2.2 Reflexionstextur
Ein technisch völlig anderer Effekt sind Reflexionstexturen. Reflexionstexturen sorgen für eine scheinbar mehr oder weniger spiegelnde Oberfläche, in dem sie die Umgebung des Objektes wiedergeben. Diese kann entweder eine von LOTUS selbst in Echtzeit generierte Abbildung der Umgebung sein ("Echtzeitreflexionen") oder über eine konstante Textur, die im Vorfeld bereits erzeugt wurde.
Gesteuert wird die Reflexion über den _Blend-Faktor der Reflexionstextur._ Dieser gibt an, wie stark die Reflexionstextur sichtbar sein soll. Zusätzlich sorgt die bereits bekannte Option _Alpha-Wert für Glanz nutzen_ dafür, dass der Blend-Faktor zusätzlich mit dem Alphakanal multipliziert wird.
Natürlich muss eine Reflexionstextur ausgewählt werden. Standardmäßig liefert LOTUS die beiden Texturen _sharp_envir.bmp_ und _smooth_envir.bmp_ mit. Es können aber wahlweise auch eigene Texturen verwendet werden - es muss sich dann aber um eine sogenannte Cube Map handeln (<https://en.wikipedia.org/wiki/Cube_mapping>). LOTUS bietet die Möglichkeit, Cube Maps auch als Screenshot herzustellen; dies führt an dieser Stelle aber zu weit.
Die Besonderheit bei _sharp_envir.bmp_ und _smooth_envir.bmp_ ist, dass sie automatisch ausgetauscht werden, wenn der User die Grafikoption für Echtzeitreflexionen einschaltet. Der Unterschied zwischen den beiden ist, dass die eine die Umwelt scharf wiedergibt (für verchromte/verspiegelte Oberflächen oder Glas) oder unscharf wiedergibt (für normales Metall usw.).
Wichtig: Die Reflexionstextur kann zwar mit der besagten Option abhängig vom Alphakanal eingestellt werden, ist aber _immer unabhängig_ von _Glanz-Faktor_ und _Helligkeit des Glanzpunktes!_
5.3 Nachttextur
Die Nachttextur wird über die Standardtextur (additiv) gelegt und ist immer "hell", d.h. unabhängig von Sonnenstand und sonstiger Beleuchtung des Objektes. D.h. sie "leuchtet".
Die Textur selbst kann bei _Nachttextur_ ausgewählt werden.
Im Normalfall wird die Nachttextur einfach zur normalen Textur hinzugefügt. Es ist aber alternativ möglich, dass die Nachttextur keine "eigene" Struktur besitzt, sondern nur die normale Textur "aufhellt", d.h. mit ihr multipliziert wird. Hier muss die Option _Nachttextur mit normaler Textur multiplizieren_ eingeschaltet werden.
5.3.1 Automatischer Modus / Gebäude-Nachttextur
Um den "Automatikbetrieb" zu aktivieren, muss für die Option _Gebäude-Nachtvariable_ die Variable "NightTex" ausgewählt werden. Um die Nachttextur dauerhaft zu aktivieren, wird hier lediglich 1 eingestellt. Für den Automatikbetrieb kann die Nachttextur ihrerseits ebenfalls über einen Alphakanal verfügen, welcher dann steuert, welche Bereiche wann aktiviert werden sollen. Details hierzu werden hier **_(fehlt!)_** erläutert.
Manueller Modus / Script-gesteuert
Wahlweise kann die Nachttextur auch direkt über das Script gesteuert werden. Hierfür wird bei _Gebäude-Nachtvariable_ 0 eingestellt und darauf geachtet, dass keine Variable eingetragen ist. Dann kann die Textur direkt über den Wert _Helligkeit der Nachttextur_ gesteuert werden.
Wenn die Nachttextur manuell gesteuert wird, dann sollte sie auch nicht über einen Alphakanal verfügen.
5.4 Translumination
Hiermit ist gemeint, dass das Licht durch Objekte durchscheinen kann. Typisches Beispiel sind die Blätter eines Baumes; wenn man einen Baum im Gegenlicht betrachtet, dann sieht man, dass die Blätter hell strahlen, weil die Sonne von der gegenüberliegenden Seite aus durchscheint.
Die Transluminationstextur wird unter _Nachttextur_ eingetragen, dazu aber die Option _Translumination_ eingeschaltet.
5.5 Retroreflexion
Retroreflexion ist der Fachbegriff für den Licht-Effekt, den man von Rückstrahlern/"Katzenaugen" und Verkehrsschildern u.Ä. kennt: Das auftreffende Licht wird genau in die Richtung zurückgeworfen, aus der es kommt, sodass das Objekt besonders dann sehr hell zusehen ist, wenn es aus ungefähr derselben Position wie die Lichtquelle betrachtet wird, z.B. wenn man im Dunkeln mit eingeschalteten Scheinwerfern vorne aus dem Auto auf Verkehrsschilder usw. schaut.
Dieser Effekt steht nur dem "Complex"-Materialtyp zur Verfügung und wird über zwei Retroreflexion-Häkchen im Abschnitt "[[2]] und ganzzahlige Werte" gesteuert. Mit dem Ersten wird die Retroreflexion aktiviert und gilt zunächst für die ganze Fläche. Mit dem Zweiten kann man dafür sorgen, dass die Intensität abhängig vom Alphakanal der Haupttextur gesteuert wird.
5.6 Schneetextur
LOTUS verfügt über einen automatischen Schnee-Effekt. Hierzu wird eine beliebige Schnee-Textur, für die jedoch im Normalfall die "snow.dds" verwendet werden sollte, von oben senkrecht auf das Objekt projeziert. Die Sichtbarkeit variiert abhängig von der gefallenen Schneemenge und dem Neigungswinkel der jeweiligen Fläche, sodass also steile Dachflächen automatisch weit weniger Schnee abbekommen als Flachdächer.
Eingestellt wird die Schnee-Textur im gleichnamigen Parameter.
Bei besonders strukturierten Flächen, wie z.B. Dachziegeln, kann zusätzlich der Alphakanal hinzugezogen werden, um die Intensität zu beeinflussen; in der Folge lässt sich auch die ursprüngliche Struktur trotz Schnee erkennen. Hierfür muss lediglich der Haken bei _Alpha-Wert für Schneemenge nutzen_ gesetzt werden.
5.7 Detail-Textur (nur _Terrain_ , _Complex_ , _Complex with normal map,_ _Complex+Normal+Simple Meshanim_ und _Roller Blind Display_ )
Damit Flächen sowohl bei ferner als auch naher Betrachtung über einen ausreichenden Detailgrad verfügen, ist es möglich, die "großflächige" Standardtextur mit einer "kleinräumigen" Detail-Textur zu versehen, die eingemischt wird. Bei naher Betrachtung dominiert also die Detail-Textur die Struktur, bei entfernter Betrachtung die Standardtextur.
Die Detail-Textur kann über den gleichnamigen Parameter aktiviert werden. Um welchen Faktor die Detail-Textur kleiner ist, steuert der Parameter _Skalierung der Detailtextur_.
Die Arbeitsweise unterscheidet sich je nachdem, ob der Haken "Alpha-gesteuerte Detailtextur" gesetzt wird, oder nicht.
Falls er _nicht_ gesetzt ist, dann wird die Mischung so vorgenommen, wie es für die Bodenpolygone empfehlenswert ist. Siehe auch [[3]].
_Falls_ er gesetzt ist, dann muss der Alphakanal der Standard-Textur vorhanden sein und dieser wird _ausschließlich_ für das Mischungsverhältnis genutzt: 0/Schwarz = keine Detailtextur, Standardtextur dominiert, 1/Weiß = nur Detailtextur, Standardtextur unsichtbar. Hinzu kommt noch eine Spezialität: Zwar wird der Alpha-Kanal der Standard-Textur so gemappt, wie die Textur im 3D-Programm ursprünglich gemappt wurde, jedoch werden die Farben der Standard-Textur selbst so gemappt, wie die Detailtextur!
Genau genommen werden also eigentlich zwei [[4]] gegeneinander abgemischt, abgemischt über den "normal" gemappten Alphakanal.
5.8 Ambient Occlusion (nur Complex, Complex with normal map, Complex+Normal+Simple Meshanim und Roller Blind Display)
Ambient Occlusion ist eine Technik, bei der die weichen Schatten, die sich infolge der indirekten Umgebungsbeleuchtung ergeben, vorberechnet und in eine separate Textur gespeichert werden. Der Hintergrund ist der sehr hohe Rechenaufwand, der heutzutage eine Echtzeitberechnung nicht erlaubt und die Tatsache, dass die Umgebungsbeleuchtung näherungsweise konstant ist.
Es gibt drei Möglichkeiten, wie Ambient Occlusion (kurz AO) in LOTUS realisiert werden kann:
- Pro Mesh-Eckpunkt: Hierbei werden die Helligkeitsinformationen in den einzelnen Eckpunkten des Meshs gespeichert. Dies kann direkt im ContentTool durchgeführt werden. Hierzu das Mesh auswählen, links auf _Ausgewähltes Mesh_ klicken, ganz unten im Abschnitt _Per-Vertex-Ambient Occlusion_ die Qualität einstellen und auf _Generieren_ klicken.
In den Materialeigenschaften ist dann der Haken _AO-Textur aktivieren_ _nicht_ gesetzt.
- Mit einer AO-Textur, die genauso gemappt wird, wie die Haupttextur: Hierzu werden in den Material-Eigenschaften die Haken _AO-Textur aktivieren_ und _AO verwendet das originale Mapping_ gesetzt und es wird bei _Ambien Occlusion (AO) Textur_ die entsprechend angefertigte AO-Textur eingestellt
- Mit einer AO-Textur, die mit abweichenden Texturkoordinaten gemappt werden soll: Hierzu wird in den Material-Eigenschaften der Haken _AO-Textur aktivieren_ gesetzt und der Haken _AO verwendet das originale Mapping_ _nicht_ gesetzt und es wird bei _Ambien Occlusion (AO) Textur_ die entsprechend angefertigte AO-Textur eingestellt. Außerdem muss das importierte Mesh über sekundäre Texturkoordinaten verfügen (s.u.).
In allen Fällen kann die Intensität der AO mit dem Parameter _Intensität der AO-Textur_ justiert werden.
Siehe hierzu bitte auch den Hauptartikel: [Occlusion einrichten]
Normalen-Textur (nur Complex with normal map und Complex+Normal+Simple Meshanim)
Die Lage einer Fläche im Raum wird u.A. über die sogenannte Normale beschrieben. Hierbei handelt es sich um eine gedachte Linie (Vektor), die senkrecht auf der Fläche steht. Sie beeinflusst insbesondere, wie die Berechnung des Lichteinfalls und des Glanzes erfolgt.
Mittels einer Normalen-Textur lässt sich nun diese Information mittels einer eigenen Textur beeinflussen. Hierdurch können beispielsweise feine Strukturen wie Nieten oder Beulen im Material simuliert werden, die das Licht anders reflektieren als ihre Umgebung. Landläufig wird auch von einer _Bump-Map_ gesprochen, was aber insofern nicht korrekt ist, weil eine _Bump-Map_ eine andere Information enthält als eine Normalen-Textur (lokaler Höhenunterschied statt Flächennormale).
Im Dialogfeld muss hierfür lediglich der Materialtyp und unter "Normal-Textur" eine Textur ausgewählt werden. Allerdings müssen die betroffenen Meshs auch mit zusätzlichen Tangenten-Informationen versehen werden - siehe hierzu die allgemeine Beschreibung des Object & Vehicle Tools. **_(fehlt!)_**
Die Intensität der Normalen-Textur lässt sich mit dem Faktor _Intensität der Normal-Textur_ justieren.
5.9 Parallax Mapping
Hierbei handelt es sich um ein Verfahren, bei dem dem Betrachter eine räumliche Tiefe nicht nur durch die Beeinflussung der Normalen vorgegaukelt wird, sondern bei dem bei schräger Betrachtung tatsächlich einen vertikalen Versatz der Struktur erkennen kann, wie im folgenden Beispiel erkennbar:
[https://www.lotus-simulator.de/index.php?attachment/604-parallaxocclusion-png/ "ParallaxOcclusion.png"]
Die Konfiguration des Materials erfolgt zunächst wie bei einer Normalen-Textur. Zusätzlich benötigt der Effekt eine Normalen-Textur _mit einem Alphakanal_ , der die Höheninformationen enthält. Die zum Beispiel zugehörige Normal-Map enthält folgenden Alpha-Kanal:
[https://www.lotus-simulator.de/index.php?attachment/606-parallaxocclusion-normalalphamap-png/ "ParallaxOcclusion_NormalAlphaMap.png"]
Ersichtlich ist, dass die tieferliegenden Bereiche dunkler sind als die höherliegenden. Sind Bereiche reinweiß, dann befinden sie sich in der eigentlichen Polygon-Ebene, es sieht also so aus, als wäre das Parallax Mapping deaktiviert.
Zu beachten sind folgende Dinge:
- Auch hier müssen die Tangenten-Informationen hinzugefügt werden (siehe Abschnitt Normalen-Textur).
- Tieferliegende Bereiche benötigen mehr Performance als höherliegende. Die Bereiche, die reinweiß sind, benötigen gegenüber Normal Mapping (fast) keinen höheren Rechenaufwand.
- Da die Tiefe nur simuliert wird, das Polygon aber weiterhin an derselben Stelle liegt, entstehen z.T. erhebliche Darstellungsfehler, wenn der Alphakanal an den Rändern nicht weiß ist. Im gezeigten Beispiel werden tieferliegende Fenster "modelliert", was grundsätzlich fehlerfrei möglich ist. Erhabene Strukturen dagegen erfordern, dass die "Grundfarbe" nicht mehr weiß ist, sondern ein Grauton. Damit werden die Ränder aber gemäß der genannten Regel unsauber und bei zunehmend schrägem Betrachtungswinkel extrem fehlerhaft.
- Es kann bei bestimmten Polygon-Textur-Mapping-Konstellationen zu erheblichen Problemen kommen. Ein Beispiel:
[https://www.lotus-simulator.de/index.php?attachment/607-parallaxocclusion-problem1-png/ "ParallaxOcclusion_Problem1.png"]
Hier treffen zwei Polygone aufeinander, die mit demselben Texturbereich gemappt wurden, wobei dieser gespiegelt wurde. Auf diese Weise greifen die Polygone in der Mitte auf exakt denselben Eckpunkt zu (sowohl Position als auch Texturkoordinate sind identisch). Durch das Spiegeln benötigen die Polygone jedoch unterschiedliche Tangenten-Informationen. Es kommt beim Berechnen der Tangenten somit zu groben Fehlern, was sich natürlich auf die Darstellung auswirkt. Die Lösung besteht darin, das Mapping von einem der Polygone ein kleines bisschen zu ändern, sodass es an den betroffenen Punkten nicht mehr komplett identisch ist. Dann erhält jedes Polygon seinen "eigenen" Punkt und das Berechnungsproblem tritt nicht mehr auf.
- Je "steiler" die Übergänge sind, d.h. je scharfkantiger der Alphakanal ist, desto unsauberer wird die Darstellung. Exemplarisch habe ich das kreisförmige Fenster über dem Portal ganz scharf konstruiert - die Konsequenz ist sehr gut im Screenshot sichtbar: Einerseits entsteht ein nahezu 1-Pixel-Mapping, andererseits sieht es schnell so aus, als wäre der Ausschnitt "scheibchenweise" ausgefräst! ![[5]]
Empfehlung: Wenn es sich um Texturen handelt, die vor allem durch sehr weiche Übergänge charakterisiert werden, sollte erwogen werden, auf die Parallax Occlusion zu verzichten, indem der Alphakanal komplett weiß gelassen wird, damit es nicht zu Stufen kommen kann! Ein Beispiel wäre die Beblechung von Fahrzeugen, die mit einer Normal-Map leicht "wabbelig" gezeichnet werden soll. Hier ist Parallax Occlusion unangebracht.
Die Tiefe wird ebenfalls wie die Normalen-Textur über den Parameter _Intensität der Normal-Textur_ gesteuert.
5.10 Manipulation des Z-Buffers
Als Z-Buffer wird eine Information bezeichnet, die darüber Auskunft gibt, wie weit ein bestimmter Pixel des fertigen Bildes vom Betrachter entfernt ist. Diese Information wird insbesondere beim weiteren Zeichnen des Bildes genutzt, um zu entscheiden, ob der neue Pixel gezeichnet werden soll (wenn er "vor" dem bisher gezeichneten Bild liegt) oder nicht (wenn er "hinter" dem bisher gezeichneten Bild liegt).
Für spezielle Einsätze kann die Verarbeitung des Z-Buffers manipuliert werden:
- _Verschiebung Richtung Betrachter_ tut so, als sei der zu zeichnende Pixel dichter am Betrachter als er es tatsächlich ist. Typischer Anwendungsfall ist bspw. ein auf ein zuvor gezeichnetes Polygon aufgebrachtes Label. Die sog. Z-Prüfung steht dann "auf Messers Schneide" und kommt zufällig zu unterschiedlichen Ergebnissen - es kommt zum typischen Flimmern. Der Verschiebungsparameter sorgt nun dafür, dass die neuen Pixel "angeblich" dichter am Betrachter liegen und die Prüfung somit in allen Fällen positiv erfolgt.
- Wenn _Tiefen-Buffer schreiben_ deaktiviert wird, dann sorgt diese Einstellung dafür, dass der neu zu zeichnende Pixel im Z-Buffer "unsichtbar" bleibt. Alles, was danach gezeichnet wird, berücksichtigt dieses Polygon nicht. Auch hier ist das Beispiel des Labels passend: Durch die _Verschiebung Richtung Betrachter_ würde der falsche Wert normalweise in den Z-Buffer geschrieben werden. Da der richtige Wert aber zuvor schon vorhanden war (weshalb die Verschiebung ja überhaupt nötig geworden ist), kann auf das Schreiben der Offset-Z-Daten verzichtet werden, da sie nur zu Fehlinformationen führen würden.
6 Spezielle Texturkoordinaten
6.1 Anlegen sekundärer Texturkoordinaten
Sekundäre Texturkoordinaten müssen angelegt werden, wenn das Material mit einer AO-Textur mit separatem Mapping oder Meshanimationen enthalten soll (siehe [[6]]).
Es wird zunächst eine Kopie des zu animierenden 3D-Objektes angelegt. Dieses erhält den Namen des Originalobjektes und zusätzlich den Präfix "@2m_". Heißt das Originalobjekt also "Objekt", dann heißt die Kopie "@2m_Objekt".
Diese Kopie muss künftig in JEDEM Export des Originalobjektes mit exportiert werden und muss - nach Änderungen am Originalobjektes - diesem von der Form her wieder genau angeglichen werden, idealerweise muss eine neue Kopie angelegt werden. Kleinste Abweichungen der Vertex-Daten (Position, Normale usw.) sind ok, aber mehr wird nicht toleriert.
Die Technik ist nun die Folgende: Beim Import von Original-Objekt und @2m_-Kopie in das ContentTool werden nun die Texturkoordinaten der Kopie in das Originalobjekt übernommen und als zweiten Satz Texturkoordinaten gespeichert.
6.2 Globale Texturkoordinaten
Es gibt Fälle, in denen sich [[7]] überlappen können sollen, nicht jedoch flimmern ("Z-Fighting") dürfen. Klassischer Fall ist die Schotterbettung: Im Weichenbereich nähern sich die zwei Schotterbettungen der beiden Gleise immer weiter, beginnen sich dann zu überlappen und tun dies an der Weichenspitze exakt, bis das nun folgende, eine Gleis wieder eine einzelne Schotterbettung generiert. Da sich die Textur einerseits ohnehin gleichmäßig mappen lässt und es sogar von Vorteil ist, wenn die Wiederholungen der Textur nicht unbedingt dem genauen Gleisverlauf folgt, wurde die Möglichkeit eingerichtet, diese Textur global im Koordinatensystem der Kachel zu mappen. Während die Spline im ContentTool und während des Verlegens im Map-Editor noch "ursprünglich" gemappt wurde, werden die Koordinaten beim "Backen" der Kachelmeshs automatisch umgerechnet. Sich überlappende [[8]] werden dadurch dann – global betrachtet – exakt identisch gemappt und können nicht mehr gegenseitig flimmern.
Um diese Funktion zu aktivieren, kann nach Auswählen des betreffenden Meshs im ContentTool im Abschnitt "Ausgewähltes Mesh" der Parameter _Glob. Tex-Gr._ auf einen Wert größer 0 eingestellt werden. Dieser Wert beeinflusst dann die Mapping-Größe der Textur relativ zur Kachel, d.h. wie oft die Textur in x- und y-Richtung auf die Kachel passt.