Darstellung der Spiegelreflexion

  • Hallo zusammen,


    mir fällt immer wieder auf, dass bei dem allermeisten Bussen, auch den OMSI 2-eigenen, die Reflexion der Außenspiegel in der Vertikalen verzerrt dargestellt wird. Dabei scheint es so, als wären die reflektierten Bilder entlang der y-Achse gestreckt. Dies wirkt nicht nur optisch unglücklich, es hat auch negative Auswirkungen auf das Fahrgefühl, da die seitlichen Abstände nicht mehr richtig einschätzbar sind. Eine positiv hervorzuhebende Ausnahme bilden Busse des Drei-Generationen-Addons, bei denen die Außenspiegel realistischer reflektieren.


    Für OMSI 2 wurden bisher überaus gelungene Busse entwickelt. Umso wünschenswerter ist es dabei, dass die Entwickler bei der Spiegelreflexion auf eine unverzerrte Darstellung achten. Dies soll die großartigen Leistungen der Entwickler nicht in Zweifel ziehen, sondern als Anregung verstanden werden.


    Abschließend sei noch die Frage erlaubt, ob es dem Nutzer selbst möglich ist, die Darstellung nachträglich anzupassen bzw. zu entzerren oder ob dies nur der Entwickler selbst, etwa durch ein Update, vornehmen kann.


    Gruß
    Peter G.

  • Jegliche Korrekturen, kannst du selber anpassen. Dazu besitzt jeder Spiegel einen eigenen Eintrag in der Bus-Datei. Welcher Spiegel welchen Eintrag bekommt, wird aber in der model.cfg festgelegt.


    ### linker Außenspiegel
    [add_camera_reflexion_2]
    -1.336
    5.104
    2.139
    0
    52
    173
    -15
    0.15


    Hier ein Beispiel für die Ausrichtung und einstellung des linken Außenspiegels. Mit dem 4 und 5. Wert, stellst du den Sichtwinkel der Darstellungsfläche ein. Je höher der Wert umso mehr wird dargestellt. Wird der Wert gesenkt, ist weniger zu sehen, dafür wird das Bild dann "entzerrt".


    Umso wünschenswerter ist es dabei, dass die Entwickler bei der Spiegelreflexion auf eine unverzerrte Darstellung achten.


    Bitte entschuldige das die Buserbauer, viel mehr auf eine realistische Umsetzung Wert legen als auf deine Wünsche, die nichts mit der Realität zu tun haben. Denn die meisten Spiegel haben eine Krümmung oder eine Wölbung, um in der kleinen Spiegelfläche einen größeren Sichtbereich darstellen zu können. Die bösen Busentwickler nutzen vermehrt gewölbte Spiegel, statt vernünftige Kleiderschrankspiegel mit den Maßen 2x4 Meter anzubauen.

  • @ Tatra:


    Danke für den Hinweis auf die Einträge für Ausrichtung und Einstellung der Spiegel, jedoch ist mir diese Möglichkeit bekannt. Durch eine Änderung der Einträge wird allerdings die Entzerrung selbst nicht behoben. Apassen lassen sich lediglich Position der Spiegelfläche und Sichtwinkel. Auch eine Verringerung der Darstellungsfläche führt nicht zu einer Entzerrung. Denn hierbei wird das Spiegelbild proportional verändert. Wenn das Spiegelbild bereits in seinem Grundformat verzerrt ist, bleibt es verzerrt. Vermutlich müssten die Proportionen des Spiegelbilds verändert werden.


    Warum sollte mein Wunsch nichts mit der Realität zu tun haben? Gerade Spiegel älterer Busse weisen eine ebene Fläche auf. Krümmungen oder Wölbungen finden sich zumeist bei Spiegeln moderner Busse. Es stimmt, dass dadurch das Sichtfeld vergrößert wird. Dies betrifft in der Regel aber nur den unteren Bereich des Spiegelglases. Eine (vertikale) Verzerrung für das Spiegelglas insgesamt ergibt sich dadurch gerade nicht.


    Ich hoffe, dein Kommentar bezüglich der "Kleiderschrankspiegel mit den Maßen 2 x 4 Meter" ist ironisch gemeint.


    Gruß
    Peter G.

  • @ Tatra:


    Keine Antwort ist auch eine Antwort. Nur zur Ergänzung meiner vorherigen Beiträge: Die Seitenspiegelgläser der kommerziellen Addons Stadtbus O305 und Citybus O405 weisen ebenfalls keine verzerrte Darstellung auf. Dies dürfte Beweis genug dafür sein, dass eine unverzerrte Spiegelreflexion nicht nur ein von mir geäußerter Wunsch ist, sondern auch durchaus etwas mit der Realität zu tun hat. Dies umso mehr, wenn die Umsetzung durch Profi-Entwickler erfolgt.


    Gruß
    Peter G.

  • Ich hole mal diesen Topic zurück.
    Die Facelift Busse von Alterr weisen auch stark verzerrte Spiegelreflexionen.
    In einem Video habe ich neulich gesehen, dass der YouTuber es augenscheinlich hinbekommen hat mittels der Daten von MAN Stadtbus zu entzerren.
    Es wurde auch unter dem Video gefragt wie das möglich sei, gab aber bisher keine Antwort augenscheinlich.


    Hat da jemand eine Idee, wie er das gemacht haben könnte ?

  • Alles eine Frage des Mappings.
    Folgende Formatsangaben im Monitorformat (Breite x Höhe)
    Im Grundsatz ist die Textur zum mappen eine quadratische Textur (512x512), was dem Format 1:1 entspricht.
    Als Spiegelfläche hat man aber ein Objekt im Format 1:2 oder ähnlicher Dimension. Also doppelt so hoch wie breit
    Damit ergeben sich mehrere Möglichkeiten:
    1. Man mappt die Textur bis an allen Rändern des Objektes - es entsteht eine verticale Zerrung, womit die Wölbung simuliert wird.
    2. Man mappt die Textur, ohne das Objekt in der Form zu ändern - womit der horizontale Sichtbereich eingeschränkt wird.
    3. Man überlagert die Texturfläche und mappt eine Kachelung auf den Spiegel - was die Sicht sauber darstellt, aber die Spiegel benötigen mehr Leistung.


    Also die einfachste Variante ist das Mapping auf dem Objekt zu berichtigen.


    Keine Antwort ist auch eine Antwort.


    Bin ich verpflichtet zu antworten?

  • Bin ich verpflichtet zu antworten?

    @ Tatra: Selbstverständlich bist Du nicht verpflichtet, zu antworten. Es ist nur so, dass ich persönlich immer gerne eine Rückantwort auf meine Beiträge erhalte. So hast Du doch auf den Beitrag von mobiel ausführlich reagiert und damit gezeigt, dass Du über Hintergrundwissen verfügst und Möglichkeiten der Problemlösung kennst.


    Zur Sache: Handelt es sich bei der zu "mappenden" Spiegeltextur um die Dateien "reflexion0" und "reflexion1" im Texturordner des jeweiligen Busses? Wie und mit welchem Programm kann die Textur denn "gemappt" werden? Gibt es bereits entsprechende Tutorials?


    @ mobiel: Vielen Dank, dass Du einen Beitrag zu dem Problem der verzerrten Spiegelreflexion verfasst hast.


    Gruß
    Peter G.

  • Hallo zusammen,


    außer Tatra sind natürlich all diejenigen Nutzer des Forums angesprochen, die sich mit "Mapping von Texturen" auskennen und bereit sind, ihr Wissen hier mit anderen zu teilen.


    @ mobiel: Wie lautet denn der Link zu dem Video?


    Gruß
    Peter G.

  • Tja, das ist so ne Sache. Wenn ich versuche, ordentliche Spiegel zu erstellen, überrasche ich mich auch immer mal wieder selbst. :D Im Grunde hat Tatra aber recht mit seinem letzten Beitrag.


    Soweit ich das Prinzip verstanden habe: Man definiert ja quasi in der .bus mit den Spiegeleinträgen neue Sichten. Dabei kann man die Position, Rotation und den allgemeinen Sichtwinkel und solche Späße einstellen, aber nicht konkrete Stauchungen in eine bestimmte Richtung. Ein bisschen kann man das vermutlich trotzdem mit dem Sichtwinkelwert verändern, aber nur gesamt. Diese nun erzeugten Sichten werden dann in Omsi in jedem Frame gerendert, und immer live 1:1 in den Texturen "reflexion_0.bmp", "..._1.bmp" usw gespeichert. Bis dahin ist noch alles gut.
    Diese Texturen sind die "Spiegelungen" auf den Seitenspiegeln. Die Spiegelfläche wird dabei beim Modellbau (z.B. in Blender) auf die Hilfstexturen mit den entsprechenden Namen gemappt, und die werden dann in Omsi durch die "Livebilder" ersetzt. Und zwar mit dem selben Mapping. Sprich, wenn der Busbauer die Hilftextur verzerrt gemappt hat, ist auch die Spiegelung in Omsi am Ende verzerrt. Dabei kommt es natürlich drauf an, was der jeweilige Busbauer am Ende erreichen will, wenn man aber einen "normalen" Spiegel haben möchte, sollte man das ganze mittels "Project from View" unwrappen und dann auf die richtige Größe skalieren, und nicht mittels "Project from View (Bounds), das alles so verzerrt, dass die gesamte Texturbreite ausgefüllt wird. Letzteres habe ich bei einigen Bussen stark im Verdacht. :D


    Zur Veranschaulichung mal zwei Bilder vom Seitenspiegel meines KT. Oben als "normaler" Spiegel, unten mit optisch erzeugter Wölbung:



    Das Ganze zu bearbeiten, wenn man die originalen, unverschlüsselten Modelldateien nicht hat, ist so ohne Weiteres nicht möglich. Von einigen Bussen, zum Beispiel Alterrs Citaros kommt man aber an ebendiese Dateien, kann sich dann also die entsprechenden Objekte bearbeiten, exportieren, und in Omsi einfügen. Das sollte problemlos klappen.



    Aber wie gesagt, so ganz habe ich das Thema selbst nicht durchdrungen. Das ist nur das, was ich so für mich herausgefunden habe, vielleicht gibt es aber auch noch andere, deutlich leichtere Möglichkeiten, die ich nicht kenne. ;)

  • Kartoffelphantom, mich würde mal interessieren, was du nun nicht verstanden hast? Du hast alle erfasst und erklärt. Mehr gibt es da nicht.


    Letzten Endes muß man den Spiegel neu mappen, wenn man eine Verzerrung verhindern (beseitigen) möchte. Aber dazu muß man zwangsweise den Umgang mit einem 3D-Programm erlernen. Und wenn man keine originalen Modelldateien hat und an diese auch nicht rankommt, dann muß man die Spiegelfläche neu bauen. Ist die Spiegelfläche mit dem Spiegel (und der vielleicht mit dem Wagenkasten) ein Objekt, dann kannst du dir den Rest alleine ausrechnen.
    Gibt noch eine andere Möglichkeit. Aber Omsi mag es nicht, wenn Breite und Höhe der Textur nicht gleich ist. Besonders bei der Spiegelsache ist eine quadratische Textur sehr nachteilig.


    Ist auch egal, Kartoffelphantom, du hast das Spiegelthema ganz genau erfasst. Denke nicht zu kompliziert, es sieht nur chaotisch aus, aber einige Sachen sind auch ganz einfach in Omsi gestrickt. Und vieles ist nur unverständlich, wenn man nicht den Hintergrund kennt, oder nicht bereit ist, mal selber etwas auszutesten.



    Gruß Tatra

    Einmal editiert, zuletzt von Tatra ()

  • ACMG, das ist eine absolut berechtigte Frage, aber beantworten kann ich es dir leider nicht.


    Für mich macht allein die Aussage keinen Sinn. Da in jeder einzelnen o3d Datei die Texturzuweisung via Pixel eingetragen ist, kann es eigentlich egal sein, wie groß die Textur letzten Endes ist. Aber Omsi arbeitet leichter mit quadratischen Texturen. Beim Geld, bei den Fahrkarte und bei den Fonts ist es auch egal, ob die Grundtextur quadratisch ist oder nicht. Nur bei den Objekttexturen für Buseigene Objekte und Mapobjekte ist es nicht egal. Ich habe zwar eine Theorie, aber ich habe keine Beweise für die Darlegung.

  • Also es gilt im Allgemeinen (nicht nur auf OMSI bezogen), dass die Kantenlänge von Texturen Zweierpotenzen sein sollten, d.h.:
    2^0=1
    2^1=2
    2^2=4
    2^3=8
    2^4=16
    2^5=32
    2^6=64
    2^7=128
    usw.
    Eine Textur kann also durchaus nichtquadratisch sein, ohne dass das negative Auswirkungen hätte, z.B. 2x4096 Pixel oder 1024x16 Pixel, etc. Hingegen wäre eine Texur von 129x129 Pixel ungünstig, weil sie dann intern auf 256x256 Pixel vergrößert wird. Der eine Pixel in Breite und Höhe ggü. 128x128 verursacht damit eine um das Vierfache größere Textur im Speicher.
    Bei den Fonts ist die Kantenlänge egal, weil OMSI daraus Ausschnitte (die Buchstaben) herausschneidet und in eine interne Textur für den Text (die Text-Textur aus dem [texttexture]-Eintrag) packt. Vermutlich ist es sinnvoll, wenn diese Text-Textur dann wieder Kantenlängen in Zweierpotenzen aufweist. Die Größe in Pixeln wird ja in der cfg-Datei definiert.
    Dass es bei Geld und Fahrkarten egal ist, war mir bisher nicht bekannt und ist auch nicht logisch nachvollziehbar.

  • Bei den Fonts ist die Kantenlänge egal


    Das selbe Prinzip verwendet Omsi bei den Fahrkarten, dem Geld und bei den Texturen. Es werden jeweils nur die Pixel-Koordinaten in der o3d gespeichert. Genauso wie beim Font wird also nur der gemappte Bereich genutzt, der beim Font und beim Geld in einer Textdatei definiert ist.


    Wenn ich mir die Busse von M+R Software ansehe, die ich als Standard bezeichnen würde, dann stimmt dein Beitrag. Es sind nicht alle Texturen quadratisch, aber die Zweierpotenzen der Kantenlänge wurde eingehalten.


    Wieso fragst du eigentlich, wenn du die Antwort selber kennst?


    Ich bin davon ausgegangen, dass es quadratische Texturen sein müßen, weil in sehr vielen Bussen quadratische Texturen enthalten sind, auch wenn nichtmal die Hälfte der Texturfläche genutzt wurde. Außerdem wurde im Forum mehrfach geschrieben das Texturen immer die selbe Kantenlänge haben sollte.

  • Da in jeder einzelnen o3d Datei die Texturzuweisung via Pixel eingetragen ist, kann es eigentlich egal sein, wie groß die Textur letzten Endes ist.


    Äääh... Ich glaube, da liegst du falsch. Wieder bin ich mir nicht zu hundert Prozent sicher, aber die Erfahrung sagt mir, dass das ganze nicht an die Pixel gekoppelt ist, sondern alle Punkte anteilig an der Gesamttextur gemessen werden. Deshalb kann ich auch eine quadratische Fläche komplett auf eine quadratische Textur mappen, und dann im Nachhinein einfach die Textur gegen eine rechteckige, nicht-quadratische Textur tauschen, ohne dass das Omsi großartig stören würde. Es wird immer noch die gesamte Textur ausgenutzt, und halt so verzerrt, dass sie quasi wieder quadratisch wird. Sorum zumindest, wenn es in diese Richtung geht.


    Andersherum habe ich keine Ahnung, das wäre jetzt hier aber spannend. Wenn ich eine von diesen Spiegel-hilfs-Texturen einfach mal rechteckig mache, rendert Omsi dann trotzdem noch quadratische Bilder darauf? Vermutlich. Jetzt aber die Frage: Ersetzt es diese Texturen dann richtig durch neue quadratische Echtzeitbilder, das würde uns hier nicht helfen, staucht es seine Bilder auf das vorgegebene Maß zusammen, auch das hilft uns nicht, da die Reflexion dann von den Spiegeln wieder entstaucht werden würde, oder "beschneidet" das neue Maß die Echtzeitbilder? Letzteres wäre prima, denn durch das trotzdem stattfindende Entstauchen durch das Mesh könnte man so eine Verzerrung ausgleichen.

  • Äääh... Ich glaube, da liegst du falsch.


    Nein, da liege ich nicht falsch. Schau dir mal eine X-Datei genau an. Als Beispiel nehmen wir dein Screenshot vom Spiegel. Dein Spiegel hat 18 (?) Polygone = 54 Vertices (die orangenen Punkte). Diese sind in der X-Datei für jeden einzelnen Vertices eingetragen. aber ist wird auch die gesamte Größe der Textur eingetragen. Veränderst du jetzt die Größe der Textur, muß Omsi jedesmal, wenn dié Spiegelfläche neu erstellt (geladen) wird, die genaue Position der Vertices neu berechnen, im Verhältnis zur Gesamtgröße der Textur. Das macht für ein Objekt wenig aus, zumindst bemerkt man davon nicht viel. Ich habe den Fehler schon gemacht. Ich habe 72 Objekte auf einer Textur gemappt. Damit ich genau mappen kann, habe ich die Textur vergrößert, auf 4096x4096 Pixel. Läßt sich prima mappen und man arbeitet sehr sauber. Für Omsi ist diese Textur zu groß, also habe ich die Textur verkleinert auf 1024x1024 Pixel. Der Nachteil machte sich dann in Omsi bemerkbar, weil Omsi leichte Einbrüche in den FPS hatte. Ich konnte mir nicht vorstellen, das eine einfache kleine Holzkasse so an der Performance zieht. Also habe ich mit 1024x1024 neu gemappt und die FPS blieben konstant. Macht man das bei einem Bus mit vielen Objekten, wird man sein blaues Wunder erleben. Noch mehr macht es sich bemerkbar, wenn die Texturen in ein ungünstiges Verhältnis gebracht werden. Beachtet man die Hinweise von ACMG nicht, wird das Problem vergrößert, auch wenn der Rechenaufwand für Omsi zur Pixelposition gleich bleibt. Das liegt daran das Omsi die Texturen erst auf ein passendes Format bringen muß und dann die Pixelposition neu berechnen kann.


    Zum zweiten Teil. Würdest du eine nichtquadratische Textur erstellen und als Spiegelfläche einsetzen (wird ja durch den Texturnamen gemacht) könntest du den Spiegel verzerrungsfrei mappen ohne das Mash zu verändern. Omsi würde auch damit arbeiten. Ob Omsi hier die quadratische Echtzeitbilder auf die nichtquadratische Textur quetscht weiß ich auch nicht. Ich nutzt das was da ist und verändere nur den Texturnamen. Ist aber im Grunde genommen auch egal, solange es Omsi rechenseitig nicht belastet. Das müßte man testen.
    Die andere Möglichkeit wäre, mal verschiedene Buserbauer zu fragen, wie Perotinus, iTram, Darius, Chrizzly92, Rolf und Pedro. Oder man verändert einfach die Texturgröße an verschiedenen Bussen, indem man eine Spiegeltextur in der seitlichen Ausdehnung verdoppelt. Also statt 1024x1024 vergrößert man die Textur auf 2048x1024. Damit ändert sich auch das Bild auf einem gestauchten Spiegel.


    Ich hatte mich mal vor längerer Zeit mit den Spiegelthema beschäftigt um eine Lösung des "Problems" beim Add-On X 10 zu finden. Mehrere Tage arbeit, obwohl die Lösung ganz einfach war. Ist aber ein anderes Thema



    Gruß Tatra

    Einmal editiert, zuletzt von Tatra ()


  • Das selbe Prinzip verwendet Omsi bei den Fahrkarten, dem Geld und bei den Texturen. Es werden jeweils nur die Pixel-Koordinaten in der o3d gespeichert. Genauso wie beim Font wird also nur der gemappte Bereich genutzt, der beim Font und beim Geld in einer Textdatei definiert ist.


    Der Unterschied ist hier: Bei den Fonts kopiert OMSI aus der Bitmap mit den ganzen Buchstaben im Fonts-Ordner Ausschnitte heraus und fügt sie zu einer internen Textur (Texttextur) zusammen, die dann den darzustellenden Text zeigt. Die Bitmap aus dem Fonts-Ordner wird also nicht gerendert, sie landet nicht im Grafikspeicher. Bei den Fahrkarten gehe ich eigentlich davon aus, dass einfach nur ein Ausschnitt der Textur auf die Fläche gemappt wurde, wie bei anderen Objekten auch. Es wird also die Textur direkt zum Rendern verwendet.


    Wieso fragst du eigentlich, wenn du die Antwort selber kennst?


    Ich war mir nicht sicher, ob ich dich richtig verstanden hatte.


    Ich bin davon ausgegangen, dass es quadratische Texturen sein müßen, weil in sehr vielen Bussen quadratische Texturen enthalten sind, auch wenn nichtmal die Hälfte der Texturfläche genutzt wurde. Außerdem wurde im Forum mehrfach geschrieben das Texturen immer die selbe Kantenlänge haben sollte.


    Ja, das wird tatsächlich oft geschrieben, weil viele den Unterschied zwischen Zweierpotenz und quadratisch nicht verstanden haben. Und dann setzen sie es auch in den Fahrzeugen entsprechend um, leider.


    Schau dir mal eine X-Datei genau an.


    Ich habe mir einige angesehen und bei den MeshTextureCoords stehen immer Werte zwischen 0 und 1, was eher für eine prozentuale Angabe spricht?

  • Ich habe mir einige angesehen und bei den MeshTextureCoords stehen immer Werte zwischen 0 und 1, was eher für eine prozentuale Angabe spricht?


    Die Angaben könnten in Prozent sein. Man kann jedes Objekt auf den Pixel genau mappen. Die Angabe in der X-Datei bezieht sich dann auf die Koordinaten aus der Breite und Höhe. Beispiele dafür findest du in Omsi öfter, wo der Mindestwert Null ist und der Höchstwert 1, aber alles dazwischen kann auch abgefragt werden.
    ein Beispiel wäre die Abfrage der Türstellung, ob ich einen Punkt abfrage der bei 0.2 liegt (20%) oder bei 0.6182349 (also 61,82349%) liegt. Gibt aber noch sehr viele Beispiele mehr.


    Diese Angabe findet sich für jeden Vertices bis auf die 7. Stelle genau (0.1234567). Nur die Werte der Position sind in Metern angegeben. Somit ist die Abfrage des Mappings auf den Pixel genau eingetragen. Verziehe ich eine kleine Textur auf eine ungerade Zahl fällt der Fehler auf.
    Ich nehme eine kleine Textur von 8x8 Pixel ddie ich Schwarz und weiß mappe. Die Mappe ich auf ein großes Objekt. anschließend ziehe ich die Textur groß auf 21x21 Pixel, wobei nur rechts und unten ein dünner schwarzer Streifen sichtbar wird. Bei 22x22 Pixel sind die Streifen wieder weg.