Kolumne: Lasst die Hände von der anisotropen Filterung
20. Dezember 2004 / von aths / Seite 1 von 1
Es gibt Dinge, die sind objektivierbar. So ist es objektiv Unsinn, die anisotrope Filterung winkelabhängig zu machen und damit deren Qualität zu senken. Wer der Meinung ist, dass man aber nur so die gewünschte Leistung erreichen könne, hat leider nicht zuende gedacht.
I
Das primäre Verfahren, die Bildqualität zu steigern ist in vielen Köpfen noch immer, die Auflösung zu erhöhen. Was hat man davon? Durch kleinere Pixel wird erreicht, dass es auf gleicher Fläche nun mehr Pixel gibt als früher. Entsprechend lassen sich auf dieser Fläche mehr Informationen unterbringen. Die Fähigkeit, mehr Informationen darzustellen, steigt also. Allerdings mit quadratischem Aufwand: Um die Pixelseitenkante zu halbieren, muss man insgesamt viermal so viele Pixel berechnen.
Anisotrope Filterung (AF) sampelt, wenn erforderlich, zusätzliche Texturwerte, um in das Pixel mehr Textur-Informationen zu packen. Dabei ist jede AF-Implementierung adaptiv: Bei einem Textur-Verzerrungsverhältnis von z. B. 1:3 ist es nicht sinnvoll, mehr als drei Samples zu nehmen. Aus Gründen der Vereinfachung können die meisten Grafikkarten nur mit geradzahligen Verhältnissen (1:2, 1:4 etc.) umgehen.
In diesem Falle müsste man also 4 isotrop gefilterte Samples pro Pixel erzeugen. Um einen vergleichbaren Effekt via erhöhter Auflösung zu erreichen, wären allerdings 3x3 = 9 Subpixel pro Pixel erforderlich, und zwar mit dem aufwändigen Supersampling-Verfahren. Obwohl wir bei unserem AF-Beispiel mit dem 1:3-Verzerrungs-Verhältnis Zusatzarbeit leisten, die nicht mehr zur Qualität beiträgt, ist das AF-Verfahren trotzdem viel "kostengünstiger". Denn die Auflösungserhöhung erfordert in jedem Fall Rechenleistung, die zur Qualität so gut wie nichts mehr beiträgt.
Der Trick beim AF ist ja gerade die Anisotropie. AF filtert aus den Texturen im richtigen Winkel, die einzelnen isotropen Samples werden auf der so genannten "Line of Anisotropy" wie an einer Perlenschnur aufgereiht. Man stelle sich vor, dass man in einem 3D-Spiel auf den Boden sieht: Von der Boden-Textur, die man "hinten" sieht, braucht man für volle Texturschärfe eher die vertikalen als die horizontalen Informationen. AF sorgt hier also für ein vertikales "Textur-Supersampling on the fly".
Erhöht man die Auflösung, wird vertikal und horizontal höher abgetastet – was die Qualität aber (fast) gar nicht mehr steigert. Die Wand-Textur hingegen braucht eher in der horizontalen die zusätzlichen Informationen, so dass das AF nur in diese Richtung zusätzliche Samples für das Pixel erzeugt. Um mit AF bessere Texturqualität zu erzeugen, steigt der Aufwand lediglich linear, der Weg über die Auflösung ist mit quadratischem Aufwand verbunden und damit ungünstig. Was das in der Praxis heißt, soll mit dem nachfolgenden Bild kurz angerissen werden:
Der genutzte AF-Grad ist rot dargestellt, der Aufwand für einen vergleichbaren Texturverbesserungseffekt grün, der Unterschied blau.
Diese Grafik geht davon aus, dass die Grafikkarte nur diese AF-Grade beherrscht, die man einstellen kann (1x, 2x, 4x, 8x, 16), jene aber perfekt anwendet. Tatsächlich können alle relevanten Chips intern auch Zwischenstufen berechnet, was das Verhältnis weiter zugunsten vom AF verschiebt. Allerdings gibt es derzeit keinen Chip, der ab 4x noch völlig korrektes AF anbietet.
II
Hat man mehr Pixel, kann man, und da gibt es keine Diskussion, eben mehr Informationen darstellen. Die Möglichkeit, mehr Informationen anzuzeigen, steigt. Aber wie viele Informationen dann im einzelnen Pixel tatsächlich stecken, ist eine andere Frage. Betrachtet man eine gegebene Leistung und verbessert die Texturdarstellung mit AF, hat man auf gleicher Bildschirmfläche mehr Informationen, als ginge man nur über die Auflösungssteigerung.
Die Auflösung auf beiden Achsen zu verdoppeln kostet 4x die Leistung, und bringt für die Texturen einen Effekt, der 2x AF sehr ähnlich ist. Mit dieser Leistung ist aber immer 4x AF möglich, aufgrund der ansgesprochenen Adaptivität werden einige Pixel auch nur 2x AF abbekommen, andere Pixel vermutlich gar kein AF – 4x AF zuzuschalten kostet auch in Grafikkarten-limitierten Spielen nicht die vierfache Leistung.
Wir sehen schon, dass die AF-Leistung völlig falsch eingeschätzt wird. Opfert man mit 8x AF 50% der Leistung, wird das schon als "schlecht" angesehen – in Wahrheit ist das gut. Sollte 8x AF nur 30% an Leistung kosten, wäre dies in grafikkartenlimitierten Szenen nur darüber zu realisieren, das tatsächlich nur wenige Pixel verbessert werden.
Im gleichen Zuge ist mir auch nicht verständlich, warum mit den Augen gerollt wird, wenn z. B. 4x Antialiasing gut und gerne 40% Leistung frisst. Um einen "4x sparsed"-Antialiasing vergleichbaren Effekt via Auflösungssteigerung zu bekommen, müsste man 16x so viele Pixel rendern. Bildqualität gibt es nicht umsonst, und trotz erheblichen Leistungseinbußen fährt man noch besser, als müsste man die Auflösung erhöhen. Dies würde in jedem Fall noch mehr Leistung kosten, und dabei weniger Zusatzqualität pro aufgebotener Zusatzleistung bieten.
Man sieht: Ist erst einmal eine angenehme Auflösung erreicht, die nicht "grob" wirkt, sollte jede weitere Bildqualitätssteigerung über Antialiasing und AF erfolgen – es bringt anbetrachts der aufgewendeten Leistung einfach mehr. Die älteren GeForce-Karten (bis einschließlich der kompletten FX-Serie) beherrschen hardwareseitig quasi-perfektes AF. Der Lohn war, dass sie dafür harsch kritisiert wurden, wie viel Leistung dies doch verbrauchen würde. Dass das nur deshalb so viel Leistung kostet, weil diese auch in Qualität umgesetzt wird (Ausnahme bilineares AF auf GeForce4 Ti, hier gibt es ein Leistungsproblem), wurde einfach nicht zur Kenntnis genommen. Als Dankeschön beglückte uns Nvidia beim NV40 jetzt mit ATI-mäßigen AF-"Optimierung".
Das kann selbst S3 besser: Dieser wenig beachtete Hersteller macht vor, dass man bis 16x sehr gutes AF haben kann – die S3-Grafikchips kranken allerdings an anderen Nachteilen (von denen viele treiberseitig bedingt sind). Doch der im Gamermarkt weitgehend irrelevante DeltaChrome, ein recht kleiner Chip bestehend aus höchstens 80 Millionen Transistoren, zeigt, dass exzellentes AF möglich ist. Aber ATI (160 Millionen Transistoren) und Nvidia (222 Millionen Transistoren) kriegen das nicht hin.
Manche bleiben stur dabei, dass primär die höhere Auflösung zum besseren Bild beitragen würde. Angesichts begrenzter Texturauflösung führt eine zu hohe Bildschirmauflösung aber nicht zu erhöhtem, sondern gesenktem Realismus: Vordergrund-Bereiche zeigen vergrößerte Texturen, also wenig Details, während im Hintergrund noch superfeine Strukturen erkennbar sind – in der Realität ist es ja genau umgekehrt.
In diesem Zuge sind 1600x1200-Benches eher denn Blödsinn, sofern dafür nicht auch mindestens 2048er (eigentlich noch deutlich bessere) Texturen von den Spiel-Programmierern zur Verfügung gestellt wurden. Tatsächlich aber können die Radeon-Karten maximal 2048er Texturen nutzen, und die GeForce-Karten büßen bei größeren Texturen deutlich an Leistung ein. Entgegen dem Werbe-Gewäsch sind diese Karten also eigentlich nicht für den echten Genuss in 1600x1200 gebaut. Sondern, um in dieser für Spieler kaum relevanten, aber prestigeträchtigen Auflösung Benchmarks zu gewinnen.
III
Hat man einen hoch winkelabhängig "optimierten" AF-Algorithmus, und zieht daraus die Leistung, dann nur, weil viele Pixel nur wenig verbessert werden. Spielt man ein Spiel, welches eine Architektur zeigt, die vorwiegend rechtwinklig ist, womit praktisch alle Flächen voll verbessert werden, steigt auch die Leistung weniger. In jedem Falle ist es sinnvoller, einen adaptiven, aber ansonsten "unoptimierten" AF-Algorithmus zu haben.
Denn es ist nicht realistisch, dass eine texturierte Fläche je nach Drehwinkel um die Z-Achse ihren Detailgrad ändert, oder dass in einem Tunnel nur 90°- und 45°-Winkel volle Details zeigen. Dies ist ein Teufelskreis: Gerade weil die heute in freier Wildbahn anzutreffenden AF-Modi nicht besonders toll sind, lohnt die hochgradig ineffiziente Auflösungssteigerung im Verhältnis wieder etwas mehr.
Leider versteifen sich ATI und Nvidia darauf, dass ihre Karten unbedingt in 1600x1200 gebencht werden müssen, ansonsten könnten sie ihre ach so überragende Leistung nicht zeigen. Damit die Chips in dieser Auflösung tatsächlich schnell sind, wird weiter am AF "optimiert". So werden bei den isotropen Samples keine trilinearen, sondern nur noch "brilinear" gefilterte genommen. Und es wird untersampelt: Bei einem Verzerrungsverhältnis von z. B. 1:12 werden vielleicht nur 10 Samples erzeugt (die genaue Methode ist leider unbekannt).
Unterabtastung führt jedoch immer zu Fehlern - und die Texturfilterung wurde erfunden, um eben jene Fehler zu vermeiden. AF-"Optimierung" per Unterfilterung führt somit den Daseinszweck von Filterung ad absurdum. Die Folge: Flimmrige Texturen, und dies, wo die neue Karte gerade einige hundert Euro gekostet hat.
Ein reine Idiotie: Der Kunde sieht, wie toll die Karte noch in 1600x1200 performt, obwohl die wenigstens einen Monitor besitzen, welcher diese Auflösung augenschonend und ohne die Lochmaske dabei zu überfahren darstellen kann. Damit die neue Grafikkarte unter 1600x1200 noch so gut performt, wird jedoch die AF-Qualität gesenkt. Dabei verliert man mehr Qualität, als Leistung gespart wird - die Leistung wird jedoch dringend benötigt, weil der unsinnige Weg über die Auflösung mit quadratisch steigendem Aufwand verbunden ist. Sinnvoller wäre, übliche Auflösungen zu nehmen und dort quasi-perfektes AF anzubieten. Das Bild sähe dann insgesamt besser aus, da die Leistung effizienter umgesetzt wird.
Nun muss man allerdings auch wissen, dass die Berechnung der schon erwähnten "Line of Anisotropy" mathematisch anspruchsvoll ist. Schaltkreise, die hier mathematisch völlig korrekte Ergebnisse liefern, würden sehr viele Transistoren verbrauchen. Deshalb kann man es in Kauf nehmen, wenn 8x oder 16x AF in bestimmten Bereichen, also bei bestimmten Winkeln, auf der ersten MIP-Textur nicht voll appliziert werden.
Heutzutage sieht es aber so aus, dass man 16x AF einstellt und teilweise nur 2x bekommt. Das gilt für ATI wie für Nvidias neue Chips leider gleichermaßen. Und das ist absolut lächerlich, den Kunden mit Billig-AF abzuspeisen, nur damit die XT-PE- und Ultra-Chips, die sich kaum einer kauft, in Auflösungen glänzen, die kaum einer nutzt.