Zusätzliche Funktionen Spiegeln an Wasseroberflächen

Hier werden Wünsche für zukünftige neue Funktionen der Software gesammelt.
Antworten
Nachricht
Autor
MBT Kuhl
Beiträge: 775
Registriert: 27.01.2015 22:16:44
Aktuelle Projekte: Wilhelmsburg, Eurodual, Restarbeiten an Fahrzeugen
Wohnort: Teletubbieland

Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#1 Beitrag von MBT Kuhl »

Hallo,

testweise habe ich in einem Modul versucht, die Landschaft an einem Gewässer zu spiegeln. Zur Theorie hatte ich beim Treffen in Braunschweig einen Vortrag gehalten. Dazu habe ich im Bereich zum Treffen ein Video verlinkt. Dieses möchte ich unter Verschluss halten. Wer nicht beim Treffen angemeldet war, kann mir gerne schreiben. Dann gibt es den Link.

Ich habe das Problem, dass ich bei enorm vielen Objekten alle LOD-Stufen an der xy-Ebene spiegeln muss. Das sind schon bei einer kleinen Testkachel rund 40 Gewächse, also nicht händisch möglich. Ich suche daher eine Möglichkeit, verzeichnisweit alle LODx.ls3 einzeln an der xy-Ebene zu spiegeln, allerdings mit Beibehaltung der Normalenvektoren und dunkleren Helligkeitswerten. Mein erster Gedanke war, dies über die Verwaltung zu machen.

Damit Ihr besser wisst, was ich meine, hier in etwa der Workflow:

Ich notiere in einem Modul alle Kacheln, in denen sich Objekte oder Dreiecke befinden, die sich im Wasser spiegeln würden. Diese exportiere ich. Damit habe ich alle Objekte, die sich potentiell im Wasser spiegeln können, in einem Verzeichnis.

Die Kacheln speichere ich zweimal unter neuem Namen in meinem Bauverzeichnis ab. Die Namenserweiterungen sind "_g_T" für Terrain und "_g_O" für Objekte. Ich bekomme es mit den Bordmitteln von Zusi und mit Notepad hin, dass ich die Kacheln spiegle und hinterher die Normalenvektoren zurück biege. Die Positionen der verknüpften Objekte innerhalb der Kacheln bekomme ich ebenfalls an der Wasserebene gespiegelt. Nur die vielen Einzelobjekte kann ich nicht sinnvoll spiegeln und mit korrekten Normalenvektoren versehen. Schon ein einzelnes Auswählen ist zu viel Arbeit. Es geht praktisch nur über eine serienmäßige Bearbeitung.

Um den Vorschlag etwas konkreter zu formulieren: Ich wünsche mir ein Feld in er Verwaltung "Verzeichnisweit Objekte an xy-Ebene spiegeln", dann wird das Exportverzeichnis ausgewählt, danach die dunklere Helligkeit. Die Erweiterungen wären dann "_g_85" bei allen .LOD.ls3 und .LODx.ls3, sofern man die Helligkeit auf 85 % setzt. Theoretisch ist das kein großer Akt.

Anschließend würde ich aus den gespiegelten Kacheln alle im Wasser nicht sichtbaren Objekte und Dreiecke löschen. Die gespiegelten "_g_T" und "_g_O" würde ich in den originalen Kacheln verknüpfen. Hinzu kämen eventuelle Objekte mit halbdurchsichtiger Wassertextur.

Zu diesem Vorschlag hätte ich gerne ein paar Rückmeldungen.

Liebe Grüße
Moritz
Ich arbeite gern für meinen Konzern. Initiative für mehr Arbeit

MBT Kuhl
Beiträge: 775
Registriert: 27.01.2015 22:16:44
Aktuelle Projekte: Wilhelmsburg, Eurodual, Restarbeiten an Fahrzeugen
Wohnort: Teletubbieland

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#2 Beitrag von MBT Kuhl »

Moin,

Damit Ihr Euch das besser vorstellen könnt, habe ich eine Kachel (ratet mal welche) bearbeitet. Es waren rund vier Stunden Landschaft spiegeln, verschieben, kopieren, umbenennen und es waren einige Tricks erforderlich. Das ist das Ergebnis.
BildBildBildBild

