Terrain Texturierung

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Stimpy
Beiträge: 49
Registriert: 02.03.2011, 15:16
Wohnort: Seelze / Hannover
Kontaktdaten:

Terrain Texturierung

Beitrag von Stimpy »

Frage zur texturierung von Terrain,

hallo liebes ZFX Forum, ich habe ein Verständnis-Frage zum Terrain-Rendering. Denn irgendwie verstehe ich es bisher nicht wirklich.

Was mir klar ist:
- Ein Terrain kann man aus einer Heightmap generieren
- Über Texture-Stages kann man per Alpha-Map z.B. sagen welche Textur an einem gewissen Fleck sichtbar ist (Splatting?!)

Wenn ich mir nun aber Screenshoots von detailierten Terrain mit Strassen, kleinen Wegen & co ansehe, dann verstehe ich nicht
wie man ein Terrain so detailiert texturiert.

Als Beispiel:

Bild

Dieses über eine Alpha-Map zu machen ist doch viel zu unpräzise?!

Natürlich könnte man auch per Tiling arbeiten und ein Grid aufbauen, wo jedes Tile seine eigene Textur hat und dies über neighbooring evtl.
noch ein wenig aufhübschen...aber dies stelle ich mir langsam vor?!

Über Anregungen wie man so ein Terrain erstellt wäre ich sehr dankbar... :ugeek:
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4286
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Terrain Texturierung

Beitrag von Chromanoid »

Kannst dir ja mal diese Präsentation reinziehen: http://www.gdcvault.com/play/1277/HALO- ... Terrain-of
Die wurde hier schon mal an anderer Stelle als link zu der ppt gepostet, der Link ist aber leider nicht mehr erreichbar. Es geht um HaloWars Terrain Rendering. Später wird auch auf die Texturierung eingegangen.

Ich würde es allerdings erst mal mit splatting und decals probieren. Bei http://en.wikipedia.org/wiki/Texture_sp ... imizations sind ein paar sinnvolle Optimierungen zu finden. Aber ich kenn mich mit Rendern eigentlich nicht so aus :) vielleicht sagt ja ein Spezi auch bald was dazu ^^ Vielleicht könnte man Vertexfarben für das Blending mal ausprobieren.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5162
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Terrain Texturierung

Beitrag von Schrompf »

Wir benutzen bei den Splitterwelten Texture Splatting. Das bedeutet aber nicht "Alpha Map"! Zur Erklärung:

a) Du hast richtig erkannt, dass man ordentlich aufgelöste Terraintexturen nur hinbekommt, wenn man sie tiled. Also xfach wiederholt. Das haben praktisch alle Texturierungsansätze abgesehen vom Mega Texturing gemeinsam.

b) Welche Texturen sollen wohin? Dafür gibt es verschiedene Ansätze:
b1) Texture Splatting. Man generiert pro Material ein Set an Terrainflächen, wobei man pro Vertex angibt, wie stark das Material da reingemischt werden soll. Dann malt mal all die Material-Meshes übereinander und überlässt es dem AlphaBlending, die Materialen zu mischen.
b2) AlphaMaps. Man liest im Shader aus allen Texturen gleichzeitig und mischt dann die Farben anteilig zusammen. Eine solche Zusammenmisch-Textur gibt zum Beispiel im Rotkanal an, wieviel "Stein" an der Stelle sichtbar ist, im Grünkanal den "Sand"-Anteil und im Blaukanal den "Wiese"-Anteil. Die Alpha Map kann dann sehr viel gröber aufgelöst sein und erstreckt sich einmal über das ganze Terrain.

c) Die Hang-Textur in obigem Bild ist separate Logik. Du kannst nicht von oben eine Textur auf Hänge projezieren - die Textur wird sehr hässlich gestreckt. Die Jungs haben anscheinend im Shader zusätzliche "Hang"-Texturen gesampelt und mischen die je nach Normale anteilig mit rein.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Tiles

Re: Terrain Texturierung

Beitrag von Tiles »

Dem Shading nach zu urteilen könnte der Hang auch ein extra Meshteil sein. Das Gebäude im Hintergrund ist es definitiv. Mit Texturesplatting lassen sich übrigens reichlich Texturen mit einander mischen. Grundsätzlich gehen ja über eine einzelne Splatmap erst mal nur vier Texturen zu mischen. Rot, Grün, Blau und Alphakanal. Wenn man aber statt einer Textur bei einer Farbe nun eine weitere Splatmap einhängt hat man schon 7 zu mischende Texturen. Ich sehe allerdings in dem Shot nur vier gemischte Texturen.

Der Rest ist reichlich Hirnschmalz und künstlerisches Feingefühl wie man mit den beschränkten Mitteln die man in einer Gameengine hat eine möglichst variantenreiche Landschaft zusammenbekommt. Der Shot ist jedenfalls ein sehr schön gestaltetes Stück Level :)
Stimpy
Beiträge: 49
Registriert: 02.03.2011, 15:16
Wohnort: Seelze / Hannover
Kontaktdaten:

Re: Terrain Texturierung

Beitrag von Stimpy »

Also ersteinmal vielen Dank für die Antworten :)

@Tiles: Ich kann maximal 7 Texturen "mischen"? Mehr geht nicht bei einem Splatting?! Das klingt mir ein bischen arg wenig, denn wenn ich ein Level z.B. in einem RTS habe kann ich mit 7 Texturen nicht wirklich abwechslung schaffen :(

@Schrompf: Danke für die Erläuterung zwecks Alpha-Map ;) Wenn ich also die Textur Info für einen Vertex speicher, dann kann ich doch beliebig viele Texturen haben oder? Außerdem kann ich in einem Level-Editor dynamisch auf das Terrain malen, in dem ich die Vertex-Tex Werte setze. Oder sehe ich das falsch?

