Zum 3DCenter Forum
Inhalt




S3 DeltaChrome vs. XGI Volari

10. Februar 2005 / von Robbitop / Seite 4 von 20


   Die Architekturen  (Forts.)

  Die Textureinheiten

Jede Pipeline verfügt über mindestens eine bilineare TMU. Somit ist eine Texturfilterung von einem Pixel mittels bilinearem Texturfilter in einem Takt möglich. Eine Ausnahme bildet hier der DeltaChrome. Jede Pipeline besitzt eine fast-Tri-TMU. Diese kann unter der Direct3D-API in einem Takt einen trilinear gefilterten Pixel erzeugen. Bei der trilinearen Filterung wird die lineare Interpolation zweier MIP-Maps zur Vermeidung von MIP Banding durchgeführt. Dies kostet eine heutige bilineare TMU, wie sie in fast allen heutigen Renderern enthalten ist, zwei Takte.

Um mit bi-TMUs trilinear filtern zu können, brauchen sie neben der Loopback-Logik auch noch das finale LERP, ansonsten wäre noch ein dritter Takt nötig (ein LERP ist eine Logik für lineare Interpolation, hier beim Filtern natürlich mit 4x SIMD implementiert (für RGBA)).

Im DeltaChrome funktioniert der trilineare Filter etwas anders als sonst. Die zweite MIP-Map, welche zur linearen Interpolation nötig ist, wird statt aus dem lokalen Video Speicher geladen zu werden, "on the fly" generiert. Das kostet Bandbreite. Für zwei bilineare Samples braucht man acht Texel in zwei Takten, für fast-tri werden 16 Texel in einem Takt gebraucht. Wenn zwei parallel geschaltete oder zwei hintereinander "gepipte" bilineare TMUs vorhanden sind, werden acht Texel einem Takt gebraucht.

Wenn der DeltaChrome die MIP-Map "on the fly" berechnet, muss sie die 4 bilinearen Texel der kleineren MIP errechnen. Diese werden beim "mippen" ja aus der Vorgänger-MIP-Map errechnet, in dem jeweils 2x2 (also vier) Texel zu einem Texel gemischt werden. Deshalb muss der DeltaChrome pro Takt pro Texel der kleineren MIP-Map vier Texel aus der Vorgänger-MIP-Map lesen, also 4x4. Darin sind immer auch alle vier Texel enthalten, die man sonst für das erste bilineare Sample gebraucht hätte.

In OpenGL funktioniert das leider nicht, da hier eine feste Formel für trilineare Filterung festgelegt ist, die diese Logik nicht zu erfüllen scheint. Somit kostet trilineare Filterung in Direct3D einen Takt und in OpenGL zwei. OpenGL besteht auf das Laden der zweiten MIP-Map aus dem lokalen Video Speicher.

Die GeForce 5700 verwendet pro Pipeline zwei bilineare TMUs, welche in einem Takt ein trilineares Sample erzeugen können. Die Radeon 9600 besitzt pro Pipeline nur eine bilineare TMU, welche mittels Loop-Back einen trilineares Sample in zwei Takten erzeugen kann. Dafür besitzt sie doppelt so viele Pixelpipelines.

Der Volari V8 besitzt pro Pipeline je zwei bilineare TMUs. Jedoch scheinen diese kein finales LERP zu besitzen. Ein undokumentierter Villagemark-Test attestierte einen Performancegewinn von >100% beim Umschalten von trilinearer Texturfilterung auf bilineare Texturfilterung. In diesem Fall würde ein trilineares Sample drei TMU Zyklen kosten. Es wäre allerdings auch möglich, dass anderswo ein Flaschenhals vorhanden ist.

Hintergrundwissen und tiefere Informationen zum Thema Texturfilterung finden sich zudem hier.

  Die Rasterizer

Eine ROP ist die Abkürzung für Rasterizer Operation Unit. Diese bildet für gewöhnlich das Ende der Pipeline. Sie ist dafür zuständig, Ergebnisse aus der Pipeline in den Speicher zu schreiben, einen Z-Test oder Alphablending (Transparenzeffekt für Texturen) durchzuführen.


  DeltaChrome S8 Radeon 9600 GeForce 5700 Volari V8
Pixel-Pipelines 8 4 2 4
ROPs 8 8 4 8
ROPs/ Pipeline 1 2 2 2

Der DeltaChrome besitzt pro Pixelpipeline eine ROP (insgesamt also acht ROPs). Er kann somit pro Takt acht Farbwerte inklusive Z-Test in den Speicher schreiben oder eine Alphablending-Operation oder eine Stenciloperation durchführen (beide mit je 8 Bit Integergenauigkeit). Die Radeon besitzt pro Pipeline zwei ROPs. Allerdings bringt dies erst bei der Nutzung vom Multisampling Anti-Aliasing einen erkennbaren Vorteil. Der Z-Test zweier Subpixel blockiert eine ROP gewöhnlich einen Takt lang.

