Wer schon einmal eine Führerstandsmitfahrt auf einer Straßenbahnstrecke unternommen hat, die über serpentinenförmige Rampen führt, hat womöglich schon einmal folgenden Anblick wahrgenommen:
Ursache ist das so genannte Z-Fighting: Wenn zwei Texturen zu dicht übereinander oder gar in einer Ebene liegen, weiß die GPU nicht mehr, welche Textur sie in den Z-Puffer übernehmen soll, der für die Tiefendarstellung notwendig ist. Dann hat diejenige Textur Vorrang, die vom Prozessor zuerst gerendert wird. Da diese sich innerhalb von Sekundenbruchteilen ändern kann, kommt es zu einem unschönen Flackern. Da zwei oder mehrere Texturen um den Platz im Z-Puffer 'kämpfen', spricht man auch vom so genannten Z-Fighting. Behoben werden kann dieser Effekt dadurch, dass eine Textur in einem geringen Abstand zu ihrem Untergrund angeordnet wird. Das muss unmittelbar im Mesh erfolgen und hat den Nachteil, dass eigentlich feststehende Maße künstlich manipuliert werden müssen, z.B. bei Schildern und deren Beschriftungen. Bei seitlicher Ansicht könnte dem Betrachter somit der Abstand zwischen Schild und Beschriftung auffallen. Außerdem ist es nicht sicher, ob es bei größeren Entfernungen nicht doch wieder zu Artefakten kommt, da hier die Rechengenauigkeit abnimmt. Grafische Betriebssysteme bieten eine andere Lösung an: Mittels des Polygon Offsets wird eine Textur erst beim Rendern gegenüber dem Untergrund in der Z-Ebene verschoben, ohne dass im Mesh irgendwelche Änderungen notwendig sind.
Bei der Überlagerung von Straßenbahngleisen und -bettungen macht TPF von dieser Möglichkeit zwar Gebrauch, der zugehörige Wert ist aber zu gering eingestellt. Solange die Gleise nicht aus unmittelbarer Nähe betrachtet werden, gibt es keine Probleme. Bei Führerstandsmitfahrten kann es jedoch solche geben. Auf steileren kurvigen Strecken - die beim Vorbild auch dann und wann auftreten können - sind die Straßenflächen infolge der Schrägstellung leicht verdreht und gegeneinander verschoben, so dass der Effekt sogar über das typische Flackern hinausgeht. Hier scheint der Untergrund in Form zackenförmiger Artefakte dauerhaft durch.
Um diesen Fehler zu beheben, muss man in den .mtl-Dateien der Straßenbahngleise - es sind pro Gleistyp normalerweise jeweils drei - den Wert von factor unter polygon offset von -3 auf -6 ändern, so dass die Texturen gegenüber der Straßenoberfläche vom visuellen Eindruck her weiter vorne bzw. oben gerendert werden. Das sieht dann so aus:
Dass der Wert hier relativ groß gewählt wird, stört nicht, da Straßen normalerweise nur von schräg oben betrachtet werden. Der Wert units muss zumindest in diesem Fall nicht verändert werden.
Die Änderung sollte nicht in den Originaldateien vorgenommen werden. Besser ist es, eine eigene Mod dafür zu schreiben. Oder man benutzt gleich den Tramgleis-Texturen Tauscher bzw. den Tramgleis-Texturen-Tauscher C, die obendrein noch die Optik der Gleise optimieren.
Das Problem kann auch losgelöst von der Straßenbahngleis-Problematik bei den Oberflächen einiger Straßen-Mods beobachtet werden. Grundsätzlich können und sollten beim Modden von Straßen die Vanilla-Werte für polygon offset benutzt werden - hierbei muss die Reihenfolge eingehalten werden. forceDepthWrite = true darf nur für die unterste Textur eingetragen werden.
Diesen Lexikoneintrag habe ich in meinem laienhaften Verständnis verfasst. Sollte jemand noch Anmerkungen, Korrekturen oder Ergänzungen haben - nur zu!
Comments 2
Newly created comments need to be manually approved before publication, other users cannot see this comment until it has been approved.
Newly created comments need to be manually approved before publication, other users cannot see this comment until it has been approved.
VacuumTube
Ich habe immer noch enormes Z Fighting in den Vanilla Straßen, bei Ansicht von oben. Trotz aktivierter Mod Tramgleis-Texturen-Tauscher N (klappt die Optimierung auch hiermit, auch bei Straßen ohne Tramgleise?)
BTW Alternativer (temporärer) Fix ist in den Debug Tools das Terrain LOD error multiplier oder radius von 1 auf 10 zu stellen.
WernerK
Du meinst aber nicht die Zacken bei Führerstandsmitfahrt, sondern dass es aus extremer Vogelperspektive "zugeschüttet" aussieht, sprich die Erde durchscheint? Das ignoriere ich einfach, auch wenn es nicht so schön aussieht.
Der Texturen-Tauscher korrigiert nur den Abstand des Tramgleis-Layers, nicht den Straßenbelag, und auch nur bei Führerstandsmitfahrt, also aus geringer Entfernung. Zugabe möchte ich da nicht machen, denn dann sieht es irgendwann bei bestimmter Entfernung und Perspektive so aus, als ob die Gleise in der Luft hingen. Mit dem Faktor habe ich noch nicht experimentiert.
Das Z-Fighting im Straßenbelag - ohne Tramgleise - ist übrigens auch bei einigen Straßen bei JoeFried zu beobachten.