Verwendung von Texturen (Alphakanal)

  • Hallo,
    ab Loksim 2.8.3 wird es möglich sein, Texturen mit Alphakanal zu verwenden. Ab diesem Zeitpunkt ist dies auch die bevorzugte Variante für transparente Texturen und den alten Optionen "Schwarz ist transparent", "Transparenz ist die Farbe des Pixels links/oben" bzw. "Transparenz aus Graustufenbild" vorzuziehen.


    Aus diesem Grund möchte ich an dieser Stelle schon jetzt ein paar Tipps geben, wie man solche Texturen mit Paint.NET anlegt.


    Es gibt sicherlich auch andere - eventuell auch bessere - Wege um das gleiche Ergebnis zu erreichen. Die Tipps hier sollen allen helfen, die zuvor noch nichts von einem Alphakanal gehört haben.


    Konvertieren von "Transparenz aus Bitmap"
    Dafür ist zuerst der Download eines Plugins notwendig: http://forums.getpaint.net/ind…ha-mask-import-plugin-20/
    Die "AlphaMask.zip" herunterladen, in einen beliebigen Ordner entpacken und die enthaltene .dll ins Paint.NET\Effects Verzeichnis kopieren
    bei mir C:\Program Files\Paint.NET\Effects


    Das zu konvertierende Bitmap öffnen, Effekte - Alpha Mask wählen. Unter "Mask File" das Graustufenbild auswählen und OK klicken



    Konvertieren von "schwarz ist transparenz" und "Transparenz ist Farbe des Pixels links/oben"
    Den "Zauberstab" auswählen, den gewünschten Bereich damit markieren und "Entf" drücken. Wenn der gelöschte Bereich zu groß oder zu klein ist, die "Toleranz" des Zauberstabs ändern. Leider werden dabei hin und wieder "Sünden" sichtbar, da Loksim bei der Transparenz relativ "tolerant" ist und nicht nur vollkommen transparente Bereiche ausblendet
    Bei neuen Texturen sollte man aber unbedingt darauf achten, dass Pixel die ausgeblendet werden sollen, auch tatsächlich komplett transparent sind


    [Blockierte Grafik: http://s16.postimg.org/e55gbuexd/image.png]


    [Blockierte Grafik: http://s16.postimg.org/dgwlswg7l/image.png]



    Halbtransparente Texturen erstellen
    Bei einem neuen Bild zuerst den gesamten Hintergrund "löschen". Am einfachsten mittels Strg + A alles markieren und "Entf" drücken.


    Variante 1:
    Eine neue Ebene anlegen
    [Blockierte Grafik: http://s28.postimg.org/vao3m39bd/image.png]


    Auf der Ebene ganz normal zeichnen


    "Ebeneneigenschaften" wählen und die "Deckfähigkeit" ändern
    [Blockierte Grafik: http://s28.postimg.org/art7h0ve1/image.png]


    Variante 2:
    Direkt mit einer "transparenten Farbe" zeichnen. Dazu muss im Farbdialog auf "Mehr" geklickt werden und anschließend "Transparenz - Alphakanal" eingestellt werden
    [Blockierte Grafik: http://s28.postimg.org/8bre36dbd/image.png]




    Im Moment macht es keinen Unterschied, ob man im LoksimEdit "Transparenz aus Alphakanal - alle Transparenzwerte möglich" oder "Transparenz aus Alphakanal - nur sichtbar/unsichtbar" auswählt. In Zukunft könnte das allerdings für Optimierungen verwendet werden.
    "alle Transparenzwerte möglich" sollte man wählen, wenn im Bild auch halbtransparente Bereiche vorkommen. "nur sichtbar/unsichtbar" ist besser, wenn keine solchen halbtransparenten Pixel vorkommen. Also alle Pixel entweder komplett sichtbar oder komplett unsichtbar sind.
    Anders gesagt, bei allen Texturen wo man bisher "schwarz ist transparenz" bzw "Transparenz aus Pixel links/oben" gewählt hat, sollte man "nur sichtbar/unsichtbar" wählen. Bei Texturen wo man "Transparenz aus Bitmap" verwendet hat, ist "alle Transparenzwerte möglich" die richtige Wahl

  • Texturgröße
    Ein wichtiger Faktor für die Performance (und damit die erreichbaren fps) ist die Anzahl der so genannten "Draw Calls." Sehr einfach gesagt ist ein Draw Call der Befehl an die Graphikkarte eine (fast) beliebige Anzahl an Dreiecken mit einer bestimmten Textur an einem bestimmten Ort zu zeichnen. Insbesondere bei der derzeit von Loksim verwendeten Graphikschnittstelle spielen diese Draw Calls eine wichtige Rolle.
    Dies bedeutet im Umkehrschluss, dass für die Anzeige von zwei Objekten die eine unterschiedliche Textur nutzen auch zwei Draw Calls notwendig sind.


    Unter Berücksichtigung dieser Tatsachen ist es sinnvoll mehrere kleinere Texturen auf einer größeren Textur zusammenzufassen. Insbesondere bei Objekten die (fast) immer gemeinsam angezeigt werden: Beispielsweise die Teilobjekte eines Gruppenobjekts. Jedoch kann diese Optimierung auch für Texturen von mehreren Gruppenobjekten die fast immer ''nebeneinander'' angezeigt werden, Sinn machen. Hierzu gehören zB mehrere Gebäude eines charakteristischen Bahnhofs. Da durch das Zusammenfassen von Texturen eine größere Textur entsteht, sollte man jedoch Texturen von Objekten die häufig nicht miteinander angezeigt/aufgestellt werden, nicht zusammenfassen. Denn kleine Texturen sind sowohl bei der Darstellung als auch beim Laden effizienter.


    Andererseits sollten Texturen stets so klein wie möglich sein und den vorhandenen Platz möglichst gut ausnutzen. Auch wenn der Festplattenspeicher (und meist auch der Arbeitsspeicher) heute meistens groß genug ist (Loksim kann als 32Bit Anwendung nicht mehr als 4GB Hauptspeicher nutzen), so sind die Speicher auf - insbesondere integrierten - Graphikkarten nicht immer so groß. Zusätzlich ist zu beachten, dass kleinere Texturen schneller von einem Speicher in den anderen übertragen werden können. Die Wahl einer sinnvollen Texturgröße macht also immer noch Sinn.
    Zum einen ist dabei die Überlegung wichtig, wie groß das Objekt für welches die Textur gedacht ist, in der Simulator dann tatsächlich angezeigt wird. Eine Textur für ein Signallicht muss deshalb nur wenige Pixel breit sein. Andere Texturen wie zB die Texturen die für die Himmelsdarstellung verwendet werden, sollten auch für FullHD (1920x1080px) genug Details beinhalten. 4K Monitore können derzeit von Loksim nicht voll ausgenutzt werden und müssen deshalb beim Objektbau (noch) nicht beachtet werden. Eine Hausmauer die beispielsweise hin und wieder den halben Bildschirm des Simulators ausfüllt, kann also ruhig eine Breite von 1024px aufweisen. Größere Texturen sollte man eher vermeiden und bei Bedarf eher das Objekt zweiteilen: Eine Mauer wird zB selten den ganzen Bildschirm ausfüllen und sicherlich oftmals auch nur zum Teil dargestellt werden. Dann ist es effizienter, zwei halb so große Texturen zu benutzen und nicht eine einzige die doppelt so groß ist. Auch ist die Standardeinstellung der maximalen Texturgröße im Loksim derzeit 1024px. Ist eine Textur größer als diese Maximalgröße, wird die Textur beim Laden auf die Maximalgröße verkleinert.
    Zusätzlich ist zu beachten, dass zur Laufzeit intern immer mit Texturen die Zweierpotenzen als Seitengröße haben gearbeitet wird. Eine Textur der Größe 200x70px wird also beispielsweise beim Laden auf eine Textur mit 256x128px vergrößert. Die Textur wird dabei nicht tatsächlich "vergrößert", sondern es wird ein - nicht benutzter - Rand eingefügt. Die bedeutet, dass eine Textur der Größe 200x70px und eine mit 256x128px zur Laufzeit gleich viel Speicherplatz benötigt. Man könnte also entweder die Textur der Größe 200x70px auf 256x128px vergrößern, um mehr Details darstellen zu können oder man verwendet den "nicht genutzten Rand" für ein zweites/weiteres Objekt. Es sei gesagt, dass Texturen die keine Zweierpotenzen als Seitenlängen benutzen ''nur'' den Nachteil der Platzverschwendung haben.


    Transparenz
    Für transparente Objekte sollten die Optionen „schwarz ist transparent“, „Transparenzfarbe ist die Farbe des Pixels links/unten“ und „Transparenzfarbe aus Bitmap“ nicht mehr verwendet werden. Diese sind beim Laden aufwändiger zu behandeln wie die zwei neuen Methoden. Transparenz sollte bei neuen Objekten also nur mehr durch den Alphakanal in der Textur umgesetzt werden.
    Dafür stehen zwei Einstellungen zur Verfügung:


    Transparenz aus Alphakanal – nur sichtbar/unsichtbar
    Diese Option sollte gesetzt werden, falls die Textur nur vollkommen durchsichtige bzw. undurchsichtige Bereich enthält.
    Beispielbild (lokal abspeichern um Transparenz betrachten zu können)


    Transparenz aus Alphakanal – alle Transparenzwerte möglich
    Diese Option muss gesetzt werden, falls die Textur auch halbtransparente Bereiche enthält.
    Beispielbild (lokal abspeichern um Transparenz betrachten zu können)


    Ist man sich nicht sicher, sollte „Transparenz aus Alphakanal – alle Transparenzwerte möglich“ gesetzt werden. In einer zukünftigen Loksim-Version könnten Objekte mit „Transparenz aus Alphakanal – nur sichtbar/unsichtbar“ jedoch eventuell schneller dargestellt werden.
    Achtung: Derzeit gibt es keine Unterscheidung zwischen diesen beiden Optionen. Dies muss jedoch in Zukunft nicht so sein, und wenn bei einem Objekt fälschlicherweise „Transparenz aus Alphakanal – nur sichtbar/unsichtbar“ eingestellt ist, kann es zu Fehldarstellungen kommen.


    Kurzes Tutorial für Texturen mit Alphakanal

  • Hallo Lukas,


    danke für die Erläuterung bzgl. der "Vergrößerung" von Texturen im Loksim, die keine Kantenlängen mit ganzzahliger Zweierpotenz aufweisen.


    Gruß
    Rainer

  • Hallo Lukas,
    das mit den Texturgrößen habe ich verstanden. Sollte auch nicht schwierig sein, das in Zukunft zu beachten. Leider habe ich Probleme beim Verständnis mit dem Alphakanal.
    Was haben denn diese Dateien für eine Dateierweiterung? Ich verwende z.Z. Corel Photo Paint8 für meine Texturen. Das kann solche Sondersachen nur im Corel-Format abspeichern und ist wahrscheinlich für Loksim ungeeignet. Das Programm wird auch nicht mehr von den neueren Windows-Versionen unterstützt und läuft auf einer virtuellen XP-Variante.
    Gruß Rainer

  • Hallo Rainer,


    einen Alphakanal haben z.B. Portable Network Graphics (.PNG), wenn Du sowas mit Corel nicht direkt speichern kannst, sollte es eine Exportieren-Funktion dafür geben.


    Gruß, Klaus

  • Hallo Klaus,
    vielen Dank für Deine Antwort. Kannst Du mir vielleicht mal so eine kleine Datei mit Alphakanal zukommen lassen?
    Ich würde sie gerne mal beschnuppern.
    Gruß Rainer

  • Hallo Rainer,
    ich bin zwar nicht Klaus, aber die beiden im ersten Beitrag verlinkten Bilder enthalten beide einen Alphakanal. Ich bin kein Bildbearbeitungsprofi, aber das im ersten Beitrag verlinkte Tutorial erklärt die Bearbeitung von Bildern mit Alphakanal im kostenlosen Paint.NET Editor.
    Eine weiterführende Erklärung (und ein weiteres Beispielbild) findet sich zB auf Wikipedia


    lg
    Lukas

  • Hallo Lukas,
    danke für den Tipp!
    André ich werde es mir merken. Ich spiele mit dem Gedanken die alte Corel Version zu beerdigen, weiß aber nicht so recht worauf ich umsteigen soll.
    Das Photo Paint 8 habe ich ja nun schon etliche Jahre und ich möchte auch bei Corel bleiben. Erstens bin ich da einigermaßen sattelfest und zweitens habe ich sehr viele bearbeitete Bilder im .cpt Format (nicht nur von Loksim)
    Gruß Rainer

  • Zwar schon paar Tage alt der Post, aber @RainerB: Ich war ebenfalls jahrelang Nutzer einer alten Version von Corel PhotoPaint (könnte sogar 8 sein, müsste auf dem alten Rechner mal nachgucken). Inzwischen bin ich aber auf GIMP umgestiegen und kann das auch guten Gewissens empfehlen. Ist ein kostenloses (open source sogar) Graphikprogramm, das vom Funktionsumfang mit den kommerziellen Produkten locker mithalten kann und inzwischen (früher war das noch sehr anders) sehr angenehm zu bedienen ist. Ich fand den Umstieg von Corel zu GIMP auch relativ leicht dafür, dass da um die zwei Jahrzehnte technischen Fortschritts dazwischen liegen.

    Triebfahrzeugführer im Streckendienst der DB Fernverkehr in Frankfurt/Main
    BR: 101, 120, 147.5, IC-Steuerwagen, IC2-Steuerwagen, 401 ("ICE 1"), 402 ("ICE 2"), 403 ("ICE 3"), 406 ("ICE 3M"/"ICE 3MF"), 407 ("neuer ICE 3"), 411 ("ICE T"), 415 ("ICE T")

  • Tach Zusammen,


    durch Diskussionen rund um den Fahrleitungsgenerator sind mir bezüglich Texturen dann doch einige Fragen gekommen.
    Eine Umstellung von BMP auf PNG ist nicht die Frage, eher wie es mit der Transparenz aussieht.
    Die Drähte der Hochketten werden ja nicht durch einfach durchgefärbte Flächen dargestellt, sondern mit zwei transparenten Bereichen. Das hat natürlich zur Folge, das wir ein Problem mit hintereinanderliegenden transparenten Objekten bekommen. Und jetzt zu meinen Fragen:


      [li]Die Drähte sollen ja 'rund' aussehen, wie müssen dann die Verktoren der Punkte gestellt sein wenn ich genau zwei/vier Flächen habe?[/li]
      [li]Oder ist es sinnvoll mit einem Körper zu arbeiten? Und wie sind die Vektoren dann zu stellen[/li]
      [li]Eine andere Frage ist, macht es Sinn bei Objekten der FL-Anlage grundsätzlich körperliche Objekte einzusetzen oder reicht es aus, plane Objekte zu nehmen wenn eine 'Körperlichkeit' nicht sichtbar ist. Auch hier stellt sich die Frage nach den Vektoren, allerdings nicht in der Schärfe wie beim Draht.[/li]
      [li]Und damit verbunden ist die Frage, in wie fern die Anzahl der Flächen einen Einfluß auf die Graphikleistung des Loksims hat. Wir sprechen immerhin von bis zu 52 bzw. 104 Rechteckflächen je Hochkette[/il]


    Vielleicht ergeben sich hier erhellende Antworten.


    Gruss
    Uwe, grübelnd

    --
    Wenn du die Götter zum Lachen bringen willst, mach’ einen Plan.

  • Hallo Uwe!



      [li]Die Drähte sollen ja 'rund' aussehen, wie müssen dann die Verktoren der Punkte gestellt sein wenn ich genau zwei/vier Flächen habe?[/li]
      [li]Oder ist es sinnvoll mit einem Körper zu arbeiten? Und wie sind die Vektoren dann zu stellen[/li]


    Bzgl. den Vektoren: Der 2.9.3er LoksimEdit besitzt die Funktion "Normalenvektoren berechnen (rundes Objekt)". Diese setzt die Normalenvektoren entsprechend. Bei einem flachen Objekt ist es aber schwierig. Ich würde der Funktion trotzdem vertrauen, die Normalenvektoren werden dann schlicht normal auf die Flächen stehen.
    Ob es "Sinn macht" mit einem Körper zu arbeiten weiß ich nicht. Je nachdem wie schwierig die Umsetzung ist, würde ich es einfach mal probieren wie es aussieht.



      [li]Eine andere Frage ist, macht es Sinn bei Objekten der FL-Anlage grundsätzlich körperliche Objekte einzusetzen oder reicht es aus, plane Objekte zu nehmen wenn eine 'Körperlichkeit' nicht sichtbar ist. Auch hier stellt sich die Frage nach den Vektoren, allerdings nicht in der Schärfe wie beim Draht.[/li]


    "Normalenvektoren berechnen (Standard)" ;) Sinnhaftigkeit wie oben :)



      [li]Und damit verbunden ist die Frage, in wie fern die Anzahl der Flächen einen Einfluß auf die Graphikleistung des Loksims hat. Wir sprechen immerhin von bis zu 52 bzw. 104 Rechteckflächen je Hochkette[/il]


    Auch bei der Performance ist der einzig wirklich richtige Weg "testen" :) Bzgl. Testen kann ich bei Bedarf auch gerne helfen, ich habe dafür ein Programm geschrieben mit dem das recht schnell und einfach geht (wenn es entsprechende Teststrecken gibt).
    Die Anzahl der Flächen sollte nicht allzu viel Einfluss haben. Wichtig wäre, dass möglichst wenig Texturen eingesetzt werden damit alles in "einem Rutsch" dargestellt werden kann.


    lg
    Lukas

  • Hallo Lukas,



    Hallo Uwe!



    Bzgl. den Vektoren: Der 2.9.3er LoksimEdit besitzt die Funktion "Normalenvektoren berechnen (rundes Objekt)". Diese setzt die Normalenvektoren entsprechend. Bei einem flachen Objekt ist es aber schwierig. Ich würde der Funktion trotzdem vertrauen, die Normalenvektoren werden dann schlicht normal auf die Flächen stehen.

    die Funktion ist neu! ;) Ich habe es mir mal kurz angesehen, wie das Ergebnis aussieht und ich werde das so im FLG wohl umsetzten, solange ich bei der Hochkette mit genau zwei Flächen je Teilstück arbeite.



    Ob es "Sinn macht" mit einem Körper zu arbeiten weiß ich nicht. Je nachdem wie schwierig die Umsetzung ist, würde ich es einfach mal probieren wie es aussieht.

    Nun, die Frage ging eher an die verehrten Streckenbauer. Ich müsste das ja 'nur' Programmieren. Da stellt sich einfach die Frage nach dem Verhältnis von Aufwand zu Nutzen. Nachher ist das vielleicht sogar verschlimmbessert. :(



    "Normalenvektoren berechnen (Standard)" ;) Sinnhaftigkeit wie oben :)

    Nun auch hier ging die Frage eher an die Streckenbauer.



    Auch bei der Performance ist der einzig wirklich richtige Weg "testen" :) Bzgl. Testen kann ich bei Bedarf auch gerne helfen, ich habe dafür ein Programm geschrieben mit dem das recht schnell und einfach geht (wenn es entsprechende Teststrecken gibt).
    Die Anzahl der Flächen sollte nicht allzu viel Einfluss haben. Wichtig wäre, dass möglichst wenig Texturen eingesetzt werden damit alles in "einem Rutsch" dargestellt werden kann.

    Naja, testen ist halt ein langer Weg und ich bin da eher, sagen wir mal, faul. 8)
    Und was die Texturen angeht, so habe ich geplant, das die komplette FL-Anlage letztlich mit einer, maximal zwei Texturen auskommt.
    Hab' also vielen Dank für Deine Ausführungen.


    Gruss
    Uwe

    --
    Wenn du die Götter zum Lachen bringen willst, mach’ einen Plan.

  • Hallo,


    Zitat

    Eine Umstellung von BMP auf PNG ist nicht die Frage, eher wie es mit der Transparenz aussieht.
    Die Drähte der Hochketten werden ja nicht durch einfach durchgefärbte Flächen dargestellt, sondern mit zwei transparenten Bereichen. Das hat natürlich zur Folge, das wir ein Problem mit hintereinanderliegenden transparenten Objekten bekommen.


    Bei mir verschwinden einige Hochketten, wenn man darunter durchfährt. Deshalb würde ich auf die Transparenz verzichten (hab noch nicht nachgeguckt, aber wozu dient die überhaupt?).


    Zitat

    Die Drähte sollen ja 'rund' aussehen, wie müssen dann die Verktoren der Punkte gestellt sein wenn ich genau zwei/vier Flächen habe?
    Oder ist es sinnvoll mit einem Körper zu arbeiten? Und wie sind die Vektoren dann zu stellen


    Ich würde in Hochketten generell auf Körper verzichten. Auf einer Nachspannlänge hat man bereits jetzt um die 1000 Punkte - mehr sollten es meiner Meinung nach nicht werden.


    Der Aufwand würde sich (wie ich finde) nicht lohnen. Zumal einige Strecken ja auch so schon nicht ganz ruckelfrei sind.


    Gruß
    Paul

  • Tach,


    Hallo,



    Bei mir verschwinden einige Hochketten, wenn man darunter durchfährt. Deshalb würde ich auf die Transparenz verzichten (hab noch nicht nachgeguckt, aber wozu dient die überhaupt?).

    im Prinzip deshalb: http://www.loksimulatoren.de/i…rke/?postID=6838#post6838


    Ob das jetzt immer noch so sein muß, da bin ich überfragt. Wenn ich das bei mir soweit umgeschrieben habe, werde ich weitersehen. Es sei denn, das muß immer noch so sein...


    Gruss
    Uwe

    --
    Wenn du die Götter zum Lachen bringen willst, mach’ einen Plan.

  • AndreW

    Hat das Label Tutorial hinzugefügt