Freigeben über


Komprimierte Texturressourcen

Texturzuordnungen sind digitalisierte Bilder, die auf dreidimensionalen Formen gezeichnet werden, um visuelle Details hinzuzufügen. Sie werden während der Rasterung in diese Shapes eingebunden, und der Prozess kann große Mengen sowohl des Systembus als auch des Arbeitsspeichers verbrauchen. Um den von Texturen verbrauchten Arbeitsspeicher zu verringern, unterstützt Direct3D die Komprimierung von Texturoberflächen. 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 in Direct3D wie jede andere Texturoberfläche verwendet werden. Direct3D behandelt die Dekomprimierung, wenn die Textur einem 3D-Objekt zugeordnet wird.

Speichereffizienz und Texturkomprimierung

Alle Texturkomprimierungsformate sind Potenzen von zwei. Obwohl dies nicht bedeutet, dass eine Textur notwendigerweise quadratisch ist, bedeutet dies, dass sowohl x als auch y Mächte von zwei sind. Wenn eine Textur z. B. ursprünglich 512 x 128 Bytes beträgt, würde die nächste Mipmapping 256 x 64 usw. betragen, wobei jede Ebene um eine Leistung von zwei abnimmt. Auf niedrigeren Ebenen, bei denen die Textur nach 16 x 2 und 8 bis 1 gefiltert wird, werden Bits verschwendet, da der Komprimierungsblock immer ein 4 x 4-4-Texelblock ist. Nicht verwendete Teile des Blocks werden aufgefüllt.

Obwohl es auf den niedrigsten Ebenen verschwendete Bits gibt, ist der Gesamtgewinn immer noch signifikant. Im schlimmsten Fall handelt es sich theoretisch um eine 2K-1-Textur (2 vorgangsstärke). Hier wird nur eine einzelne Pixelzeile 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 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. Mit anderen Worten, der Vergleich der nicht signierten ganzzahligen Größe von color_0 und color_1 wird für jeden Block von 16 Texeln eindeutig durchgeführt.

Sobald die 128-Bit-Blöcke verwendet werden, muss der Alphakanal entweder im expliziten (Format BC2) oder im interpolierten Modus (Format BC3) für die gesamte Textur angegeben werden. Wie bei farbe, wenn der interpolierte Modus (Format BC3) ausgewählt wird, können entweder acht interpolierte Alphas oder sechs interpolierte Alpha-Modus auf Blockbasis verwendet werden. Auch hier erfolgt der Größenvergleich von alpha_0 und alpha_1 eindeutig auf Blockbasis.

Direct3D bietet Dienste zum Komprimieren von Oberflächen, die für texturierende 3D-Modelle 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-Alphatexturen

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 zum Codieren von Texturzuordnungen, die komplexere Transparenz aufweisen. In jedem Fall steht ein Block, der die Transparenz beschreibt, dem bereits beschriebenen 64-Bit-Block voraus. Die Transparenz wird entweder als 4x4-Bitmap mit 4 Bit pro Pixel (explizite Codierung) oder mit weniger Bits und linearer Interpolation dargestellt, die analog zur Farbcodierung verwendet wird.

Blockkomprimierung

Blockkomprimierung ist eine verlustbehaftete Texturkomprimierungsmethode zum Verringern der Texturgröße und des Speicherbedarfs, was zu einer Leistungssteigerung führen kann. Eine blockkomprimierte Textur kann kleiner als eine Textur mit 32 Bit pro Farbe sein.

Komprimierte Texturformate

Dieser Abschnitt enthält Informationen zur internen Organisation komprimierter Texturformate. Sie benötigen diese Details nicht für die Verwendung komprimierter Texturen, da Sie Direct3D-Funktionen für die Konvertierung in und aus komprimierten Formaten verwenden können. Diese Informationen sind jedoch hilfreich, wenn Sie direkt mit komprimierten Oberflächendaten arbeiten möchten.

 

Texturen