Die Kachel war noch klein und es waren nur wenige weitgehend primitive Objekte. Die Signale habe ich bewusst nicht gespiegelt. Das war auch nicht mein Ansinnen.

Grüße
Moritz
Ich arbeite gern für meinen Konzern. Initiative für mehr Arbeit

HaraldB
Beiträge: 49
Registriert: 01.10.2020 22:10:15

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#3 Beitrag von HaraldB »

Sieht auf jeden Fall Klasse aus und ist definitiv lohnenswert.

War leider nicht beim Vortrag, wo die folgende, naheliegende Frage möglw schon durchdiskutiert wurde: Ließe sich das (im Sim auf einem separaten Thread mit niedriger Priorität, im 3D-Editor oder einem separaten Tool) automatisieren? Obwohl zumindest mein Mathematik-Verständnis da bestimmt überfordert wäre..

Das mit der Spiegelung von Fahrzeugen und Signalen ist ja eine fette Fußangel ... das ginge sowieso nur im Sim.

Benutzeravatar
Leonard K.
Beiträge: 1059
Registriert: 12.06.2020 19:03:07
Aktuelle Projekte: NMH

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#4 Beitrag von Leonard K. »

Besonders das 3. bzw. 4. Bild mit der halbtransparenten Wassertextur sieht gut aus. Das Ziel müsste ja sein, dass die Spiegelungen vom Simulator beim Laden ausgeführt werden?

MBT Kuhl hat geschrieben: 30.11.2023 12:43:00 ratet mal welche
Keine Ahnung, wo das sein soll :P

MBT Kuhl
Beiträge: 775
Registriert: 27.01.2015 22:16:44
Aktuelle Projekte: Wilhelmsburg, Eurodual, Restarbeiten an Fahrzeugen
Wohnort: Teletubbieland

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#5 Beitrag von MBT Kuhl »

Hallo Harald,

Die Landschaft wird nur einmal beim Streckenbau teilweise händisch und hoffentlich bald überwiegend maschinell über ein Skript oder eine Funktion erzeugt. Signale sind nicht ortsveränderlich. Das geht auch so noch, wenn man das komplette Signal inklusive Animation gespiegelt nachbaut.

Die 285 habe ich nur in die Landschaft stehend eingebaut. Ohne erheblichen Eingriff ins Programm geht das nicht. Ich möchte auch nicht unbedingt, dass so viel geändert wird. Etwas mehr Wirkung und Leben reichen schon.

@ Leonard: Du bist natürlich außenvor, als ursprünglicher Ersteller des Moduls.

Für die Dunkelheit habe ich schon ein paar Laternen an der Mosel geknipst. Da lassen sich gute Effekte im Zusammenspiel mit dem Wasser erzielen.

Es fehlen noch Skyboxen, bei denen der Himmel am Horizont etwas dunkler gespiegelt ist.

Grüße
Ich arbeite gern für meinen Konzern. Initiative für mehr Arbeit

Benutzeravatar
Christian Gründler
Beiträge: 2210
Registriert: 04.10.2003 13:27:48
Wohnort: Brühl (Baden)

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#6 Beitrag von Christian Gründler »

MBT Kuhl hat geschrieben: 29.11.2023 21:59:18 Ich notiere in einem Modul alle Kacheln, in denen sich Objekte oder Dreiecke befinden, die sich im Wasser spiegeln würden. Diese exportiere ich. Damit habe ich alle Objekte, die sich potentiell im Wasser spiegeln können, in einem Verzeichnis.
Hallo Moritz,

was passiert bei diesem Export, wenn z.B. ein Baum mehrfach vorhanden ist? Wenn es danach mehrere (vielleicht viele) Dateien mit gleichem Inhalt gäbe, wäre das schlecht. Ich würde an der Quelle ansetzen und z.B. unter Terrain/General/Trees/Pine einen Ordner Gespiegelt anlegen: in diesen Ordner gehören mit den gleichen Namen die Dateien des Hauptordners mit gespiegeltem Inhalt. Das ist das im Prinzip das gleiche Verfahren, wie wir es bei den Bahnsteiglaternen angewandt haben (Ordner Leuchteffekt).

