Z-Fighting bei Straßen

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


Sie betrachten gerade eine ältere Version des Eintrags. Klicken Sie hier, um zur aktuellen Version zu gelangen.

  • Bei Führerstandsmitfahrt auf steileren kurvigen Straßenbahnstrecken taucht ein Bug auf, der den Untergrund zackenförmig durchscheinen lässt. Ursache ist eine Einstellung in der entsprechenden .mtl-Datei.

    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 -6 auf -3 ä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:

    Code
    polygon_offset = {
    factor = -6,
    units = -3,
    },

    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! ;)

Teilen

Kommentare

  • 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.

    • 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.