1998 bescherte uns einige
neue Features wie Bump Mapping, Anisotropic
Filtering und Single-Pass Dual-Texturing.
Ein weiteres hochgelobtes Feature ist
Texturkompression, welche erstmals in
Direct X 6.0 angeboten wurde. Es gibt
verschiedenste Varianten von Texturkompression,
Microsoft lizenzierte für ihr API einen
Algorithmus von S3, genannt S3TC ("S3
Texture Compression"). Ob es S3's lobbying
und der Geldbeutel, oder die technische
Überlegenheit des Verfahrens war, welches
Microsoft überzeugen konnte, entzieht
sich unserer Kenntnis. Der S3-eigene
Chip Savage3D sowie der Savage4 beherrscht
dieses Feature zur Zeit, ATis Rage 128
PRO , Bitboys' Glaze3D und weitere werden
folgen.
Wieso sollten wir uns
für Texturkompression interessieren?
Texturkompression verringert die nötige
Bandbreite und führt dazu, dass mehr
Texturen im lokalen Speicher der Grafikkarte
Platz finden, so dass das lästige Textureswapping
über den AGP oder den PCI-Bus verringert
werden kann
Vor Jahren versuchte man
Texturen klein zu halten, indem man
sie als 8bit-Texturen (=256 Farben),
555 (5 bits pro Grundfarbe) oder 565
(5 bits für Rot und Blau, 6 bit fürs
Grün) speicherte und tiefe Auflösungen
verwendete. All diese Methoden führten
dazu, dass die Qualität der Texturen
recht stark darunter litt. Heute macht
es natürlich nicht viel Sinn, Texturen
mit nur 256 Farben zu verwenden. Mit
diesen Gedanken im Hinterkopf, machten
sich die Ingenieure daran, einen komplexen
Algorithmus zur Texturkompression zu
entwickeln, welchen sie auch relativ
preiswert auf ihre Hardware pflanzen
konnten. Der S3TC kann Texturen mit
entsprechender Hardware in Echtzeit,
d.h. ohne spürbare Leistungseinbusse
komprimieren und dekomprimieren, ähnlich
einem Echtzeit JPEG-De-/Encoder.
Die Funktionsweise
Ein 3D-Chip muss die Textur
zum Rendern in Bitmap-ähnlicher Form,
d.h. Pixel-für-Pixel erhalten. Man kann
den nicht einfach so mit einer JPEG-Textur
füttern. S3TC funktioniert so, dass
die Texturen komprimiert im Speicher
liegen und der Chip sie, bevor er sie
rendert, wieder dekomprimiert. D.h.
das Speicherinterface wird entlastet,
da die grossen Datenmengen nur im Chip
selbst umhergeshippt werden, dort wo
die Bandbreite sowieso praktisch unbegrenzt
zur Verfügung steht.
S3TC
funktioniert folgendermassen. Eine Textur
wird in viele 4x4-Texel aufgeteilt,
wobei jedes dieser Texel mit 2 bits
beschrieben wird, d.h. die 4x4-Matrix
benötigt 32 bits. Zusätzlich wird jeder
Block noch mit 2 16bit - Farben (RGB565)
versehen. Der S3TC-Algorithmus bildet
nun aus diesen beiden Wertegruppen und
zwei weiteren über die ersten Werte
interpolierten Farbwerte eine sogenannte
"Color Look-Up-Table" (CLUT). Diese
CLUT wird dazu verwendet, die richtigen
Farbwerte des jeweiligen Texel in der
Matrix zu bestimmen.Insgesamt benötigen
die 16 Texel der Matrix nun 64 bit,
d.h. durchschnittlich nur 4 bit pro
Pixel. Bei Transparenzeffekten kommen
weitere 64 bits dazu.
Was bringt's?
S3TC verringert die Texturgrösse
ungefähr um 50-80%, je nach Bild.
Die Qualität des komprimierten Bildes
ist für diese Kompressionsrate erstaunlich
gut. Interessant ist zu beobachten,
wielange es in Software dauert, bis
Photoshop das Bild konvertiert hat.
Vielleicht hat S3 absichtlich ein bisschen
ineffizenten Plugin-Code geschrieben.
Einige Quellen vermelden, der Plug-In-Code
sei auf gute Qualität ausgelegt, die
hardwareversion viel mehr auf low-quality
und high-speed. Dann wäre allerdings
der Sinn eines solchen Plug-ins nicht
sehr gross. Mein Versuch mit dem Plug-In
ergab folgendes Ergebnis: Das ursprüngliche
Bild war 901 KB gross. Nach der Kompression
war es noch 201 KB, was einer Reduktion
von 77,7 % entspricht. Ich würde
lügen, wenn ich sagen würde, man merke
keinen Unterschied. Im Gegensatz zum
herkömlichen 8-bit-Modus, wo das Bild
immer noch 302 KB benötigt, ist der
Gesammteindruck allerdings einiges besser.
Wann kommt S3TC zum Einsatz?
Es ist nicht richtig,
das einfach sämtliche DX6-Spiele komprimierte
Texturen verwenden, welche dann der
Software-Encoder bei 3D-Karten ohne
S3TC dekomprimieren muss. DirectX bietet
verschieden Modi an. Normalerweise werden
Texturen einfach geladen, wobei dann
bei der jeweiligen Textur angegeben
werden kann, ob sie komprimiert werden
soll oder nicht. DX6 bietet allerdings
auch die Möglichkeit, automatisch alle
Texturen zu komprimieren. Es kommt also
auf die Entwickler an, welche Möglichkeit
sie nutzen. S3TC kann man auch auf dynamisch
veränderbare Texturen anwenden, allerdings
ist man dabei schon etwas eingeschränkt,
da man an der CLUT rumbasteln muss etc.
Nicht zuletzt benötigt dies eine gute
Kenntnis des Algorithmus.
www.3dconcept.net
zurück