Zum 3DCenter Forum
Inhalt




GeForce-S3TC-Probleme in Q3A gelöst?

26. Oktober 2000 / von Leonidas / Seite 1 von 3


Das Problem dürfte den meisten GeForce-Besitzern bekannt sein: Mit dem Aufkommen der 5er Treiber wurde auf einmal S3TC unter Q3A aktiviert. Alle Q3A-Versionen (außer 1.25) erkennen automatisch eine S3TC-fähige Grafikkarte (Savage4, Savage2000, Radeon, Voodoo5, GeForce-Serie) und wenden in Folge dessen auf alle einzuladenden Texturen die S3-Texturenkomprimierung an.

Schon in dieser Anfangszeit vor einem halben Jahr gab es die ersten, welche die Komprimierungsverluste nicht hinnehmen wollten und S3TC in Q3A mittels des Konsolenkommandos r_ext_compress_textures 0 ausschalteten (heißt ab 1.25 "r_ext_compressed_textures"). Denn insbesondere die Qualität des Q3A-Himmels entsprach mit S3TC sicher keinem HighQuality-Sky mehr. Da konnte man einstellen, was man wollte - das Problem lag an S3TC und war nur durch das Ausschalten dieselbigen zu lösen.

Quake ]I[ Arena

Q3A ohne S3TC
ohne S3TC
  Q3A mit S3TC
mit S3TC

Ein entgegengesetztes Problem bildetet damals allerdings die Geschwindigkeit ohne S3TC - bei Nutzung der maximal möglichen visuellen Optionen (besonders wichtig: Texture Detail auf 4/4). Denn dann konnte es in einigen Sequenzem zu dramatischen Framerate-Einbrüchen kommen, die Timedemos Quaver und Annihilator bestätigten das mit durchschnittlich einstelligen Frameraten. S3TC war seinerzeit sogar durchaus notwendig, wenn man unter 32 Bit und maximalen visuellen Einstellungen auf der GeForce spielte.

nVidia hatte seinerzeit einfach ein Problem mit dem AGP-Treiber - dieser nutze die AGP-Funktionalität des Texturenauslagerns in den Hauptspeicher und den schnellen Zugriff darauf nicht zufriedenstellend. Mit späteren Treibern konnte nVidia das AGP-Problem dann lösen - wie wir nachweisen konnten. Natürlich war die Variante mit eingeschaltetem S3TC durchaus immer noch schneller als ohne S3TC und so stellte sich bis jetzt immer die Frage: Maximale Bildqualität + weniger Speed oder weniger Bildqualität + maximaler Speed?

Erschwerend kommt nun hinzu, daß wir mittlerweile über die auch S3TC-unterstützenden Karten Radeon und Voodoo5 wissen, daß diese nicht die bekannten GeForce-S3TC-Probleme haben. Sicher auch diese Erkenntnis hat den russischen Programmierer Alexey Nicolaychuk dazu bewogen, tiefer zu graben und eine Lösung für dieses GeForce-only Problem zu suchen.

Bekanntermaßen wurde er fündig und so fanden nun nacheinander S3TC-Fixes für Q3A 1.16 bis 1.25 in Form einer modifizierten "quake3.exe" zu uns, bis er kürzlich die Sache rund machte und das Programm S3TC Fix veröffentlichte. Mit diesem kann man die bewußten Änderungen selber nach Wunsch vornehmen, und dies sowohl für Quake III Arena als auch für Soldier of Fortune - zusätzlich gibt es ein "freies" Modul für weitere Spiele (Star Trek Voyager: Elite Force, Heavy Metal FAKK2 und folgende Titel mit Q3A-Engine).

Ich werde mich im nachfolgenden rein mit Q3A beschäftigen: SoF profitiert fast kaum von S3TC (zwischen 2 und 5 Prozent), bei FAKK2 ist S3TC standardmäßig ausgeschaltet, Elite Force kann ich momentan nicht beurteilen, da es ich es nicht besitze. Wirklich wichtig ist die Sache aber doch rein bei einem gespielten MultiPlayer-Spiel - ob man ein SinglePlayer-Spiel mit 10 Prozent weniger fps durchzockt, spielt bei einer GeForce als Grafikkarte eigentlich kaum eine große Rolle. Und um eine entscheidende und meistens kaum beachtete Frage vorwegzunehmen: Die nachfolgenden Hacks ergeben weiterhin ein pures Q3A, kein Server wird einen wegen dieser Modifizierungen zurückweisen.


Zum Geschäft: Vorgenanntes Programm S3TC Fix hat im Gegensatz zu dem umherkreisenden gepatchten "quake3.exe" mehr als eine Möglichkeit. Will sagen: Man kann sich seine eigene Texturenkompression für jedes einzelne Spiel extra einstellen. S3TC kann zwar nur einen Alghorithmus gleichzeitig anwenden, besitzt aber noch wesentlich mehr mögliche Alghorithmen. In Q3A kam nun (standardmäßig) mit DXT1 eines der schlechtesten Verfahren zur Anwendung, deswegen auch die schlechte optische Qualität.

Dies ist dann auch die Ausgangsgrundlage aller Hacks der Texturenkompression in Q3A: Man versucht, Q3A zu einem besseren Alghorithmus zu zwingen. In den modfizierten "quake3.exe" für die verschiedensten Q3A-Versionen setzt man anstatt DXT1 das bessere Verfahren DXT3 ein. S3TC Fix hat da vier Möglichkeiten zu bieten, wie man seine "quake3.exe" patchen könnte:

S3TC Fix

Einige Zeit verbrauchte ich zuerst einmal dazu, herauszufinden, was sich hinter diesen Abkürzungen verbirgt. Einfach waren die zweite (markierte) und die vierte Möglichkeit: RGB4 ist die default-Einstellung DXT1+Alpha in Q3A. RGBA4 ist das in den Hacks verwendete DXT3. Die anderen waren wesentlich schwieriger herauszufinden, dazu war ein kleiner Exkurs über die verschiedenen S3TC-Alghorithmen notwendig. Fündig wurde ich beim OpenGL-"Erfinder": SGI sowie bei Reactor Critical:

COMPRESSED_RGB_S3TC_DXT1_EXT 6:1 Komprimierung, Transparenz-Texturen nicht möglich
COMPRESSED_RGBA_S3TC_DXT1_EXT 6:1 Komprimierung, nur 1-bittige Transparenz-Texturen möglich
COMPRESSED_RGBA_S3TC_DXT5_EXT 4:1 Komprimierung, Alpha-Channel wird komprimiert (3 Bits), Transparenz-Texturen möglich
COMPRESSED_RGBA_S3TC_DXT3_EXT 4:1 Komprimierung, Alpha-Channel wird nicht komprimiert (4 Bits), Transparenz-Texturen möglich

Ok, da wir DXT1+Alpha und DXT3 schon zuordnen können, muss folgerichtig die erste Option von S3TC Fix, sprich RGB, nun DXT1 ohne Transparenz-Texturen bedeuten. Übrig bleibt RGBA - dies sollte dann DXT5 darstellen. Nachfolgende Benchmarks werden diese Zuordnung noch einmal bestätigen.

Damit ist auch klar, warum die die Q3A-Standardeinstellung DXT1+Alpha (RGB4) den Himmel so katastrophal aussehen lässt - man hat ja nur ein kümmerliches Transparenz-Bit zur Verfügung! Genauso wäre festzustellen, daß DXT3 (RGBA4) die höchste Qualität zu bieten hat - auch wenn sich DXT5 (RGBA) erst einmal nach mehr anhört. Rein Code-technisch ist dies im übrigen ähnlich verworren: DXT3 ergibt a3 83 00 00 und DXT5 den niedrigeren Wert a2 83 00 00 - aber das nur am Rande.

Denn nach dem wir erst einmal wissen, was hier was ist, schreiten wir zum einzig wichtigen Teil - den Benchmarks ...






weiter    

Shortcuts
nach oben