Beim Vorhandensein mehrerer ROPs pro Pipeline kommt es also zu weniger Wartetakten. In der Praxis dauert die Berechnung und Filterung eines Pixels mehrere Takte, weshalb ROPs selten zu einem Flaschenhals werden können. Die Radeon 9600 kann also vier Farbwerte inklusive Z-Test in den Framebuffer (Speicherbereich im lokalen Videospeicher) schreiben oder vier Stenciloperationen oder vier Alphablendoperationen durchführen.

Der Volari V8 als auch die GeForce 5700 besitzen weniger Pixelpipelines, als es den Anschein hat. Beide besitzen pro Pipeline eine ALU, welche neben den aritmetischen Operationen alternativ auch zwei Texturoperationen an die TMUs durchschleifen kann. Beide besitzen pro Pixelpipeline zwei ROPs. Diese können über eine aufwändige Verschaltung eine doppelte Anzahl von Pipelines bei Singletexturing ohne Pixelshadereinsatz emulieren. In diesem Falle können doppelt so viele Z-getestete Farbwerte, Stenciloperationen oder Alphablendoperationen pro Takt ausführen. Dies spart Transistoren und bildet die Basis für eine schnellere Abarbeitung von Nebel, welcher mittels Alphablending dargestellt wird.

Der Volari V8 besitzt in Wahrheit nur vier Pixelpipelines, also eine Quadpipeline. Die GeForce 5700 besitzt gar nur 2 Pixelpipelines. In der Praxis ist ein 2*2 Setup kaum schlechter als ein 4*1 Setup für die Füllrate, da bei trilinearer Filterung beide TMUs zusammen geschaltet werden können, um einen trilinear gefilterten Pixel pro Takt zu erzeugen. Weiterhin kommen heutzutage mehrere Texturschichten zum Einsatz, so dass die Filterung eines Texels immer mehrere Takte benötigt.

  Anisotroper Filter

Bei schrägem Blickwinkel auf Texturen ergibt sich eine perspektivische Verzerrung. Durch die Übertragung der Textur auf die Pixel des Bildschirms ergibt sich daraus je nach Blickwinkel und Entfernung eine zunehmende Unschärfe. Der anisotrope (richtungabhängige) Filter mischt je nach AF-Grad und nach Stärke der Verzerrung mehr Samples zur finalen Pixelfarbe. Somit wird das Endergebnis qualitativ besser, kostet jedoch Füllrate (die TMUs werden länger blockiert, um einen Pixel zu filtern).


Karte Filterqualität noAF Filterqualität 8xAF
DeltaChrome
Radeon 9600
GeForce 5700
Volari V8

Die so genannte AF-Blume, aufgenommen im D3D-AF-Tester, zeigt die Filterung von MIP-Maps bei jedem Sichtwinkel. Je weiter die Farben entfernt sind, desto besser ist in diesem Bereich die Filterung und desto schärfer wird in der Realität die Textur.

Beim DeltaChrome sind die TMUs dazu prinzipiell fähig, Texturen mit 16-fachen anisotropen Filter zu behandeln. Es liegt außer bei 45° keine bekannte Winkelabhängigkeit vor. Die GeForce 5700 glänzt mit einem ähnlich guten anisotropen Filter, allerdings nur bis zum achtfachen AF-Grad. Die Radeon filtert bis zu 16- fachen Grad, jedoch stark winkelabhängig. In der Nähe von 22,5° Winkeln bekommen Texturen bei einer solchen Levelgeometrie maximal zweifaches AF. Hier sparte ATI bekanntermaßen an Transistoren, die man anders dringend brauchte. Bei 90° Levelgeometrie (vier Wände im Winkel von 90° zueinander beispielsweise) kommt dies natürlich nicht zum Ausdruck.

Der Volari V8 zeigt hier eine starke Schwäche: Er besitzt keine anisotrope Filterung. Ein einfacher Trick suggeriert das Vorhandensein eines solchen Filters. Es werden lediglich über die Verschiebung des LOD Bias (Level of Detail) die MIP verschoben. Dies bewirkt eine leichte Schärfung der Texturen, jedoch kann es hierbei zu Texturflimmern und anderen Artefakten kommen.

Der DeltaChrome bietet somit eindeutig die qualitätsmäßig beste auf dem Markt verfügbare anisotrope Texturfilterung.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back Weiter / Next

Shortcuts
nach oben