Share via


Komprimierte Texturressourcen

Texturkarten sind digitalisierte Bilder, die auf dreidimensionalen Formen gezeichnet werden, um visuelle Details hinzuzufügen. Sie werden diesen Formen während der Rasterung zugeordnet, und der Prozess kann große Mengen sowohl des Systembus als auch des Arbeitsspeichers verbrauchen. Direct3D unterstützt die Komprimierung von Texturoberflächen, um den von Texturen belegten Arbeitsspeicher zu reduzieren. Einige Direct3D-Geräte unterstützen komprimierte Texturoberflächen nativ. Wenn Sie auf solchen Geräten eine komprimierte Oberfläche erstellt und die Daten darin geladen haben, kann die Oberfläche wie jede andere Texturoberfläche in Direct3D verwendet werden. Direct3D behandelt die Dekomprimierung, wenn die Textur einem 3D-Objekt zugeordnet ist.

Speichereffizienz und Texturkomprimierung

Alle Texturkomprimierungsformate haben zwei Potenzen. Dies bedeutet zwar nicht, dass eine Textur notwendigerweise quadratisch ist, aber es bedeutet, dass sowohl x als auch y zwei Kräfte sind. Wenn eine Textur beispielsweise ursprünglich 512 mal 128 Bytes beträgt, würde die nächste Mipmapping 256 x 64 usw. sein, wobei jede Ebene um eine Leistung von zwei abnimmt. Auf niedrigeren Ebenen, wo die Textur zu 16 mal 2 und 8 nach 1 gefiltert wird, gibt es verschwendete Bits, da der Komprimierungsblock immer ein 4-mal 4-Texelblock ist. Nicht verwendete Teile des Blocks sind aufgefüllt.

Obwohl auf den niedrigsten Ebenen verschwendete Bits vorhanden sind, ist der Gesamtgewinn immer noch signifikant. Der schlechteste Fall ist theoretisch eine Textur von 2K by 1 (2- Power). Hier wird nur eine einzelne Zeile von Pixeln pro Block codiert, während der Rest des Blocks nicht verwendet wird.

Mischen von Formaten in einer einzigen Textur

Es ist wichtig zu beachten, dass jede einzelne Textur angeben muss, dass ihre Daten als 64 oder 128 Bit pro Gruppe von 16 Texeln gespeichert werden. Wenn 64-Bit-Blöcke – d. h. das Blockkomprimierungsformat BC1 – für die Textur verwendet werden, ist es möglich, die undurchsichtigen und 1-Bit-Alphaformate pro Block innerhalb derselben Textur zu mischen. Anders ausgedrückt: Der Vergleich der ganzzahligen Größe ohne Vorzeichen von color_0 und color_1 wird für jeden Block von 16 Texeln eindeutig durchgeführt.

Nachdem die 128-Bit-Blöcke verwendet wurden, muss der Alphakanal entweder im expliziten (Bc2-Format) oder im interpolierten Modus (Format BC3) für die gesamte Textur angegeben werden. Wie bei der Farbe können bei Auswahl des interpolierten Modus (Format BC3) entweder acht interpolierte Alphas oder sechs interpolierte Alphas auf Blockbasis verwendet werden. Auch hier erfolgt der Größenvergleich von alpha_0 und alpha_1 eindeutig blockweise.

Direct3D bietet Dienste zum Komprimieren von Oberflächen, die zum Texturieren von 3D-Modellen verwendet werden. Dieser Abschnitt enthält Informationen zum Erstellen und Bearbeiten der Daten in einer komprimierten Texturoberfläche.

In diesem Abschnitt

Thema BESCHREIBUNG

Undurchsichtige und 1-Bit-Alpha-Texturen

Das Texturformat BC1 ist für Texturen vorgesehen, die undurchsichtig sind oder eine einzelne transparente Farbe aufweisen.

Texturen mit Alphakanälen

Es gibt zwei Möglichkeiten, Texturkarten zu codieren, die eine komplexere Transparenz aufweisen. In jedem Fall wird dem bereits beschriebenen 64-Bit-Block ein Block vorangestellt, der die Transparenz beschreibt. Die Transparenz wird entweder als 4x4-Bitmap mit 4 Bits pro Pixel (explizite Codierung) oder mit weniger Bits und linearer Interpolation dargestellt, die der für die Farbcodierung verwendeten entspricht.

Blockkomprimierung

Die Blockkomprimierung ist eine verlustbehaftete Texturkomprimierungsmethode zur Verringerung der Texturgröße und des Arbeitsspeicherbedarfs, was zu einer Leistungssteigerung führt. Eine blockkomprimierte Textur kann kleiner sein als eine Textur mit 32 Bits pro Farbe.

Komprimierte Texturformate

Dieser Abschnitt enthält Informationen zu den internen organization komprimierter Texturformate. Sie benötigen diese Details nicht, um komprimierte Texturen zu verwenden, da Sie Direct3D-Funktionen für die Konvertierung in und aus komprimierten Formaten verwenden können. Diese Informationen sind jedoch nützlich, wenn Sie komprimierte Oberflächendaten direkt verwenden möchten.

 

Texturen