3D Terrain Engine

Carndret

Erfahrenes Mitglied
Ich bin gerade dabei mit meinem Bruder eine kleine Terrain Engine zu basteln, die so ähnlich ist wie die von Age of Mythology und Praetorians. D.h. Der Untergrund ist eine einfache Ebene bzw. ein Netz, bei der man die Vertexes dieser Fläche benutzt um Höhenstufen zu machen. Auf diese Fläche will ich nun verschiedene Texturen auftragen. Im Editor von AoM habe ich gemerkt das maximal 5 Texturen auf einmal in einem Kästchen (2 Dreiecke die ein Quadrat ergeben) plaziert werden können.
Bei den ersten Versuchen soetwas nachzumachen konnte man nur eine Textur auf die ganze Oberfläche legen, da das mit den Texturkoordinaten nicht funktioniert. Wie aber schaffen es die vielen anderen Spiele, ein Terrain zu benutzten und darauf beliebig viele Texturen überall hin zu setzen. Wie ist die Oberfläche aufgebaut - also in welcher Reihenfolge wurden die Vertexes gesetzt um eine Ebene zu bekommen auf der man die Texturen einfach so irgendwo drauflegen kann?
Hat da jemand ein bisschen Ahnung? Hier sind ein paar Screenshots von "Ultima 1 Reborn", wo es genauso ist:
Screenshot 1
Screenshot 2
Screenshot 3
Wie machen die das nur?
 
Hm. Wie meinst du das mit "verschiedene Texturen auftragen"? Multi-Texturing? Ich glaube dass du vielleicht eher das Feature meinst, das dafür sorgt, dass beispielsweise die höher liegenden Terrainregionen "bergig" aussehen, während die Teile, die unter Wasser liegen, eine Sandtextur bekommen. Wenn es das ist... ich glaube mal gelesen zu haben, dass man diesen Effekt dadurch erreicht, indem man nicht mehrere Texturen übereinander rendert, sondern nach der Berechnung der Terrain-Vertices (also vor der eigentliches Laufzeit deiner Engine) eine einzige Texturmap erzeugt, die mehrere Texturen anhand der Informationen aus der Heightmap ineinander überblendet (z.B. Höhe 0-100: Sandtextur; Höhe 100-200: Grastextur; Höhe 200+: Felstextur). Soviel zur Theorie :) In die Praxis umgesetzt hab ich das selber noch nicht, also musst du dich bei spezifischen Fragen an jemand anders wenden :)

Hier noch zwei Links, die dir helfen könnten:
http://www.flipcode.com/tutorials/tut_terrtex.shtml
http://www.flipcode.com/tpractice/issue05.shtml

[edit]Ach, hab mir grad die Screens angeguckt :) Da wird's wohl so gemacht, dass man von einer Grastextur ausgeht und in die Terraintexturmap an der Stelle des ausgewählten Polygons eine andere Textur blendet.[/edit]
 
Nicht ganz. Ich will selbst bestimmen wo welche Textur hinkommt. Leider sind fast alle Tutorals darauf aus, die Landschaft mit Hightmaps zu gestalten und dann große Texturen durch verschiedene Alphamaps zusammenzulegen und über das Terrain zu rendern.
Ich will aber viele kleinere Texturen benutzen um sozusagen auf der Oberfläche zu malen. Mein Problem ist - wie gesagt - die Anordnung der Vertexes, die die Ebene bildet. Es gibt da ja verschiedene Möglichkeiten für die sogennanten D3D PRIMITIVES .
Im Prinzip muss ich nur wissen wie das Mesh bei anderen Spielen aussieht bzw. aufgebaut ist und wie die Handhabung mit den Texturkoordinaten abläuft.
 
Hm... ist es im Prinzip nicht egal, wie du deine Vertices anordnest? Du musst halt nur die Texturkoordinaten richtig berechnen. Liegt vielleicht da das Problem?
 
Kann schon sein :) ... Deswegen frag ich mich, wie das bei anderen Spielen ist.
Aber selbst wenn es nur die Texturkoordinaten sind, die das Problem auslösen, wüsste ich nicht wie man das richtig lösen könnte.
Wenn es z.B. die Einschränkung nicht gäbe, dass man nur max. 8 Texturen bei DirectX pro Face benutzen darf, wäre es auch ein kleineres Problem - deswegen hatte ich jetzt an Multipassing gedacht. Was soweit ich es mitbekommen habe mehrfaches rendern und übereinanderlegen heißt. Vielleicht liegt darin die Lösung...
 
Hm, also ich würd da nichts mit Multipass Rendering anfangen... das wird sehr schnell sehr langsam ;)

Ich würde eher wie schon beschrieben vor der eigentlichen Rendering-Hauptschleife oder am besten gleich in einem Editor eine Textur für das gesamte Terrain erstellen. In dieser Textur kannst du ja dann nach Belieben deine anderen Texturen kombinieren.
 
Im Prinzip ist es ja Multitexturing mit weichen Übergängen (Transitions). Ich hab eine Seite gefunden, wo ein Programm drauf ist das genau so eine Landschaft hat wie ich sie will. Bisher hat der Programmierer noch nicht auf meine Mail geantwortet, aber vielleicht kann mir hier jemand sagen wie das noch geht, außer mit Multipass Rendering (so hat er es gemacht):
> Runtimes > Programm
 
Zurück