So, vorher erstmal ein Lob für die tolle Seite & dieses Forum.
Zur Thematik. Ich habe ein Terrain und möchte nun dieses Terrain texturieren. Jedes Quad, also die Flächen mit den 4 Eckpunkten, soll nun eine eigene Textur bekommen, wie z.b Sand, Gras, Stein usw. Das ist alles kein Problem, allerdings sieht das ganze dann wie ein buntes Schachbrett aus. Ich möchte nun zwischen den einzelnen Texturen einen Übergang machen. (ich hoffe man(n) oder Frau kann mir folgen). Es soll aber keine vorberechnete Sache werden, mit irgendwelchen Surfacemaps(nennt man das so?)
Der Grund ist 1. das Terrain ist wahnsinnig groß und nur durch die Speicherkapazität begrenzt. Das heißt die Surfacemaps würden sehr viel Speicher belegen und das ist unakzeptabel da sich die einzelnen kleinen Texturen (s.o. Gras, Stein usw.) ohnehin wiederholen.
2. Das Terrain kann zur Runtime verändert werden, zum einen die Heightmap zum anderen die einzelnen Textures der Quads. Was also Neuberechnung der Surfacemap bedeutet.
So lange Rede kurzer Sinn, kann man mit Blending oder Multitexturing (wobei Multitexturing nicht von jeder Graka unterstützt wird und deshalb nicht so gewünscht ist) das irgendwie auf die Reihe kriegen ohne das die Performance in den Keller geht.
Ja. Bei UT2003 wird das auch so gemacht. Die Landschaft wird in 16*16 Blöcke unterteilt und für jeden Block werden die verwendeten Texturen und pro Vertex ein Blendfaktor für jede Texture gespeichert. Multitexturing wäre hier ideal, aber es geht mit additivem Blending auch, aber natürlich entsprechend langsamer mit nur einer Texture gleichzeitig.
Hier ist ein Tutorial und Beispielprogram in dem das mit drei Texturen und Multitexturing erklärt wird:http://www.delphi3d.net/articles/viewarticle.php?article=terraintex.htm
okay, dieser Thread ist zwar über 6 Jahre alt, aber ich sehe für mich trotzdem die Notwendigkeit einer Wiederbelebung Leider funktioniert der Link von Lars nicht mehr.
Ich habe das Multitexturing-Tutorial gerade behandelt und auch alles erfolgreich getestet - mit einem Polygon. Mir fehlt derzeit noch das prinzipielle Verständnis auf welche Art und Weise ein Terrain texturiert wird. Selbstverständlich kann ich jedem Quad mehrere Textur-"Layer" zuweisen, aber ein schönes, natürlich wirkendes Terrain entsteht dabei nicht.
Diese Abwechslung zwischen Gras, Sand, Stein und Erde ist unregelmäßig, wirkt natürlich und blendet perfekt ineinander. Wird das via Shader realisiert oder ist es möglich das per Multitexturing zu realisieren? Wie erwähnt, die hohe graphische Qualität ist nicht Prämisse!
Kann mir jemand helfen? Mir fehlt ein Anfang für diese Problematik, eine Idee oder ein Tutorial.
Gruß, Killian
_________________ Die Antwort ist 17, aber wie lautet die Frage?
Die delphi3d-Seite existiert leider nicht mehr (falls Du etwas Zeit hast, im Webarchiv gibts sie noch, trödelt nur etwas. Bilder sehe ich noch keine ), aber interessante Begriffe nach denen Du dich umsehen kannst sind z.B. "Texture Splatting" und "Procedural Texturing" wie im Tutorial Terrain2.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ein Kumpel von mir hat das heute übliche verfahren gut in Szene gesetzt, guckst du hier http://www.youtube.com/watch?v=PrIQdcT4CCE&feature=player_embedded. Das Prinzip ist einfach, man nutzt den 4Komponenten Vertexcolor zum bemalen. Für jede Komponente wird eine Textur fest gelegt, also 4 verschiedene Texturen und durch die normalisierung geht man sicher das das weighting korrekt ist. 4verschiedene Texturtypen sind mehr als ausreichend, wenn man bedenkt das man diese pro polygon ändern kann. Hierbei muss man aber drauf achten, das Mesh entsprechend zu tesselieren. Sollte es nicht möglich sein genug zu tesselieren, dann kannst du stellenweise auch auf eine Textur statt vertexcolor zurück greifen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Dieser nutzt zwar ShaderModel 4, aber das betrifft nur den Vertexshader und selbst dieser lässt sich auch auf älteren Grafikkarten umsetzen.
Bezüglich der Texturen liegt der Trick einfach in dieser Fragmentshader-Zeile:
Code:
vec3 color = a.r*tex0 + a.g*tex1 + a.b*tex2;
Zwischen drei Texturlayern (gekachelt, hohe Auflösung) wird anhand mit einer Alphamap (über das komplette Terrain, niedrige Auflösung) interpoliert. Für jeden Texel der Alphamap gilt a.r + a.g + a.b = 1.0, dadurch muss man nicht noch durch die Summe teilen.
Die Alphamap wird anhand der Terrainnormale im voraus generiert. Also an steilen Stellen gibt es mehr Fels und an flachen Stellen mehr Sand.
das Video ist sehr beeindruckend und genau das was ich machen möchte. Mein Ziel ist ein absolut schmaler Terrain - Editor für Testzwecke, in welchem ich auf einem Terrain einer bestimmten Größe (z.B. 100*100 Polygone), wie von Photoshop mit seinen Brushes gewohnt, Texturdetails zeichnen kann. Exakt so wie dein Kollege das für 3dsmax realisiert hat. Leider funktioniert sein Script in meiner 3ds version nicht.
Ehrlicherweise muss ich gestehen, dass ich arge Zweifel habe ob ich mich zu dieser Zeit schon an Shader wagen sollte. Ich habe diesbezüglich 0,0 Erfahrung und auch sicherlich eine falsche Vorstellung, was das eigentlich genau ist. Die Variante von TAK2004 klingt dennoch sehr interessant. Nur fehlt mir hier der Ansatz. Auch nach der kurzen Beschreibung von dir lichtet sich der Nebel in meinem Kopf nicht
Ich brauche wahrscheinlich ein paar Hinweise zum Ablauf und zum Verständnis. Mein Naturell ist der "Designer", aber ich versuche mich seit geraumer Zeit wieder sehr in der Programmierung. Daher bitte etwas Nachsicht üben, wenn ich manche Dinge mehrmals zu erfragen versuche.
_________________ Die Antwort ist 17, aber wie lautet die Frage?
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.