Dann muss in der Kachel für jedes "normale" Objekt nur noch ein gepiegeltes in der entsprechenden Höhe (bzw. Tiefe unter dem Wasser) eingebaut werden; der Export der Objekte entfällt. Beim Spiegeln der Lodstufen der Objekte kommt der gleiche Algorithmus zum Einsatz wie beim Spiegeln der Kachenllandschaft, ist also im Texteditor beherrschbar.

Du schreibst von Notepad. Hast Du die Änderungen "zu Fuß" gemacht? Dann kann man das auch programmieren.

Viele Grüße

Christian

HaraldB
Beiträge: 49
Registriert: 01.10.2020 22:10:15

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#7 Beitrag von HaraldB »

Die umfangreich diskutierten Ansätze in anderen Engines (Unity, Unreal) kaprizieren sich, meiner kurzen Recherche nach, eher auf die Nachbearbeitung der Reflektion durch Wasser- und Linseneffekte, vor allem die Wellenbewegung oder Spiegelung von Objekten hinter der Kamera oder im anderweitig unsichtbaren Bereich.
Für Zusi ist das Overkill. Denke ich.

Wenn ich nicht total daneben liege, ist die Reflektion eine zusätzliche Kameraperspektive mit dynamischen aber bekannten Koordinaten und daher wohl am besten vom Sim zu leisten, denn das gibt es doch bereits als zusätzliche Lok-Blickpunkte und die darzustellenden Objekte sind ja schon geladen. Neu wäre, dass ein solcher zusätzlicher Blick "durch" das jeweilige Gewässer maskiert, semi-transparent verfälscht und "an der Wasserfläche" (Ebene) gespiegelt werden müsste.

Manuell oder automatisch gespiegelte Objekte zu erzeugen, zu verwalten und zu positionieren, inkl. Signallogik, wird, neben dem Autorenaufwand, immer zu noch mehr Last auf dem System führen. Fahrzeuge so zu spiegeln wird (semi-)statisch wahrscheinlich nicht sinnvoll machbar sein.

Auf gleiche Weise wie den zusätzlichen Lok-Blick sollten sich auch Spiegelungen in getönten Glasfenstern erzeugen lassen.

Und da der Ansatz ohne zusätzliche Objekte auskommt, wäre der Effekt im Sim jederzeit an- und abschaltbar,.

Benutzeravatar
Achim Adams
Beiträge: 1239
Registriert: 05.06.2004 23:06:03

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#8 Beitrag von Achim Adams »

Für mich erscheint die Spiegelung zu perfekt. Das funktioniert nur bei absolut glatten Wasser, was in der Realität so gut wie nie erreichbar ist. Durch Wellenbildung etc. wird die Spiegelung zwangsläufig verzerrt.
Als experimentellen Ansatz finde ich das hingegen sehr interessant.

MBT Kuhl
Beiträge: 775
Registriert: 27.01.2015 22:16:44
Aktuelle Projekte: Wilhelmsburg, Eurodual, Restarbeiten an Fahrzeugen
Wohnort: Teletubbieland

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#9 Beitrag von MBT Kuhl »

Hallo,

In Notepad setze ich die Normalenvektoren um. Der Vorgang läuft aktuell wie folgt ab:

