Detail Mapping: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
()
Zeile 1: Zeile 1:
 
== Was ist Detailmapping ==
 
== Was ist Detailmapping ==
  
Beim Detailmapping wird eine Basistextur mit Hilfe von [[Multitexturing]] mit einer Detailtextur auf der sich beispielsweise Dreckflecken befinden kombiniert. Auf diese Art und Weise lassen sich Details wie Schmutzflecken oder Blutflecken leicht darstellen.
+
Oftmals hat man in einer Szene Objekte auf denen eine recht grobe Textur haftet, und die daher feine Details missen lässt, was im echten Leben bei vielen Materialien jedoch sichtbar ist. Eine Möglichkeit Details in diese Textur zu bringen, wäre eben diese Textur sehr viel hochauflösender zu machen und die Details direkt in dieser abzulegen. Diese Methode hat jedoch den Nachteil dass man so sehr viel mehr Speicher braucht und die Details (z.B. kleine Risse in Gestein, Grasmuster auf Grastextur) fest sind für jedes Objekt das diese Textur nutzt.
 +
 
 +
Und genau da setzt '''Detailtexturing''' an : Da moderne Grafikkarten allesamt über mehrere Textureinheiten (siehe [[Multitexturing]]) verfügen, legt man in vergleichsweise hoher Wiederholung (z.B. Texturkoordinaten der Grundtextur * 16) eine Graustufentextur über die Grundtextur in der die Details dieser Oberfläche hinterlegt sind. Dies klappt deshalb, weil Details von Materialien wie z.B. Holz, Stein, Gras filigran und wiederholbar sind.
 +
 
 +
<br>
 +
== Beispiel ==
 +
[[Bild:Detailtex.jpg]]<br>
 +
Besonders bei der Darstellung von Gelände wird '''Detailtexturing''' genutzt. Denn hier hat man meist eine recht grob aufgelöste Terraintextur (Basistextur) die (siehe ''rechter Bildabschnitt'') jedoch so gut wie keine Details erkennen lässt (man ist ja oft auf Texturgrößen <= 2k^n beschränkt, da lassen sich kaum Details in der Basistextur ablegen). Über diese legt man dann mittels [[Multitexturing]] in recht hoher Wiederholung die Graustufen-Detailtextur um so Details zu simulieren (siehe ''linker Bildabschnitt''). Der Unterschied ist frapierend, kostet allerdings kaum Leistung. Besonders wenn der Nutzer das Terrain aus nächster Nähe betrachtet gibt es riesige Unterschiede.
 +
 
 +
<br>
 +
== Implementation ==
 +
// Detailtextur auf Textureinheit 1 aktiveren
 +
glClientActiveTexture(GL_TEXTURE1);
 +
glBindTexture(GL_TEXTURE_2D, DetailTexture);
 +
// Basistextur auf Textureinheit 0 aktiveren
 +
glClientActiveTexture(GL_TEXTURE0);
 +
glBindTexture(GL_TEXTURE_2D, BaseTexture);
 +
...
 +
// Alle Schnittpunkte des Objektes renderm
 +
for v := 0 to High(VertexData) do
 +
  begin
 +
  ...
 +
  // Texturkoordinate für die Detailtextur
 +
  glMultiTexCoord2f(GL_TEXTURE1, Vertex[v].s*16, Vertex[v].t*16);
 +
  // Texturkoordinate für die Basistextur
 +
  glMultiTexCoord2f(GL_TEXTURE0, Vertex[v].s, Vertex[v].t);
 +
  ...
 +
  end;

Version vom 28. Oktober 2004, 11:55 Uhr

Was ist Detailmapping

Oftmals hat man in einer Szene Objekte auf denen eine recht grobe Textur haftet, und die daher feine Details missen lässt, was im echten Leben bei vielen Materialien jedoch sichtbar ist. Eine Möglichkeit Details in diese Textur zu bringen, wäre eben diese Textur sehr viel hochauflösender zu machen und die Details direkt in dieser abzulegen. Diese Methode hat jedoch den Nachteil dass man so sehr viel mehr Speicher braucht und die Details (z.B. kleine Risse in Gestein, Grasmuster auf Grastextur) fest sind für jedes Objekt das diese Textur nutzt.

Und genau da setzt Detailtexturing an : Da moderne Grafikkarten allesamt über mehrere Textureinheiten (siehe Multitexturing) verfügen, legt man in vergleichsweise hoher Wiederholung (z.B. Texturkoordinaten der Grundtextur * 16) eine Graustufentextur über die Grundtextur in der die Details dieser Oberfläche hinterlegt sind. Dies klappt deshalb, weil Details von Materialien wie z.B. Holz, Stein, Gras filigran und wiederholbar sind.


Beispiel

Detailtex.jpg
Besonders bei der Darstellung von Gelände wird Detailtexturing genutzt. Denn hier hat man meist eine recht grob aufgelöste Terraintextur (Basistextur) die (siehe rechter Bildabschnitt) jedoch so gut wie keine Details erkennen lässt (man ist ja oft auf Texturgrößen <= 2k^n beschränkt, da lassen sich kaum Details in der Basistextur ablegen). Über diese legt man dann mittels Multitexturing in recht hoher Wiederholung die Graustufen-Detailtextur um so Details zu simulieren (siehe linker Bildabschnitt). Der Unterschied ist frapierend, kostet allerdings kaum Leistung. Besonders wenn der Nutzer das Terrain aus nächster Nähe betrachtet gibt es riesige Unterschiede.


Implementation

// Detailtextur auf Textureinheit 1 aktiveren
glClientActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, DetailTexture);
// Basistextur auf Textureinheit 0 aktiveren
glClientActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, BaseTexture);
...
// Alle Schnittpunkte des Objektes renderm
for v := 0 to High(VertexData) do
 begin
 ...
 // Texturkoordinate für die Detailtextur
 glMultiTexCoord2f(GL_TEXTURE1, Vertex[v].s*16, Vertex[v].t*16); 
 // Texturkoordinate für die Basistextur
 glMultiTexCoord2f(GL_TEXTURE0, Vertex[v].s, Vertex[v].t);
 ...
 end;