Detail Mapping: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (→Was ist Detailmapping) |
K (Rechtschreibung & Zeichensetzung) |
||
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Was ist Detailmapping == | == 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. | + | 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. | 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. | ||
Eine besondere Form des Detailmappings sind sogenannte [[Decals]]. | Eine besondere Form des Detailmappings sind sogenannte [[Decals]]. | ||
− | |||
− | |||
== Beispiel == | == Beispiel == | ||
[[Bild:Detailtex.jpg]]<br> | [[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 frappierend, kostet allerdings kaum Leistung. Besonders wenn der Nutzer das Terrain aus nächster Nähe betrachtet gibt es riesige Unterschiede. |
+ | |||
== Implementation == | == Implementation == | ||
− | + | <source lang="pascal"> | |
− | + | // 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 | // Texturkoordinate für die Detailtextur | ||
glMultiTexCoord2f(GL_TEXTURE1, Vertex[v].s*16, Vertex[v].t*16); | glMultiTexCoord2f(GL_TEXTURE1, Vertex[v].s*16, Vertex[v].t*16); | ||
// Texturkoordinate für die Basistextur | // Texturkoordinate für die Basistextur | ||
glMultiTexCoord2f(GL_TEXTURE0, Vertex[v].s, Vertex[v].t); | glMultiTexCoord2f(GL_TEXTURE0, Vertex[v].s, Vertex[v].t); | ||
− | ... | + | |
− | + | // ... | |
+ | end; | ||
+ | </source> | ||
+ | |||
+ | == Siehe Auch == | ||
+ | [[glBindTexture]], [[glClientActiveTexture]], [[glMultiTexCoord]] |
Aktuelle Version vom 30. November 2013, 13:53 Uhr
Inhaltsverzeichnis
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.
Eine besondere Form des Detailmappings sind sogenannte Decals.
Beispiel
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 frappierend, 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;