1 Kacheln mit zu spiegelnder Landschaft ins eigene Verzeichnis kopieren
2 Kacheln neu abspeichern mit Erweiterung "_g"
3 Kachel_g zweimal kopieren als _g_Objekte und _g_Terrain
4 Dort alles nicht benötigte raus löschen
5 _g_Terrain mit Bordmitteln an xy Ebene spiegeln, alle Objekte entfernen und nach ls3 schreiben, alle Z-Werte müssen größer 1 sein
6 _g_Objekte so hoch schieben, dass alle z-Koordinaten als führende Stelle eine 7 oder höher haben (2π = 6,28...)
7 _g_Terrain in Notepad öffnen und Ersetzen Z="-1" durch Z="1", Z="-0. durch Z="0. und die Helligkeit reduzieren (FF auf D9). Eventuell muss man einen Zeischenschritt gehen, wenn es in der Spiegelung Normalenvektoren gibt, die in die andere Richtung zeigen. Damit ist die _g_Terrain fertig.
8 _g_Objekte in Notepad öffnen, alle Meshes löschen, Ersetzen Z="7" durch Z="-7" und eventuell auch die 8 und 9.
9 _g_Objekte exportieren in einen Exportordner schreiben lassen.
10 Im Exportordner alle .lod und .lodx spiegeln mit dem Editor, eventuell wieder Versatz nach Oben oder Unten zwecks ändern der Normalen in Notepad, dann nach ls3 schreiben.
11 Alle .lsb löschen im Exportordner und die .lod(x).ls3 mot Erweiterung _g_85 abspeichern
12 In allen _g_85 die Normalen spiegeln, Helligkeit ändern, Pfade ändern
13 Im Editor die Höhen korrigieren
14 Exportordner mit der Verwaltung alles nach lsb konvertieren
15 Exportordner ins eigene Bauverzeichnis kopieren
16 _g_Objekte alle Pfade ändern
17 _g_Terrain und _g_Objekte von der Höhe korrigieren. Die Werte dafür sind die Höhen des Wassers (entweder am Beginn und Ende der Kachel oder ohne Gefälle bei stehenden Gewässern doppelt) in der Kachel und die Versatzwerte (nur einfach).
17 in der Kachel die _g_Terrain und _g_Objekte einfügen
18 aus der Kachel das Wasser in ein extra Objekt ziehen und dieses halbtransparent machen.

Es wäre alles programmierbar, aber da stecke ich nicht drin. Bei vielen Objekten mache ich die Korrekturen doppelt, weil etwas nicht so hinhaut, oder ich mache es bei einfachen Objekten direkt selbst.

Grüße
Moritz
Ich arbeite gern für meinen Konzern. Initiative für mehr Arbeit

Benutzeravatar
Christian Gründler
Beiträge: 2210
Registriert: 04.10.2003 13:27:48
Wohnort: Brühl (Baden)

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#10 Beitrag von Christian Gründler »

MBT Kuhl hat geschrieben: 02.12.2023 07:30:28 Es wäre alles programmierbar, aber da stecke ich nicht drin.
Hallo Moritz,

ich werde mal versuchen, eine komplette Kachellandschaft einschlließlich der verknüpften Objekte programmiert zu spiegeln. Mit Ergebnissen ist aber erst in ca. 10 Tagen zu rechnen. Verwenden werde ich vsl. Python, das läuft auch unter Windows.

M.f.G. Christian

lipkegu
Beiträge: 116
Registriert: 14.12.2022 23:09:43
Wohnort: Berlin Lichtenberg
Kontaktdaten:

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#11 Beitrag von lipkegu »

Und warum macht man das nicht per grafik Shader? ^^" solch Spiegeleffekt ist mit opengl schnell gemacht. Shader basierte reflektion ermöglicht es in Richtung der Eye-position zu reflektieren. Inklusive Beleuchtung.
Zusi 3 (Steam & Stick)

Benutzeravatar
F. Schn.
Beiträge: 6686
Registriert: 24.10.2011 18:58:26

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#12 Beitrag von F. Schn. »

Nein. Ist nicht schnell gemacht, wenn das die Engine noch nichts in diese Richtung hat, unabhängig von OpenGL oder DirectX. Und Zusi hat übrigens selbstverständlich letzteres, wie es auch üblich ist und war, wenn man keine vorgefertigte Engine nutzt.

Alles in allem sind das halt Spielereien, um mit den vorhandenen Mitteln ein leicht besseres Ergebnis zu erzielen. Ein Perfektes Ergebnis wird man da ohne massiven Engine-Support nie erreichen.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33436
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#13 Beitrag von Carsten Hölscher »

Also die Idee ist schon originell muss ich sagen. Als Standardbauempfehlung würde ich es aber glaub ich nicht sehen.
Der Polygonbedarf steigt erheblich und dann hat man noch das Problem der Himmeldarstellung und der nicht darstellbaren bewegten Objekten.

