2011-01-17 5 views
1

Was genau sind die Vorteile von Displacement Maps? Beschleunigen sie tatsächlich das Rendern von Polys mit höherer Zählung, oder ist es nur ein raffinierter Trick für Künstler und In-Engine-Werkzeuge, um die Polyzahl vorübergehend zu senken? Die einzige wirkliche Sache, die ich sehen könnte, ist vielleicht die Detailgenauigkeit, aber nur in größeren Entfernungen.Displacement Mapping

Antwort

3

Nun, es kann eine kompaktere Struktur für die Wiedergabe von High-Poly-Modellen bieten. Eine Verschiebungskarte kann nur 1 Byte pro Pixel enthalten. Wenn Sie das für Displacement-Mapping angeben, speichern Sie eine große Speicherbandbreite auf der GPU.

Bild für eine Sekunde eine einfache Vertex-Struktur.

struct Vert 
{ 
    float x, y, z; 
    float nx, ny, nz; 
    float u, v; 
}; 

Diese Struktur ist 32 Bytes groß. Wenn Sie sich also vorstellen, dass Sie die Anzahl der Scheitelpunkte vierteln können (und Sie sollten in der Lage sein, eine HÖLLE viel mehr zu machen) und alle anderen Scheitelpunkte durch eine 1-Byte-Höhenkarte ersetzen, dann wird die Menge des verwendeten Speichers berechnet wie folgt:

100,000 poly object = 3,200,000 bytes using vertex struct alone. 
25,000 polys + 100,000 entry height map = 900,000 bytes. 

dh dispalcement mapping liefert Ihnen die gleichen Daten in 28% des Speichers. SIEG! : D

Wenn Sie eine normale Map speichern und die w/a-Komponente für Höhe verwenden, dann verbrauchen Sie 400000 Bytes für die Textur und Sie sind jetzt 1.200.000 Bytes groß, was STILL 37.5% der Größe ist. PLUS Sie können jetzt 12 Bytes für normalen Speicher entfernen und Sie sind wirklich auf den gleichen Wert von 900.000 Bytes.

Sie sollten in der Lage sein, deutlich höhere Kompressionsraten zu erzielen. Zusammengefasst erhalten Sie ein besseres Modell für einen Bruchteil der Speicherdaten.

Als zusätzlichen Bonus können Sie mit dem normalen Map/Height-Map-System auch einfach skalieren, so dass weniger leistungsstarke Maschinen einfach die normalen Daten verwenden und Sie trotzdem recht gute Ergebnisse erhalten.

+0

Danke! Daran habe ich vorher nicht wirklich gedacht. Wäre es nicht falsch anzunehmen, dass die Geschwindigkeit auch etwas schneller sein könnte, wenn man bedenkt, dass man von einer Textur liest und sie auf der GPU generiert, anstatt alle Vertex-Daten über den Bus zu übertragen? O.o – sringer

+1

@sringer: Es hängt ganz davon ab, wo Ihre Beschränkungen auftreten. Wenn Sie CPU-begrenzt sind, dann wird offensichtlich keine Beschleunigung auf der GPU einen Unterschied machen. Auch wenn Sie Shader-Beschränkungen haben, ist es wahrscheinlich, dass das Displacement-Mapping die Dinge verschlimmern wird. Auf der anderen Seite, wenn Sie Speicher Bandbreite begrenzt sind, dann ist es wahrscheinlich, einen großen Unterschied zu machen. Wie immer, Profil, so dass Sie wissen, dass Ihre "Optimierungen" tatsächlich alles beeinflussen werden. – Goz