@Chrom: Das Video sieht interessant aus, ich versuche die Tage mir das einmal in Ruhe anzusehen - Auf jedenfall machen die so ca. genau das was ich will...

Grüße

Stimpy
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Terrain Texturierung

Beitrag von Krishty »

Stimpy hat geschrieben:@Tiles: Ich kann maximal 7 Texturen "mischen"? Mehr geht nicht bei einem Splatting?! Das klingt mir ein bischen arg wenig, denn wenn ich ein Level z.B. in einem RTS habe kann ich mit 7 Texturen nicht wirklich abwechslung schaffen :(
Du musst das Terrain ja früher oder später sowieso in Blöcke unterteilen, sei es nun für LoD oder für Streaming oder sonstwas. Dann lässt du eben vier Texturen pro Block statt für das ganze Terrain zu. In dem Schnappschuss reichen die ja auch.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 5162
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Terrain Texturierung

Beitrag von Schrompf »

Beim Texture Splatting:

hast Du einen DrawCall und auch einen Satz Vertizes pro Material. Dafür kannst Du beliebig viele davon aufeinanderschichten.

Bei AlphaMaps:

zeichnest Du eine feste Anzahl Materialien mit einem DrawCall. Allerdings kannst Du dann nur eine feste Anzahl Materialien pro DrawCall benutzen und der Shader muss in jedem Fall aus ALLEN Texturen samplen. Mit einer AlphaMap kommst Du auf 5 Materialien, mit zweien auf 9 Materialien.

Erstere Option ist flexibler, aber etwas komplexer in der Mesherstellung und belastet die CPU mehr. Zweitere ist einfacher, belastet aber die Grafikkarte mehr. Welche davon die bessere ist, hängt von Deinem Szenario ab. Ich würde erstmal zu AlphaMaps raten, die sind einfacher zu implementieren.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Tiles

Re: Terrain Texturierung

Beitrag von Tiles »

Schrompf, du verwirsst mich da grade ein wenig. Im Wiki steht nichts von der Unterscheidung zwischen Texture Splatting und Alphamaps. Da steht im Gegenteil dass Texture Splatting Alphamaps verwendet. Und so habe ich es eigentlich auch gelernt. Ich zitiere mal:
In computer graphics, texture splatting is a method for combining different textures. The method works by applying an alphamap to the higher levels, revealing the layers underneath where the alphamap is partially or completely transparent. The term was coined by Charles Bloom.[1]
Quelle: http://en.wikipedia.org/wiki/Texture_splatting

Was stimmt denn nun? :)

Mit deiner Rechnung von 5 Materialien bin ich auch nicht so ganz eins. Eine Splatmap ist in der Regel einfach ein RGBA Bild. Und jeder der vier Kanäle dient dann als Transparenz für eine Textur. Und weil es eben nur vier Kanäle sind gehen doch auch nur vier Texturen. Oder auch nur Drei wenn man im vierten Kanal eine weitere Splatmap einhängt damit man insgesamt mehr Texturen mischen kann. Oder übersehe ich da grade was? Meinst du mit Materialien überhaupt die Texturen? Ein Material ist ja in der Regel das komplette Paket aus Shader und Textur, Normalmap, etc. .
Benutzeravatar
B.G.Michi
Establishment
Beiträge: 163
Registriert: 07.03.2006, 20:38
Alter Benutzername: B.G.Michi
Kontaktdaten:

Re: Terrain Texturierung

Beitrag von B.G.Michi »

Wenn du 4 Kanäle hast (rgba) dann kannst du damit 4 "Materialien" eine Gewichtung verleihen, und das 5. Material bekommt seine Gewichtung durch den Wert, der noch (z.b. zu 1.0) fehlt: r = 0.1, g = 0.2, b = 0.3, a = 0.05, => 0.35 für das 5.
und wie du "Material" definierst liegt ja ganz bei dir, entweder es sind nur verschiedene Texturen oder "ganze" Shader...
Tiles

Re: Terrain Texturierung

Beitrag von Tiles »

Danke Michi, an die Differenz bis 1 habe ich gar nicht gedacht. Ich dachte da lassen sich wirklich nur vier Materialien mischen. Wieder was gelernt, sehr schön :)
Benutzeravatar
Schrompf
Moderator
Beiträge: 5162
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Terrain Texturierung

Beitrag von Schrompf »

Ich meine mit Texture Splatting das Auftragen mehrerer separater Schichten. Du malst halt einen Mesh mit einem Material, dann den Mesh mit anteiligem AlphaBlending mit einem anderen Material obendrauf, dann nochmal den Mesh für das dritte Material usw. Woher die Alphawerte für die verschiedenen Schichten kommen, ist ja frei wählbar. Es werden nur üblicherweise Per-Vertex-Alphawerte genommen, weil man eh immer eigene Meshes pro Schicht erstellt, in denen die nichtbenutzten Flächen fehlen. Bei AlphaMaps werden dagegen üblicherweise alle Materialen zugleich gemalt - damit müssen auch alle Texturen ausgewertet werden, selbst wenn sie an der Stelle gar nicht sichtbar sind, dafür spart man DrawCalls und braucht nur einen einzigen Mesh.

Die beiden Methoden sind sich eigentlich sehr ähnlich. Das eine ist quasi SinglePass, das andere Multipass. Ich benutze nur diese beiden Begriffe, um zwischen den beiden Herangehensweisen zu unterscheiden, aber andere Leute werden das anders nennen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Tiles

Re: Terrain Texturierung

Beitrag von Tiles »

Danke :)
Antworten