Komprimierte Texturressourcen (Direct3D 9)
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. DXT1 - 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 explizit (Format DXT2 und DXT3) oder interpolierter Modus (Format DXT4 und DXT5) für die gesamte Textur angegeben werden. Wie bei farbe, wenn der interpolierte Modus (Format DXT4 und DXT5) ausgewählt ist, 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.
Informationen sind in den folgenden Themen enthalten.
- Opaque- und 1-Bit-Alpha-Texturen (Direct3D 9)
- Texturen mit Alphakanälen (Direct3D 9)
- komprimierten Texturformate (Direct3D 9)
- Verwenden von komprimierten Texturen (Direct3D 9)
Verwandte Themen