Einzelnen Beitrag anzeigen

Zudomon

Registriert seit: 14. Feb 2007
84 Beiträge
 
Turbo Delphi für Win32
 
#134

AW: Eigenes 3D MMORPG mit Delphi möglich?

  Alt 8. Apr 2015, 19:58
Ich mache das, weil es extrem viele Vorteile hat, wenn man erstmal die Hürde genommen hat, es zu implementieren.

Vielleicht kennt der ein oder andere das Megatexturing-Verfahren von Id. Da gehen die auch den Weg, dass alles in der Welt seine eigene Textur hat. So können die Künstler alles individuell gestalten und Schatten und indirektes Licht können dann in die Textur mit gebaked werden. Das ist zwar dann statisch, aber die Performance ist astronomisch, da die Shader nur noch recht simpel ausfallen. Überhaupt wird dadurch ein Teil der Pipepline recht einfach.
Das Problem ist eben, dass es statisch ist und auch astronomisch viel Speicher kostet. Vor allem auch für Bereiche, die sich der Spieler wahrscheinlich nie richtig anschaut.

Da ich meine Texturen zur Laufzeit erstelle, kosten das ganze auf Platte eigentlich keinen extra Speicher. Allerdings wird der Verwaltungsaufwand um einiges höher.

Aber nun mal zu den Vorteilen:

1. Kann ich nun hoch aufgelöste Texturen nutzen, ohne dass ich zusehen muss, die irgendwo von einem Foto her zu bekommen. Bei einem Foto hat man das große Problem, dass da schon Schattierungen drin sind, die man idealerweise durch die Engine erst drin haben möchte. Wenn z.B. schon Schatten abgebildet sind, wäre die Textur doppelt schattiert. Genauso mit indirektem Licht.

2. Brauch ich nicht mehr aufwendig Höhenkarten und Normalmaps zu erzeugen. Dies ist ein extrem aufwendiger Prozess, der Designer entsprechend Vollzeit arbeiten lässt. Manchmal ist es auch extrem schwer, solche Höhenkarten exakt anzufertigen. Dann nämlich, wenn man nicht mehr einfach durch globale Filter, die man auf das Bild anwendet, eine vernünftige Höhenkarte bekommt.

3. Kann die Textur verändert werden und das zur Laufzeit. Neben wegfallen der Auflösung sind damit extrem krasse spezialeffekte Möglich... z.B. könnte man das Moos über die Steine "wachsen" lassen.

4. Keine Texturbegrenzung mehr! Das "sich nicht widerholende" scheint erstmal nichts besonderes sein, aber es ist eines der krassesten Features, die ich mir in der Richtung vorstellen kann... denn dadurch kann man die Textur so groß machen, dass man überall kleine Details hat und im großen und ganzen sieht es trotzdem alles wie aus einem Guss aus. Ich nehme nochmal das Beispiel mit dem Moos. Man könnte das Moos dann nur da einsetzen, wo z.B. viel Regen ist, oder in Bodennähe. An anderen Orten könnten die Steine besser und sauberer sein... woanders dann wieder Brüchig. Also da sind der Fantasy keine grenzen gesetzt.

5. 3 Dimensionale Strukturen! Auch das ist ein wichtiger Punkt zur Immersion. Hat man eine 2D Textur, so bekommt man sie an den Texturkanten nicht bündig. Bei einfachen Mustern mag das noch funktionieren, aber nicht bei komplexen. Falls man sich das mit einem Block nicht vorstellen kann, dann mal folgendes Beispiel. Man kaufe sich Tapete mit Ziegel muster... und nun beklebe man eine Kugel so, dass alle Fugen passen. Ich glaube nicht, dass das irgendwie möglich ist. Kann man aber die Kugel selbst per Hand bemalen und malt dann die Steine so, dass man beachtet, wie die Steine in der Kugel liegen würden, dann würden die Fugen passen.

6. Geschwindigkeit. Auch wenn es viel Optimierungsbedarf kostet, um das ganze System schnell zu bekommen, so hat man hinterher sogar noch einen Geschwindigkeitsvorteil, einfach weil das Vorbaken der Texturen und dann anzeigen schneller geht, als sie wirklich bei jedem Frame per Shader zu berechnen. Und jetzt wird der ein oder andere sagen, kann nicht sein. Doch... folgendes Gedankenbeispiel:
Wenn man eine abgerundete Oberfläche Texturiert, dann muss ich 3 mal aus einer Textur pro Material lesen und das dann verblenden. Ist noch kein großer Akt. Nun will man aber auch meist eine Normalmap dazu. Blöderweise muss man da die Tangentspacetextur noch in den World-Space überführen. D.h. 3 x Normalmap lesen, transformieren und dann verblenden. Jetzt stelle man sich vor, man möchte noch eine zweite Textur da rein blenden... dann muss man das ganze zweimal machen und wieder verblenden.
Im Gegensatz dazu zeichnet man einmal die Diffusemap korrekt. Erzeugt die Normalmap und da die Textur ja nur einmal benutzt wird, kann man die Normalmap gleich beim Baken überführen. Das heißt, bei der Variante braucht, nachdem die Diffuse und Normalmap erzeugt sind, nur einmal im Shader gelesen werden. Die Normalmap muss ja dann noch nichtmals in den Worldspace gebracht werden. Das sollte dann extrem schnell sein.

7. Qualität. Ich bin am überlegen, ob ich in diesem Pre-Rendering Pass schon indirektes Licht mit verarbeite. Dieses ändert sich eh nur selten und wenn man es hier schon mit hineinberechnet fällt auch das später in der Pipeline nicht mehr ins Gewicht. Könnte man also nicht nur als Qualitäts sondern auch als Geschwindigkeitsoptimierung werten.

Dies sind bestimmt noch nicht alle Vorteile, die das ganze mit sich bringt. Z.B. glaube ich, dass es in Erweiterter Form nochmal mehr Geschwindigkeit für das Gras und Dinge, die in diese Richtung gehen, bringt. Außerdem könnte man vielleicht noch coole Sachen machen, wie kleine Insekten mit auf die Oberfläche rendern... also quasi mit in die Textur. Dadurch spart man sich viel Verwaltungsaufwand und wenn es dann eh nur kleine Pünktchen sind oder sowas, dann könnten die lässig über die Wand krabbeln.
Ich bin auf jeden Fall gespannt... ich hab die Technik nun übrigens Released... ist aber noch verbuggt und unoptimiert, aber muss halt auch schauen, ob das dann in freier Wildbahn läuft...
  Mit Zitat antworten Zitat