|
-
Fragen zum Original Zengine Renderer / Spacer / Lichter / Shading
Hallo,
ich arbeite aktuell an ZenRen, einem kleinen DX11 Zen Viewer, der Gothic Welten 1:1 mit der originalen Beleuchtung darstellen können soll (Hinweis: es handelt sich nicht um einen spielbaren Renderer!).
Gothic hat scheinbar ein zwar simples aber wirkungsvolles System für statisches Licht (baked light), um mehr Beleuchtungskonstrast in der Welt zu haben ohne eine aufwändige Global Illumination. Was ich mittlerweile rausgefunden habe:
Es gibt scheinbar mindestens 3 potentielle Quellen für statsches Licht:
- Lightmaps: Ganz normale 2D Lightmap-Texturen, die der Spacer sowohl für Indoor-Level als als auch Teile (Gebäude-Räume) von Outdoor-Levels berechnet und in der ZEN speichert.
- Per-Vertex-Light: Ein Farb-Wert, der für jede Ecke von jedem Dreieck (Vertex) der Indoor- und Outdoor-Level in der ZEN gespeichert wird.
- Lichter: Lichter, welche in der ZEN gespeichert sind
Meine konkreten Fragen drehen sich nun darum, wie und wann diese Datenquellen zur Laufzeit genutzt werden für die Beleuchtung der statischen Objekte (Welt, VOBs).
Frage 1)
Werden die Lightmaps überhaupt zur Laufzeit genutzt?
Für mich sieht es so aus, als ob die Per-Vertex-Lights bereits das aus den Lightmaps gesamplete Ergebnis darstellen.
Indoor
Eine von mehreren Lightmaps (2D)
[Bild: Annotation_2024_04_08_170140.jpg]
Per-Pixel Sampling dieser Lightmaps auf der GPU
[Bild: igmd9LH1Ucf02simage.png]
Per-Vertex-Farbinformationen direkt aus dem ZEN-Weltmesh (interpoliert auf GPU):
[Bild: image2.png]
Wie man sieht, ähneln die Per-Vertex-Informationen stark dem, was man bekommt, wenn man die Lightmap selber rendert. Es ist also zu vermuten, dass der Spacer die Per-Vertex-Werte softwareseitig aus den Lightmaps sampled und man die Lightmaps in diesem Fall nicht mehr selber samplen muss.
Man nimmt hier also einfach die Per-Vertex-Farbwerte. Soweit so gut.
Outdoor
Bei Outdoor Levels ist das aber komplizierter. Dort haben nur die Gebäude-Innenräume Lightmaps, und nur alles andere hat Per-Vertex-Farben! Man hat also entweder Lightmaps oder Per-Vertex-Farben.
Eine von mehreren Lightmaps (2D)
[Bild: Annotation_2024_04_08_171438.jpg]
Per-Pixel Sampling dieser Lightmaps auf der GPU
[Bild: Annotation_2024_04_08_171630.jpg]
Per-Vertex-Farbinformationen direkt aus dem ZEN-Weltmesh (interpoliert auf GPU):
[Bild: Annotation_2024_04_08_171650.jpg]
Wie man auf dem letzten Bild sehen kann, sind alle Innenräume einfach grau, da scheinbar keine Per-Vertex-Farben für Innenräume vorhanden sind, obwohl 2D-Lightmaps für diese Räume existieren. Außerhalb der Räume gibt es Per-Vertex-Farben, die wahrscheinlich die Sonnenlichtstärke darstellen sollen und nur grayscale sind.
Warum gibt es für Outdoort-Innenräume Lightmaps, aber keine daraus generierten Per-Vertex-Farben? Ignoriert Gothic diese Outdoor-Outdoor-Lightmaps (nur die Per-Vertex-Farben und evtl. Lichter werden benutzt)?
Frage 2)
Sollte ich die Lichter ignorieren, wenn ich bereits Per-Vertex-Farben habe? Vlt. sind die Lichter im Spacer ja bereits in die Lightmaps/Per-Vertex-Farben eingeflossen und es wäre falsch, sie dann qausi doppelt auf die statische Geometrie zu applizieren.
Falls ihr sonst irgendwelche Anmerkungen zum Shading von Gothic habt, gern her damit.
-
Portallreume haben die statische lightmap, damit es da nicht absolut dunkel drin ist.Was bei Höhlen eigendlich ganz gut aussieht
dencke ich.Die Räume haben immer Portallraumpolygone am Eingang. Die wiederum den Raum bei einer bestimmten distanz ausblenden.
Im Originahl beleuchten leider alle dynamischen lichtvobs auch die Ausenwelt.
Wenn ich dir nicht helfen konnte , vergiß was ich geschrieben habe.
-
Bist du dir denn sicher, dass es spezifisch die 2D Lightmaps sind, die Portalräume beleuchten? Es könnte ja auch einfach ein statischer Helligkeitswert sein, der dann wie im Rest der Welt mit der Tageszeit-Helligkeit verrechnet wird.
-
Ok, ich habe mal im Original Gothic fast alle Texturen weiß gemacht und mir das Shading angeschaut (Schmiede altes Lager):
Original:
[Bild: Annotation_2024_04_10_094240.jpg]
ZenRen 2D Lightmap:
[Bild: Annotation_2024_04_10_094557.jpg]
Original:
[Bild: Annotation_2024_04_10_094308.jpg]
ZenRen 2D Lightmap:
[Bild: Annotation_2024_04_10_094629.jpg]
Das passt im Grunde 1:1, nur dass im Original mehr Kontrast und Saturation zu sehen ist (evtl. auch Tageszeit-Einfluss). Sehr interessant, denn das sieht fast so aus, als ob die Lightmap per-pixel gesamplet wird, das muss ich mal mit mit Per-Vertex-Sampling in ZenRen vergleichen.
Auch interessant dass Mobs sehr komisch (gelblich) geshadet werden.
Geändert von Kellendil (10.04.2024 um 09:57 Uhr)
-
Ich glaube langsam, das Gothic die Lightmaps tatsächlich auf der GPU Per-Pixel rendert. Die VOBs werden entweder direkt von den statischen Lichtern oder von ihren Ground faces beleuchtet.
Statische Lichter beleuchten VOBs direkt (ZenRen):
[Bild: image3.png]
[Bild: image4.png]
-
Ich gebe den Link hier mal an zwei Entwickler von "Gothic VR" weiter, ich glaube die sind da recht firm was Deine Fragen angeht.
Aktueller Zustand: Bin zuhause, viel am schlafen aber sonst geht es. (PMs hole ich dieses Wochende nach)
Pflegestufe 3 ist DURCH !!!, Behinderten Prozente 100% mit Begleitung Bearbeitung, physisch und psychologisch arg angeschlagen.
[Bild: 47439305ao.png]
-
Danke!
-
Hat die Vob Eigenschaft static von einen Einfluss auf die Beleuchtung?
-
Rookie
Hi, Thomas hier, ich helfe beim Gothic VR Team für die Beleuchtung. Sieht eigentlich ganz danach aus dass du deine eigene Fragen schon beantwortet hast! Dass einzige was ich noch sagen könnte zum Thema Kontrast/Saturation ist mal gucken ob du Gammakorrektur auf den Lightmaps bringst (kannste im shader auch mal probieren mit pow(lightmap, 2.2) oder pow(lightmap, 1/2.2)), dass sieht für mich nach so'n typischen Fall aus.
Du weisst schon mehr als wir wissen, wir haben noch nicht herausgefunden wie man die Lightmaps samplet. Die Meshes haben diesen Lightmap Origin und Lightmap UpRight, statt einfach ein UV-Koordinat. Kannst du erleuchtern wie man die richtig samplet? Danke!
-
@Milky-Way
Ja. Ich glaube dass dynamische VOBs ihre statische Beleuchtungsfarbe nur vom Boden (ein Polygon des Weltmeshes was sich unter dem VOB befindet) nehmen, statische VOBs können ihre Beleuchtung hingegen auch direkt aus den statischen Lichtern, die im Portalraum verteil sind, nehmen.
Das kann vor allem dann viel ausmachen denke ich, wenn die VOBs nicht auf dem Boden stehen, also z.B. bei Kerzenleuchtern, Bildern, Wandteppichen etc. Alles was eher weiter weg ist vom Boden.
Außerhalb von Portalräumen in Outdoor-Leveln dürfte es hingegen keinen Unterschied machen.
@thmsvdberg
Ja, ich muss die Lightmaps als sRGB einlesen, dann sieht es genau aus wie im Original, danke^^
Das samplen der Lightmaps hatte ich in einem älteren Commit rausgeschmissen, aber ich werde es bald wieder mit rein nehmen. In diesem Commit ist es noch drin:
https://github.com/Katharsas/ZenRen/...520e03b525f662
Die Per-Vertex-UVs für die Lightmaps werden aus den Lightmap Origin und Lightmap UpRight Vektoren hier berechnet:
https://github.com/Katharsas/ZenRen/...oader.cpp#L122
Und eine UV-Koordinate kann man dann hiermit software-samplen (der Code war aber schon eine Zeit lang unbenutzt):
https://github.com/Katharsas/ZenRen/...Loader.cpp#L66
Hinweis zu unscale: Mein Worldspace ist um Faktor 100 kleiner als in Gothic, daher muss ich viel Kram skalieren.
Geändert von Kellendil (11.04.2024 um 08:36 Uhr)
-
Rookie
Zitat von Kellendil
@thmsvdberg
Ja, ich muss die Lightmaps als sRGB einlesen, dann sieht es genau aus wie im Original, danke^^
Aha, super!
Zitat von Kellendil
Klasse, vielen Dank! Das hätte ich nie selber gefunden.
-
Mit SRGB und etwas Mipmap-Bias komme ich dem Original schon ziemlich nahe (die VOBs sind nocht nicht korrekt):
[Bild: image5.png]
Allerdings hat das Original irgendwie mehr "Smoothing" (vlt. upsale & blur?).
Evtl. werden die statischen Lichter aber auch in Echtzeit gerendert? Das würde die sehr saubere Darstellung im Original auch erklären.
Hier mal Yberions Tempel:
[Bild: Annotation_2024_04_11_113907.jpg]
Geändert von Kellendil (11.04.2024 um 11:47 Uhr)
-
Habe auch mal statische Licht-Richtung für Vobs implementiert, dadurch bekommen die VOBs nochmal ordentlich Kontrast (und aktuelle Version als 0.6 released):
[Bild: Annotation_2024_04_21_205945.jpg]
[Bild: Annotation_2024_04_21_205552.jpg]
-
Kleiner Bewegt-Eindruck:
[Video]
-
Das sieht schon nice aus
Bin gespannt wohin das Projekt noch geht ^^
-
Danke : )
Jetzt auch mit Tag-Nacht-Beleuchtung, aber noch ohne richtigem Himmel:
[Video]
-
Und jetzt gibts auch einen animierten Himmel (aber noch ohne Sonne/Mond/Sternschnuppen/Regen) : )
[Video]
-
Und auch in G2 sowie in größeren Mod-VDFs funktioniert soweit alles:
[Bild: image_g2.png]
[Bild: signal_2024_09_07_203003_002.jpeg]
Ich habe mittlerweile auch Mobs zum Laden gebracht, allerdings behandle ich derzeit alle Vobs/Mobs noch als statische Objekte, weswegen es da Beleuchtungsunterschiede gibt.
Ich habe außerdem einige Änderungen vorgenommen (Unterteilung der Welt in Grid Chunks) um Camera Frustum Culling implementieren zu können, was so ein Grund-Feature ist wenn man auch in großen Welten gute Performance haben will.
Zusammen mit der justierbaren Draw Distance bleibe ich so immer stabil über 200 FPS (WQHD, 4xMSAA, GTX 1070), strebe da aber auch immernoch nach einer deutlich besseren Performance.
Wer den aktuellen Stand ausprobieren will: https://github.com/Katharsas/ZenRen/releases
Frage:
Ich habe jetzt erstmal mein selbst implementiertes Sonnenlicht deaktiviert, weshalb die Beleuchtung aktuell etwas sehr "schattig" ist, und werde hier dann später nochmal ran, um die Beleuchtung des Originals möglichst genau nachzustellen.
Weiß jemand ob die ZenGine Sonnenlicht mittels einer dynamischen Lichtquelle (Directional Light) simuliert, die vlt. sogar über den Himmel wandert? Oder hat der Sonnenstand wirklich gar keinen Einfluss auch die Beleuchtung (abgesehen mal vom tageszeitabhängigen Color Gradings)?
-
Rookie
Zitat von Kellendil
Frage:
Ich habe jetzt erstmal mein selbst implementiertes Sonnenlicht deaktiviert, weshalb die Beleuchtung aktuell etwas sehr "schattig" ist, und werde hier dann später nochmal ran, um die Beleuchtung des Originals möglichst genau nachzustellen.
Weiß jemand ob die ZenGine Sonnenlicht mittels einer dynamischen Lichtquelle (Directional Light) simuliert, die vlt. sogar über den Himmel wandert? Oder hat der Sonnenstand wirklich gar keinen Einfluss auch die Beleuchtung (abgesehen mal vom tageszeitabhängigen Color Gradings)?
Topp Arbeit! Ich habe selber in G1 mal ein ganzen Tag-Nacht Zyklus angeschaut, und die Richtung des Sonnenlichts ändert sich nicht. Es gibt mehrere Himmelfarben mit die dazu hörende Sonnenlichtfarbe. Ich glaube, die genaue Farben sind hard-coded im Source code.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|