3dfx Voodoo5 6000 Review
21. Januar 2007 / von Raff, Mr. Lolman & robbitop / Seite 3 von 26
Texturfilterung
Was kann man nun bezüglich der Bildqualität von einer Grafikkarte erwarten, deren Featureset schon zur Vorstellung als veraltet angesehen wurde? Tatsächlich ist die Bildqualität mit anderen Grafikkarten derselben Generation nur bedingt vergleichbar - dies ist jedoch nicht unbedingt im negativen Sinn gemeint.
Die Voodoo5 bietet mit den offiziellen Treibern standardmäßig keinen trilinearen Filter, auch wenn die Grafikkarte natürlich dazu in der Lage wäre. Allerdings kann dies ein VSA-100 nur bei Singletexturing in einem Rechenzyklus erledigen. Trotzdem wurde dem Chip die Möglichkeit zur Verfügung gestellt, die scharfen Detailgrad-Übergänge in texturierten Flächen zu mildern. So bieten die Treiber ein Feature namens "Mipmap-Dithering" an, welches die Mipmaps zu 50% mit der nächstkleineren Mipmapstufe überblendet.
Der offensichtliche Nachteil an diesem Modus ist eben das Dithering, welches die überblendeten Teile im Bild mit einer mehr oder minder stark sichtbaren Granularität versieht, die sich selbst nicht durch hohe Supersampling-Modi vollständig ausgleichen lässt. Auf der Haben-Seite verbucht dieser Modus einen niedrigen bis (je nach Anwendung, beispielsweise Quake III Arena) praktisch inexistenten Leistungsverlust bei gleichzeitiger Steigerung der Bildqualität.
Der weitaus interessantere Modus ist eine Art brilinearer Filter, der entsteht, wenn zwei VSA-100 im Supersampling-Modus rechnen und ein Chip das Mipmap-LOD-Bias um -0.5 versetzt. Dies funktioniert nur deswegen, da im Gegensatz zum herkömmlichen Supersampling Anti-Aliasing bei Voodoo5-Karten mehrere Bilder im T-Buffer gleichgewichtet zusammengemischt werden. Als Ergebnis ensteht ein Bild mit 1-Bit-LOD-Fraction, was von der Definition her tatsächlich als trilinearer Filter durchgeht. Wobei man jedoch erwähnen muss, dass 1-Bit-LOD-Fraction auf texturierten Flächen zwar eine deutliche Verbesserung zu einem rein bilinearen Filtering bringt, aber für eine gleichmäßige lineare MIP-Map-Interpolation noch nicht ausreichend ist.
Diese partielle LOD-Verschiebung ist jedoch nur mit SLI Anti-Aliasing möglich. Das heißt, dass eine Voodoo4 4500 nicht in der Lage ist, nach dem "Unum necessarium" Prinzip trilinear zu filtern, da jene Grafikkarte nur einen VSA-100-Chip hat und somit auch nur ein LOD-Bias-Register existiert. Andererseits bedeutet das wiederum, dass eine Voodoo5 6000 statt zwei Bildern mit unterschiedlichem LOD-Bias sogar vier solcher Bilder zusammenrechnen kann. Damit hat man anstatt eines zusätzlichen Mipmap-Übergangs gleich drei solcher Abstufungen mehr, also eine LOD-Fraction von 2 Bit.
Einer konsequenten Nutzung dieses Features stehen jedoch die Treiber im Weg: So hat man bei aktivem Anti-Aliasing diese performancemäßig sehr günstige, aber optisch minimalistische trilineare Filterung zwar mit jedem Originaltreiber, korrekt funktioniert sie aber nur bei einem LOD-Bias von 0.0 oder -1, da Änderungen am LOD-Bias unglücklicherweise nur auf den ersten Grafikchip appliziert werden und der zweite Grafikchip fix mit einem LOD von -0.5 rechnet. Glücklicherweise existiert jedoch ein modifizierter Glide-Treiber, welcher das LOD-Bias auch auf dem zweiten Grafikchip korrekt mit verschiebt.
Manche Leser werden sich schon die Frage gestellt haben, warum man das LOD-Bias überhaupt verschieben sollte, da ja 0.0 dem Optimum entspricht. Die Antwort ist simpel: Während die Konkurrenz ihr Supersampling Anti-Aliasing einfach durch eine interne Erhöhung der Auflösung (Oversampling) mit abschließendem Downsampling realisierte und dabei automatisch auch eine höhere Texturqualität erreichte, entsteht durch die 3dfx-Technik keine automatische Schärfung der Texturen, sondern lediglich eine Überabtastung der Texel. Diese lässt sich nun wunderbar mit einer Verschiebung des Mipmap-LOD-Bias ausgleichen. Theoretisch liegt die maximal mögliche Verschiebung bei -1 pro vier SSAA-Samples.
Praktisch entscheidet dies jedoch der persönliche Geschmack, denn der ideale Kompromiss zwischen maximal möglicher Schärfe und möglichst großer Texturruhe ist bei jedem Spiel woanders zu suchen. In der Praxis hat sich eine LOD-Verschiebung um -0.5 für 2x AA und -1.5 für 4x AA bewährt. Die erste Mipmap-Überblendung entsteht bei 4x Anti-Aliasing somit im Bereich von -2 bis -2.5, was ungefähr einer Schärfe von 4xAF entspricht (natürlich ohne dessen Texturruhe zu erreichen). Durch diese vergleichsweise große Verschiebung von -1.5 wird zwar das Nyquist-/Shannon-Abtasttheorem verletzt, allerdings bezieht sich das ohnehin auf den theoretischen Worstcase in Form von höchstfrequenten Texturen (beispielsweise pixelgroße Schwarz/Weiß-Schachbrettmuster).
So liegt mit vier Supersamples die tatsächlich maximal mögliche Schärfe, bei der man in keinem Fall eine Unterfilterung riskieren muss, nach konservativer Rechenmethode bei 2x AF [ld(n)=x]. Dies gilt jedoch nur bei einem "Ordered-Grid" Anti-Aliasing. Eine weniger konservative Rechenmethode würde neben den tatsächlichen Samplepostionen noch die, im Vergleich zur Basemap zwangsläufig verringerte, Amplitude der Mipmaps mit einbeziehen, was zumindest in dem Bereich, wo schon aus den Mipmaps gesampelt wird, automatisch eine höhere LOD-Verschiebung zulässt. Damit ließe sich zwar auch kein vierfaches "Lehrbuch-AF" errechnen, allerdings war dies in Anbetracht der durchschnittlichen Texturschärfe in den Spielen zu 3dfx-Zeiten oft auch gar nicht notwendig.
Das Streben nach scharfen Texturen fing auch nicht erst mit dem Aufkommen des anisotropen Filters an, im Gegenteil: Schon im Spiel Unreal wurden diverse Kniffe eingesetzt, um damalige Hardwarelimits etwas zu umgehen. Neben dem mittlerweile kaum noch notwendigen Detailtexturing (zusätzliche Texturüberlagerung zur Verbesserung der Nahdarstellung von Oberflächen) und dem heutzutage noch eher einsetzbaren Macrotexturing (zusätzliche Texturüberlagerung zur Verbesserung der Distanzdarstellung von Oberflächen) appliziert die Unreal Engine 1.x in Glide automatisch ein Mipmap-LOD-Bias von -1.5.
Dies bedeutet, dass mit bilinearer Filterung ohne Supersampling Anti-Aliasing bis zu 16 Texel der Basetextur sich ein einziges Bildschirmpixel teilen mussten. Ideal ist ein Verhältnis von 1:1, also kann man praktisch von 16facher Unterfilterung reden. Nach heutiger Bemessung ist das natürlich untragbar, aber 1999 wurde 3dfx für die gute Bildqualität in Unreal Tournament gelobt und ironischerweise hoben sich die 3dfx-Beschleuniger auch performancemäßig ab und gewannen trotz der durch das verschobene Mipmap-LOD-Bias bedingten höheren Rechenlast alle Benchmarks (wobei man fairerweise anmerken muss, dass die Unreal-Engine ziemlich perfekt auf Glide und damit Voodoo-Karten zugeschnitten war).
Anti-Aliasing
Was ist am Anti-Aliasing der Voodoo5 6000 nun so besonders, dass selbst sechs Jahre nach dem Ableben von 3dfx es kein Hersteller geschafft hat, dessen Qualität in allen Belangen zu überbieten?
Durch das Überlagern mehrere Bilder im "T-Buffer" getauften Multisample-Buffer kann man - im Gegensatz zum einfachen, als Oversampling bekannten "Ordered Grid Supersampling Anti-Aliasing" (OGSSAA) - die AA-Samplepositionen innerhalb eines Rasters frei bestimmen. Das Anti-Aliasing entsteht dabei durch eine leichte Verschiebung der Szenerie. Durch dieses "Sparse Grid" werden schon mit zwei Subpixeln (also 2x SGSSAA) sowohl die X- als auch die Y-Achse jeweils doppelt so fein abgetastet, während man bei rechtwinkliger Anordnung der Subpixel (OGSSAA) dafür tatsächlich 2x2 = 4 Subpixel (und gleichermaßen verdoppelten Rechenaufwand) benötigt.
Ein "sparse grid" ist sozusagen eine Sparversion von einem "ordered grid". Allerdings wird dabei sinnvoll gespart: Während sich die Kantenglättungsqualität bei den wichtigsten Winkeln nur unwesentlich verschlechtert, wird erheblich Leistung eingespart. So kann ein 2x OGSSAA prinzipbedingt nur eine Achse höher abtasten und dementsprechend entweder vertikale oder horizontale Winkel glätten. Um mit einem Ordered Grid die Kantenauflösung von 8x SGSSAA zu erreichen, müsste man schon 8x8 (= 64x) OGSSAA einsetzen, was ein guter Indikator dafür ist, dass OGSSAA im Consumermarkt eher ein Checklistenfeature war und nur eingesetzt wurde, um technische Unzulänglichkeiten auszugleichen. So erreichte nVidia die Texturqualität eines 64x OGSSAA schon mit dem 8xAF der GeForce3. Zur weiteren Vertiefung dieses Themas: In einem früheren Artikel unsererseits wird neben den Grundlagen über Anti-Aliasing unter anderem auch auf die Unterschiede zwischen den verschiedenen Masken eingegangen.
3dfx steht mit seiner AA-Methode mittlerweile nicht mehr alleine da. Der R200 (Radeon 8500) sollte ursprünglich ebenfalls Supersampling Anti-Aliasing mit einem rotierten Gitter bieten, schaffte dies jedoch nur in Spielen, die keinen Nebel einsetzten. Aktuell bietet bloß S3 mit 9x SGSSAA einen Modus an, der das 3dfx'sche 8x SGSSAA optisch sogar übertreffen könnte. Jedoch ist dieser praktisch kaum einsetzbar, da im Vollbildmodus die Sampleverteilung scheinbar willkürlich ist, was in einer schlechten Bildqualität resultiert. Überredet man ein Spiel allerdings zum Laufen im Fenstermodus, offenbart sich ein Anti-Aliasing, das dem der Voodoo5 6000 als einziges mindestens ebenbürtig ist.
Natürlich bieten ATI und nVidia mittlerweile effizientere AA-Modi an, jedoch lassen sich relativ problemlos Situationen konstruieren, wo das AAA/TSAA nicht funktioniert (OpenGL) - einmal abgesehen davon, dass durch diese Verfahren sowieso nur Alphatests (Texturen mit binärem Alpha-Wert, also pro Bildpunkt entweder vollständig durchsichtig oder komplett undurchsichtig) geglättet werden. Der neue 8x-MSAA-Modus des G80 bietet zwar auf Polygonkanten eine 8x8-höhere Achsenauflösung, lässt aber andere Bildinhalte komplett unbehandelt, wo bei 3dfx' 8x AA noch acht Super-Samples zum Einsatz kommen.
Am nächsten kam dem 3dfx-8xAA nVidias mit dem NV40 eingeführter (und am G80 aktuell nicht mehr verfügbarer) 16xS-Modus mit aktiviertem TSSAA. Dieser bot auf Alphatests und Polygonkanten genauso wie 3dfx eine jeweils 8fach höhere Achsenauflösung, hatte aber im Gegensatz zu 3dfx' 8xAA nur vier Textursamples anstatt acht (wobei man natürlich mit AF nachhelfen kann). Festzuhalten bleibt auch, dass selbst der "normale" 16xS-Modus (ohne TSAA) nicht einmal 3dfx'sches 4xAA vollständig übertreffen konnte, da er durch den OGSSAA-Anteil Alphatestkanten statt 4x nur 2x so hoch auflösen konnte - bei mehr Rechenaufwand wohlgemerkt!
So blieb bis zum Erscheinen des G70 (und der damit verbundenen Einführung von TSAA, rückwirkend auch auf NV4x-Chips) Bildqualitätsfetischisten nur die Möglichkeit, auf sehr ineffizientes 16x OGSSAA zurückzugreifen, welches genau wie 3dfx' 4xAA eine EER von 4x4 auf das gesamte Bild bietet. Dies jedoch kombiniert mit dem Vorteil, dass immerhin 16 Textursamples anstatt vier zum Einsatz kommen, was in Anbetracht der akzeptablen Texturfilterung unter der HighQuality-Treibereinstellung ohnehin Verschwendung gewesen wäre. Und natürlich abgesehen davon, dass bei diesem Modus etwa 94% der verfügbaren Füllrate allein für das Antialiasing benötigt wurden, was eine GeForce 6800 GT ungefähr auf das Leistungsniveau einer Voodoo4 4500 herunterdrückte (350 zu 333 MTexel/s). Interessant ist hierbei, dass eine Voodoo5 6000 (bei 166 MHz Takt) mit 4x SGSSAA ebenfalls genau der Rohleistung einer Voodoo4 4500 ohne Anti-Aliasing entspricht.