Share via


Komprimierte Texturressourcen (Direct3D 9)

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 beanspruchen. Direct3D unterstützt die Komprimierung von Texturoberflächen, um die Menge des von Texturen belegten Arbeitsspeichers 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 verarbeitet die Dekomprimierung, wenn die Textur einem 3D-Objekt zugeordnet ist.

Speichereffizienz und Texturkomprimierung

Alle Texturkomprimierungsformate sind 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 z. B. ursprünglich 512 x 128 Bytes ist, würde das nächste Mipmapping 256 x 64 usw. sein, wobei jede Ebene um eine Leistung von zwei abnimmt. Auf niedrigeren Ebenen, bei denen die Textur auf 16 mal 2 und 8 nach 1 gefiltert wird, gibt es verschwendete Bits, da der Komprimierungsblock immer ein 4 x 4 Block von Texels ist. Nicht verwendete Teile des Blocks sind gepolstert. Obwohl es auf den niedrigsten Ebenen verschwendete Bits gibt, ist der Gesamtgewinn immer noch erheblich. Der schlechteste Fall ist theoretisch eine 2K by 1 Textur (2m Power). Hier wird nur eine einzelne Zeile von Pixeln pro Block codiert, während der Rest des Blocks nicht verwendet wird.

Mischen von Formaten innerhalb einer einzelnen Textur

Es ist wichtig zu beachten, dass jede einzelne Textur angeben muss, dass ihre Daten als 64 oder 128 Bit pro Gruppe von 16 Texels gespeichert werden. Wenn 64-Bit-Blöcke – d. h. format DXT1 – für die Textur verwendet werden, ist es möglich, die undurchsichtigen und 1-Bit-Alphaformate pro Block in derselben Textur zu mischen. Mit anderen Worten, der Vergleich der ganzzahligen Größe ohne Vorzeichen von color_0 und color_1 wird für jeden Block mit 16 Texels eindeutig durchgeführt.

Sobald die 128-Bit-Blöcke verwendet werden, muss der Alphakanal entweder explizit (Format DXT2 und DXT3) oder interpoliert (Format DXT4 und DXT5) für die gesamte Textur angegeben werden. Wie bei der Farbe können beim Auswählen des interpolierten Modus (Format DXT4 und DXT5) entweder acht interpolierte Alphas oder sechs interpolierte Alphas auf Blockbasis verwendet werden. Auch hier erfolgt der Größenvergleich von alpha_0 und alpha_1 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.

Informationen finden Sie in den folgenden Themen.

Direct3D-Texturen