Eine saubere Lösung wär halt eine Grafikfunktion, die eine echte Spiegelung berechnet. Sowas kostet aber auch ordentlich Performance und ist programmiermäßig nicht ganz trivial.

Carsten

lipkegu
Beiträge: 116
Registriert: 14.12.2022 23:09:43
Wohnort: Berlin Lichtenberg
Kontaktdaten:

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#14 Beitrag von lipkegu »

Sowas kostet aber auch ordentlich Performance und ist programmiermäßig nicht ganz trivial.
Man könnte ja Spiegelung als Grafikoption hinzufügen. So dass man diese auch auschalten kann, und bei leistungsstarken Systemen zuschalten kann.
Carsten es ist wenn Du DirectX nutzt, nur etwas HLSL Code. welchen du in die Render Pass einfügen musst.
Zusi 3 (Steam & Stick)

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33436
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#15 Beitrag von Carsten Hölscher »

Magst du mal grob umreissen wie die Transformationspipeline dafür aussieht, sie dass sie sich ganz einfach in das normale Gefüge einpasst?

Carsten

MBT Kuhl
Beiträge: 775
Registriert: 27.01.2015 22:16:44
Aktuelle Projekte: Wilhelmsburg, Eurodual, Restarbeiten an Fahrzeugen
Wohnort: Teletubbieland

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#16 Beitrag von MBT Kuhl »

Moin.

Kurze Zwischenfrage: Ist mein Testpaket in der Verwaltung sichtbar und hat es schon einer angeschaut? Ich überlege, wie ich die Wasseroberfläche etwas realistischer gestalten kann.

Bisher ist der Rechenaufwand in dem einen Modul ziemlich überschaubar. 5 Kacheln (ein Modul hat normal deutlich über 40) sind bearbeitet und darin sind nur die relevanten Subsets doppelt. Der Mehraufwand an Subsets liegt damit im Testmodul bei unter 10 Prozent und ließe sich noch verringern, wenn man noch mehr Dreiecke raus löscht, die nicht benötigt werden.

Mit Christian Gründler habe ich zu dem Thema automatisiertes Spiegeln privat geschrieben. Mir wäre eine Funktion in Zusi dazu deutlich lieber als ein separates Programm. Mathematisch ist beides das gleiche. Die Auswahl des zu Spiegelnden ist im Editor leichter als mit Dateilisten. Dazu kommt, dass Zusi meines Wissens keine Funktion hat, komplette Landschaften in xml bzw. ls3 statt lsb zu schreiben.

Meine Versuche sehe ich bisher nur als Test an, aber ich könnte mir vorstellen, das eine oder andere Modul umzubauen, mit welchem Werkzeug auch immer. Der Effekt hat mich überzeugt, es fehlt nur etwas der letzte Schliff.

Zuletzt hatte ich im Baugleis etwas mehr Standzeiten, die ich wunderbar nutzen konnte. Am Sonntag bin ich eine Überführung gefahren, wo ich in besagtem Testmodul durchgefahren bin. Die Ähnlichkeit ist beeindruckend. Je nach Einsätzen kann ich die nächste Zeit hoffentlich ein paar mehr Vorhaben abschließen.

Liebe Grüße
Moritz
Ich arbeite gern für meinen Konzern. Initiative für mehr Arbeit

lipkegu
Beiträge: 116
Registriert: 14.12.2022 23:09:43
Wohnort: Berlin Lichtenberg
Kontaktdaten:

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#17 Beitrag von lipkegu »

Es gab mal ein Tutorial in OpenGL 3.3+ für Wasser (reflection and refraction) https://www.youtube.com/watch?v=HusvGeE ... qhnalNTNZh
Zusi 3 (Steam & Stick)

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33436
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Zusätzliche Funktionen Spiegeln an Wasseroberflächen

#18 Beitrag von Carsten Hölscher »

Du schreibst, es ist "nur etwas HLSL Code. welchen du in die Render Pass einfügen musst." und verlinkst dann ein Video, was genau das Gegenteil sagt? Ich hatte schon gehofft, es gäbe tatsächlich eine einfache Lösung, die ich nicht kannte.

Carsten

Antworten