Suboptimale Darstellung von Kanten auf Scripttexturen

++ Update: 02.04.2026, 16:05 Uhr: Analysen und Erläuterungen. Siehe Artikel ++
++ Update: 31.03.2026, 21:35 Uhr: siehe Artikel ++
Achtung: Sicherheitswarnung für ein Programm aus unserer Filebase
Wir haben bei dem Programm "No More Sleep!" aus unserer Filebase Sicherheitsbedenken feststellen müssen. Für Nutzer, die die neuste Version des Programms von letzter Woche nutzen, haben wir hier weitere Informationen zusammengestellt: **Klick**
Willkommen in der OMSI-WebDisk!
Als Gast kannst du nur Inhalte in deiner ausgewählten Sprache sehen. Registrierte Nutzer können die Sichtbarkeit anderer Sprachen in ihrem Kontrollzentrum aktivieren, weitere Infos hier.
Alle Themen sind in den Foren mit einer Sprachflagge gekennzeichnet: = Englisch [EN], = Deutsch [DE], = Französisch [FR]. Wenn du die angegebene Sprache nicht beherrschst, schreibe auf Englisch!
  • Moin zusammen,


    ich arbeite gerade das erste mal so richtig mit Scripttexturen und bin konkret grade dabei, einen Drucker, auf dem natürlich Text auf dem Bildschrim dynamisch angezeigt werden soll, von Texttexturen auf eine Scripttextur umzuwandeln. Ist natürlich erstmal viel Aufwand, später dann aber einfacher zu managen.

    Ich habe also meine Scripttextur und eine passende Font und schreibe mit meine Script entsprechend Texte darauf (hier einfach Datum und Uhrzeit).


    Allerdings habe ich das Problem, dass die Kanten der Schrift beim Übergang in die Transparenz eine "Graubraunfärbung" aufweisen, die sich, wenn man etwas rauszoom not verstärkt, sodass man eigentlich kaum noch etwas erkennen kann. Das Problem hatte ich mit Texttexturen nicht. Woran kann das liegen? Bei anderen Druckern, wie z.B. dem AFR4 funktioniert es ja auch. Was mache ich falsch?

    Meine Font hat eine relativ hohe Auflösung und hat Kantenglättung (selbst ohne Kantenglättung und mit matl_alpha 1 habe ich das gleiche Problem...


    Vielleicht kennt sich damit jemand besser aus und kann mir helfen...


    Hier nochmal ein paar Bilder von dem Problem.


    und von weiter rausgezoomt:

  • Das Problem beim Mipmapping ist, Dass zwei nebeneinander liegende Pixel für die nächst kleinere Texturstufe zusammengerechnet werden.
    Stell dir vor, Weiß ist deine Schrift, Schwarz ist der Alphakanal. halbierst du die Texturmaße, werden 2 nebeneinanderliegende Pixel zusammengerechnet. Aus Weiß (255) und Schwarz (0) ergibt sich 127 (grau). Die entstande Mipmap hat nun also eine "weichgezeichnete" kante mit einer halbtransparenz.
    in der nächsten stufe wird nun diese graue pixelkante wieder mit dem schwarzen pixel daneben multipliziert. Dies ergibt also eine Transparenz von 64. nächste stufe 32.
    umso weiter du also weggehst, desto mehr "blutet" der Alpha-kanal in die Pixel der sichtbaren Buchstaben

  • Okay, alles klar, das gibt durchaus Sinn, verstehe ich.

    Die Frage ist halt, was man dagegen tun kann. - Wie gesagt, bei anderen Fahrzeugen/Druckern geht es ja auch, aber ich konnte nicht nachvollziehen, was da anders gemacht wurde... ?(

  • Fr mich schaut es so aus, als würdest du [useScriptTexture] verwenden. Das ist prinzipiell auch eine gute Idee, allerdings gerade für hellen/weißen Text wäre es besser, die Scripttextur als Alphakanal zu verwenden. Damit hast du das Problem nicht. Alternativ kannst du - wie im verlinkten Thread beschrieben - den Hintergrund auf die Scripttextur holen. Damit verschwindet das Problem auch.

  • Ja, das ist richtig, vielen dank schonmal.

    Ich habe mir den verlinkten Thread mal in Ruhe vollständig durchgelesen und aus meiner Sicht gibt es jetzt drei sinnvolle, halbwegs umsetzbare Techniken, auf die Art und Weise, die ich brauche, mit Scripttexturen zu arbeiten:

    • Ein transparentes Face vor dem eigentlichen Bildschirm mit Scripttexturen beschreiben:
      Das ist der Fall, den ich gerade verwende, eigentlich das offensichtlichste und einfachste, hat aber eben leider das (technisch durchaus nachvollziehbare) Problem mit den Mipmaps und den daraus resultierenden unschönen Kanten (gerade bei hellem Text vor dunklem Hintergrund)
    • Ein eigentlich komplett farbiges Face, was durch Scripttexturen eine Transmap bekommt:
      Das dürfte ja das Konzept sein, wie die meisten Matrizen in OMSI funktionieren, hier hat man wohl angeblich das "Kantenproblem" also nicht. Nachteil ist hier aber eben, dass man ja immer nur in einer Farbe (der Hintergrundfarbe der Textur) zeichnen kann, weshalb das natürlich für komplexe oder sehr Variable "Fabrkompositionen" schwierig wird. In meinem Fall wäre das aber eigentlich durchaus dennoch umsetzbar, indem ich halt auf meiner Hintergrunddtextur verschieden Bereiche in jeweils den Farben, die der Text dort haben soll, färbe (z.B. oben ein weißer Streifen für eine Infozeile mit weißer Schrift und darunter eine schwarze Fläche, weil dort Dinge in schwarz stehen sollen). Es gibt zwar auch verschiedene Menüs und Light/Darkmode, weshalb man mal die Farben ändern muss, aber das hält sich soweit in Grenzen, dass ich es für möglich halte, entsprechend verschiedene Hintergrunddtexturen anzulegen und diese mittels Freetex durchzuschalten.
    • Komplettes zeichnen der eigentlichen Haupttextur auf die Scripttextur:
      Hatte ich auch schon überlegt, das Problem hierbei ist aber (neben der Tatsache, dass das darauffolgende Text-schreiben wohl etwas rumbuggt), dass diese Methode vor allem sehr inperformant ist (was ja Sinn ergibt, wenn eine komplette (in meinem Fall 1024*1024px-Textur) einmal komplett "abgeschrieben" werden muss. Testweise hatte ich das mal in jedem Frame drinne und das sorgte im Spiel für ca. 12 statt sonst 50-60 fps. :cloudy: Am ende müsste man natürlich nicht in jedem Frame die Textur neu zeichnen aber ja immer mindestens einmal die Sekunde (da eine Uhr mit Sekundenstelle existiert). Daher halte ich das trotzdem nicht für die praktischste Methode.

    Ich hoffe, ich habe das jetzt soweit alles richtig verstanden und zusammengefasst.

    Ich werde den zweiten Vorschlag probieren, indem ich mit matl_transmap arbeite und schauen, ob ich damit bessere Ergebnisse erhalte.


    Vielen Dank dafür schonmal!

  • Am ende müsste man natürlich nicht in jedem Frame die Textur neu zeichnen aber ja immer mindestens einmal die Sekunde (da eine Uhr mit Sekundenstelle existiert). Daher halte ich das trotzdem nicht für die praktischste Methode.

    Wofür das?


    Du musst mit Scripttexturen eigentlich jedes Textfeld separat behandeln und separat aktualisieren, sonst wird es richtig imperformant. Also in dem Fall nur die Uhrzeit aktualisieren, nicht aber den Rest vom Bildschirm.

  • Aber dann könnte ich auch genau so gut Texttexturen verwenden. Ich sehe dann keinen Mehrwert, überhaupt auf das Scripttextur-System zurückzugreifen.


    Der Mx-200-C2 z.B. verwendet auch nur eine Scripttextur für den ganzen Bildschirmt:

    Code
    2: Atron Display
    [scripttexture]
    1024
    512
  • Der Atron verwendet die Scripttextur aber als Alphakanal, und als zugehörige Textur wird mittels freetex einfach eine entsprechende Textur aufgeschaltet, die dann die entsprechenden Farben von den benötigten Textfeldern besitzt.

  • Ja, das wäre auch mein Plan jetzt, das so umzusetzen. :)