Zum 3DCenter Forum
Inhalt




Warum liegt die Radeon X800 Serie unter Doom 3 zurück?

30. Juli 2004 / von aths / Seite 1 von 1


Vorweg sei gesagt, dass dieser Artikel voraussetzt, dass die auf HardOCP veröffentlichten Benchmarks von id Software repräsentativ sind. Obwohl es im Moment nur diese eine Quelle gibt, sehen wir keinen Grund, ihre Aussagekraft anzuzweifeln. Leider werden die Benchmark-Ergebnisse von den einen unreflektiert zur Werbung ausgeschlachtet, wie von den anderen kleingeredet.

Doch man kann es drehen und wenden, wie man will: Die GeForce 6800 Serie liegt etwa 20 - 25% vorne. Das ist signifikant: Taktnormalisiert zeigt sich, dass der NV40-Chip grob 50% mehr Arbeit verrichtet als der R420-Chip.

Zunächst scheint das gute Abschneiden der GeForce 6800 Serie nicht in das bisher gewohnte Bild zu passen: Überall, wo moderne Engines zum Einsatz kommen, schnitten die Radeon 9800 /Pro/XT Grafikkarten deutlich besser als die GeForceFX 5900/5950 Grafikkarten ab. Mit der neuen Generation (X800 vs. 6800) wird das Bild ausgeglichener, die GeForce 6800 Serie kann in einigen Spielen ihren Stärken ausspielen, ohne sich jedoch deutlich abzusetzen. In anderen Spielen bleibt es dabei, dass Spitzenleistung aus dem Hause ATI kommt. Doom 3 ist jetzt der "Ausreißer" aus diesem bekannten Bild.


   Woran liegt es?

Die erste Idee wäre also, dass John Carmack besonders gut auf GeForce-Karten und insbesondere auf die GeForce 6800 Serie optimiert hat und das Potenzial der Radeons dabei nicht ausschöpfte. Dies ist jedoch objektiv falsch. Wie wir noch sehen werden, hat John Carmack eine Glanzleistung vollbracht, was die Optimierung auf Radeon-Karten angeht.

Die zweite Idee wäre, dass Features, die es nur auf modernen GeForce-Karten gibt, wie z. B. Ultra Shadow (ab NV35), für die Leistung verantwortlich ist. Als drittes könnte man vermuten, dass die NV40-Shaderleistung zum Tragen kommt. Beides sind aber höchstens Nebeneffekte: Ultra Shadow entlastet die Pixeleinheiten, die jedoch gegenüber Radeon-Karten langsamer getaktet sind. Shadertechnisch ist Doom 3 – auf Hardware der DirectX9-Klasse bezogen – eher anspruchslos: Schon die Radeon 8500 (DirectX 8.1) kann für ein Pixel eine Lichtquelle in einem Pass berechnen, jede Hardware der DirectX9-Klasse (mit vernünftigen OpenGL-Treibern) erst recht (da die Doom 3 Engine OpenGL nutzt, wird ein Vergleich mit DirectX-Techleveln natürlich immer mehr oder weniger hinken).

Multipasslösungen verringern die Qualität (da zwischendurch auf die niedrige Framebuffer-Genauigkeit gerundet wird) und die Leistung (da zusätzliche Schreib- und Lesezyklen zum den Grafikkarten-RAM anfallen). Nur GeForce1 bis GeForce4 Ti werden somit zum Multipass für eine Lichtberechnung gezwungen (Doom 3 berechnet ja auch Schatten, ein komplettes Frame braucht immer mehr als einen Pass, dies belastet CPU und Bandbreite). Die höhere arithmetische Pixelshader-Leistung bei der GeForce 6800 Serie kommt vor allem bei langen Shadern zum tragen, jedoch wird man solche Shader in Doom 3 vergeblich suchen. Was die GeForce 6800 Serie durch höhere Pro-Takt-Leistung herausholt, dürfte im Falle Doom 3 die Radeon X800 Serie durch ihren höheren Takt ausgleichen.

Wir formulieren bewusst so unscharf, da noch keine detaillierten Analyse-Benchmarkergebnisse vorliegen. Uns geht es heute um das "große Bild", Irrtümer im Detail möge man uns nachsehen. Doch eines zeichnet sich schon jetzt deutlich ab: Der Hauptvorteil der GeForce 6800 Serie bei Doom 3 besteht darin, die Shaderleistung dort einzusetzen, wo man sie braucht. Das hat im Falle von Doom allerdings nichts mit dem Shader Model 3.0 zu tun.

Doom rendert erst den Z-Buffer, damit die Tiefeninformationen schon vorhanden sind, bevor die Farbe gerendert wird. Für korrekte Schattenberechnungen à la Doom 3 ist das ohnehin notwendig. Moderne Karten können dank Early-Z mit dem fertigen Z-Buffer viele unsichtbare Pixel vom Rendern ausschließen, und somit die Leistungsverschwendung durch (unvermeidlichen) Overdraw begrenzen.

Der NV40-Chip testet, wie jede GeForce-Karte ab der GeForce3, immer ganze Quads auf Sichtbarkeit, bevor das Quad in die Pipeline geht (oder eben nicht). Ein Quad ist ein Block von 2x2 Pixeln. GeForce3 bis GeForceFX können pro Takt bis zu 4 Quads (also 16 Pixel) verwerfen. Die GeForce 6800 Serie schafft hier immerhin 16 Quads pro Takt, also 64 Pixel. Das hört sich viel an, kann eine Radeon 9700 aber schon lange. Radeon-Karten nutzen einen hierarchischen Test: Zunächst werden sehr große Kacheln getestet (mit einer Fläche von 8x8 Pixeln). Wird eine solche Kachel nicht komplett verworfen, wird sie in vier 4x4 Pixel große Kacheln unterteilt, am Ende stehen auch bei den Radeon-Karten Quads. Der R420/423-Chip kann damit bis zu 256 Pixel pro Takt verwerfen. Das ist (soweit wir wissen) Rekord.

Halten wir fest: Radeon-Karten haben einerseits eine überlegene Early-Z-Occlusion-Leistung. Auf der anderen Seite ist der Radeon-Mechanismus aber auch anfälliger. Für Doom 3 sind Radeon-Karten nicht ausgelegt: Bei Z-Tests nach der Doom 3 Methode funktioniert Hierarchical Z nicht immer, dann können nur noch auf Quad-Ebene Pixel verworfen werfen. Mit 4x-Antialiasing sinkt die Leistung weiter, während die GeForce FX/6 ungeachtet des AA-Modus mit gleicher Effizienz Pixel verwerfen kann.

Lange Rede, kurzer Sinn: In jedem Spiel müssen beide Karten Berechnungen ausführen, die nicht sichtbar sind: Pixel werden im Laufe des Rendervorganges wieder übermalt. Da der Wechsel von Texturen viel Zeit kostet und eine Vorsortierung der Objekte sehr CPU-lastig ist, rendert Doom 3 (wie jedes Spiel) mit einem Overdrawfaktor von über 2: Insgesamt werden mehr als doppelt so viele Pixel berechnet, wie man am Ende sieht, da vieles übermalt wird. Da in Doom 3 der Z-Buffer schon fertig ist, bevor der Color-Pass begonnen wird, können die meisten unsichtbaren Pixel aber verworfen werden, wenn Early-Z-Occlusion unterstützt wird. Wer unsichtbare Pixel möglichst schnell aussortieren kann, gewinnt. Der eigentlich geringeren Early-Z-Grundleistung der GeForce 6800 Serie steht ein "stabiles" Funktionieren gegenüber: Auch bei eher unüblichen Z-Tests à la Doom 3 bleibt die Leistung erhalten.


   Schnelles Wegwerfen entscheidet

Gehen wir etwas tiefer ins Detail: Doom 3 erstellt zunächst den Z-Buffer, wobei der Z-Test als "erfolgreich" angesehen wird, wenn der zu vergleichende Wert kleiner ist als der Wert, der bereits im Z-Buffer steht. Bei dem Pass, der die Schatten berechnet, ist der Test "erfolgreich", wenn der neue Wert größer ist als der alte. HyperZ funktioniert aber nur dann, wenn sich die Art, Z zu testen, nicht mitten im Frame geändert wird. Immerhin, jede Radeon-Quad-Pipeline kann weiterhin ein Quad ablehnen, wenn der Z-Test für das gesamte Quad ergibt, dass nichts vom Quad gerendert werden muss. Die 16 Pipelines des R420/423-Chips sind vier Quadpipes, so dass pro Takt maximal 4 Quads, sprich 16 Pixel, abgelehnt werden können.

Das schafft aber eine GeForce-Karte ab GeForce3 auch schon, obwohl GeForce-Karten bis einschließlich der GeForceFX 5950 Ultra gerade einmal eine einzige Quadpipeline haben. Early-Z wird bei GeForce-Chips vor den Pipelines gemacht. Die GeForce 6800 Serie kann nun sogar 16 Quads pro Takt verwerfen, also 64 Pixel. Im "Nichtrechnen" ist der NV40-Chip unter Doom 3 demnach viermal schneller als ein R420/R423-Chip. Sofern aber die Z-Test-Methode nicht mitten im Rendervorgang geändert wird, kann der R420/R423-Chip sein HyperZ nutzen und bis zu vier 8x8-Kacheln (also bis zu 256 Pixel) pro Takt aussortieren.

Eine Radeon X800 Pro mit nur drei Quad-Pipelines (also 12 Pixelpipes) kann in den Doom 3 Rechenpasses, in denen HierZ nicht funktioniert, pro Takt nur 12 Pixel verwerfen. Zusätzlich macht der Karte zu schaffen, dass der R420/R423-Chip zwar so gebaut wurde, dass einzelne Quadpipes deaktivierbar sind, der Speichercontroller scheint jedoch für vier Quads pro Takt optimiert (dies ist derzeit als Theorie zu betrachten, erst genaue Tests, am besten mit optimierten Treibern, können diese Frage klären).

Ab 4x Antialiasing leiden die Radeon-Karten darunter, dass Z-Cull und Stencil-Cull an die ROP-Logik gebunden sind. Konkret heißt das, die Culling- (Wegschneide-) Leistung sinkt. Stencil-Cull erlaubt, die Lichtberechnungen zu sparen, sofern das Quad im Schatten liegt. Mindestens ab dem NV40-Chip, wahrscheinlich schon ab dem NV35-Chip, wird bei GeForce-Karten auch dies vor den Pixel-Pipelines gemacht und ist damit unabhängig vom Antialiasing-Modus.

Anders die GeForce 6800 mit 12 Pipelines: Weil beim NV40-Design die ROPs-Einheiten nicht an die Pixel-Pipelines gebunden sind (sondern via Crossbar-Controller zugewiesen werden können), könnte diese Karte weiterhin mit 16 ROPs betrieben werden – was auch tatsächlich gemacht wird. Trotz aktiviertem 4x-Antialiasing kann die GeForce 6800 pro Takt noch bis zu 8 Pixel auf Z/Stencil testen (die Radeon X800 Pro mit 12 Pipelines schafft höchstens 6 Pixel).


   NV40: Bessere ROP-Auslastung in Doom 3

Das gesagte gilt für den Schatten-Pass. Während der Licht-Berechnung funktioniert Hierarchical Z natürlich. Hier verwirft die Radeon-Hardware sogar mehr als die GeForce-Hardware. Allerdings kommt es beim Color-Pass vor allem darauf an, die unsichtbaren Quads gar nicht erst in die Pipelines zu lassen. Doch ob das Verwerfen nun schnell oder langsam ist, ist nebensächlich, da die Farb-Berechnung viele Takte braucht. Nehmen wir einmal an (die Zahl ist jetzt aus der Luft gegriffen), eine Farbe zu bestimmen würde 16 Takte benötigen. Dann sorgt schnelles oder bis zu viermal langsames Verwerfen zum Beispiel für durchschnittlich 17 bzw. 20 Takte. Der relative Unterschied ist gering. Nicht zu vergessen, dass der NV40-Chip dank flexibleren Pipelines und mächtigeren Hardware-Instruktionen pro Takt mehr rechnen kann, als der R420-Chip (so dass ein Color-Pass pro Quad entsprechend weniger Takte braucht).

Bei den Z- und Stencil-Tests während des Shadow-Passes ist die Lage nun so, dass diese Tests sehr schnell sind, es aber ebenfalls jede Menge wegzuwerfen gibt. Wer hier beim Aussortieren unsichtbarer Pixel lahmt, hält den gesamten Render-Prozess auf. Oder andersherum, nur wer dank spezieller Optimierungen so schnell wie möglich das Unsichtbare herausschneidet, kann seine Z/Stencil-Einheiten auch komplett auslasten.

Nvidia hat sich außerdem einiges einfallen lassen, um aus einer begrenzten Transistor-Menge so viel Z/Stencil-Power zu machen, wie nur möglich. NV30 und NV35 haben nur eine Quad-Pipe, können pro Takt also bis zu vier Pixel rendern. Um die Füllrate bei aktiviertem Antialiasing nicht völlig einbrechen zu lassen, haben diese Chips pro Pixelpipe zwei ROPs. Mit den 8 ROPs können diese Chips, sofern kein Antialiasing aktiv ist, aber auch 8 Z/Stencil-Tests machen (also 2 Quads pro Takt bearbeiten).

Das schafft eine Radeon 9700 oder 9800 ebenfalls, da sie 8 Pipelines hat. Obwohl auch die Radeon-Hardware pro Pipe über 2 ROPs verfügt, kann die zweite Einheit nur beim Antialiasing genutzt werden. Mit Antialiasing bestünde theoretisch ein Vorteil, was Z/Stencil-Power angeht. Praktisch kann diese in Doom 3 durch die geringe Occlusion-Leistung der Radeon nicht ausgenutzt werden. Beim Color-Pass dauert die Berechnung des Pixels so lange, dass die Latenz, in denen die ROPs mehrere Takte brauchen, ohnehin komplett versteckt werden kann.

Der NV40-Chip hat 16 ROPs, die in 4er Gruppen aufgeteilt sind, und je nach Bedarf den Quad-Pipelines zugeordnet werden können. Besser noch: Beim NV40 kann eine ROP auf die Alphablending-Operation verzichten und dafür einen zweiten Z/Stencil ausführen. Das macht dann 32 Z/Stencil-Tests pro Takt. Sofern Antialiasing aktiv ist, könnte ein R420-Chip das zwar auch anbieten (da 16 Pipelines à 2 ROPs), aber dort drehen die Z/Stencil-Tests beim Doom 3 Schatten-Pass viele Leertakte: Ehe neue (sichtbare) Werte in die Pipeline kommen, sind die ROPs längst leergelaufen. Der NV40-Chip hingegen verwirft die uninteressanten Quads so schnell, dass die Raster-Operationen viel besser ausgelastet werden.


   Fazit

Halten wir abschließend fest: Die theoretisch sehr hohe Culling-Leistung der Radeon-Karten wird durch mehrere Tatsachen geschmälert:

  • Der Hierarchical-Z-Buffer fängt mit sehr großen Tiles an. Dass ganze 8x8-Tiles weggeworfen werden, ist gerade in "Randbereichen" unwahrscheinlich. In praxisnahen Situationen ist die tatsächliche Occlusion-Leistung deutlich unterhalb des theoretischen Maximums anzusieden.

  • Bislang unübliche Renderverfahren, die erfordern, den Z-Test während der Berechung zu ändern, verhindern die Nutzung von Hierarchical Z. Die verbleibende Culling-Leistung der Radeon-Karte ist aber recht gering. Doom 3 nutzt einige Passes, in denen HierZ dann abgeschaltet ist.

  • Mit 4x oder 6x Antialiasing sinkt die ohnehin geringe Cullingleistung bei deaktivertem HierZ auf 50 bzw. 33 Prozent.

All das geht zulasten der Performance der Radeon-Karten. Doom 3 nutzt zwar "nur" Bumpmapping, dies aber exzessiv. Jedes Quad, welches man von der Berechnung ausschließen kann, bringt wertvolle Leistung. Je schneller Quads verworfen werden, desto eher können sich die Pipelines wieder den Berechnungen für sichtbare Pixel widmen. Neuere GeForce-Karten sind dagegen so konstruiert, dieses auch unter Doom 3 Bedingungen ohne Leistungseinbruch zu schaffen. Die ältere GeForce4 Ti kann Early-Z auch bei aktiviertem Antialiasing nutzen (im Gegensatz zur noch älteren GeForce3), weshalb wir stark annehmen, dass man mit einer GeForce4 Ti bei noch guter Grafikqualität in die Doom 3-Welt eintauchen kann.

Die anderen neuen "Doom 3 Features" seitens Nvidia (ab GeForceFX, vor allem ab GeForceFX 5900 aka NV35) sorgen in erster Linie dafür, dass der geringere Takt ausgeglichen wird. Falls die Verkaufsversion erlaubt, gezielt die Nutzung bestimmer Features abzuschalten, werden wir mit Detailtests sehen können, was bestimmte Hardware-Techniken wirklich bringen. Nicht zu vergessen ist der Einfluss der CPU, welche bei Schatten à la Doom 3 extrem gefordert wird: Wer sein System fit für Doom 3 machen möchte, ist unter Umständen besser beraten, die CPU zu upgraden.

Angesichts der Technik der Radeon-Chips, welche so gar nicht zu Doom 3 passt, halten wir es für schon erstaunlich, was John Carmack und id Software da noch an Performance herauskitzeln konnte. Soweit wir das abschätzen können, wird man auch mit einer Radeon 9700 ein sehr schönes Doom 3 Erlebnis haben, wenn das restliche System stimmt.

Doch so wie es derzeit aussieht, scheint für Doom 3 Freaks, die nach Spitzenleistung gieren, neben einem HighEnd-System auch eine GeForce der 6800er Reihe Pflicht zu sein. Wir wagen nach derzeitigem Kenntnisstand zu bezweifeln, dass ATI die derzeit klaffende Performance-Lücke mit neuen Treibern schließen kann: Der NV40-Chip bietet sogar noch weiteres Doom 3 Potenzial, welches bislang nicht genutzt wurde. Hinzu kommt die legendäre Optimierungsarbeit für einige Spitzentitel, welche Nvidia besonders pflegt - genannt sei hier beispielsweise Quake III.

Insofern gehen wir derzeit davon aus, daß sich an dem Vorsprung von Nvidia unter Doom 3 nichts wesentliches ändern wird. Prinzipiell sollte sich dies auch auf andere Spiele mit Doom 3 Engine abfärben, allerdings kann es bei diesen zumindestens teilweise auch zu völlig anderen Ergebnisse kommen.


Wir möchten uns bei Demirug bedanken, der uns mit technischen Detailinfos vor allem bezüglich der Occlusion-Mechanismen versorgte, sowie bei Xmas für Hinweise technischer Art.



wichtiges Update vom 12. September 2004:

Wir möchten den vorstehenden Artikel jetzt zumindest in Teilen entkräften. Nach neuesten Erkenntnissen ist die Theorie, dass der R420 im Z/Stencil-Pass deutlich langsamer die Pixel verwirft (wodurch das gesamte Rendering verlangsamt würde) zumindest nicht in der Härte zutreffend, wie der Artikel behauptet. Der NV40 hat zwar eine geringere Verwerf-Maximalleistung, diese aber mit feinerer Granularität als R420. Daraus könnte sich letztlich doch noch ein kleiner Vorteil für den NV40 ergeben. Außerdem gibt es weiterhin einige Situationen, in denen der R420 den HierarchicalZ-Mechanismus nicht nutzen kann.

Doch die Unterschiede in der Leistung pro Takt sind damit nicht befriedigend erklärt. nVidia scheint im Treiber "Optimierungen" ähnlicher Art vorgenommen zu haben, mit welchen nVidia seit langem alle Q3A-Benches gewinnt: Abfangen und ersetzen von CPU-lastigen Calls durch weniger CPU-lastige, bzw. spezielle Optimierungen, welche auf die Q3A- und jetzt die D3-Engine besondere Rücksicht nehmen. Zudem wird in Doom 3 kreatives Shaderreplacement betrieben: Offenbar hat nVidia eine Lösung gefunden, Alternativshader zu nutzen, ohne die Bildqualität zu beeinträchtigen.

Daraus ergeben sich zunächst zwei Schlussfolgerungen: Die Geschwindigkeit in Doom 3 ist weniger der NV40-Architektur zuzuschreiben, als wir das zunächst dargestellt haben. Zweitens ist dann vielleicht auch für Radeon-Grafikkarten noch ein Speed-Up drin. Es ist aber auch nicht auszuschließen, dass nVidia die Doom 3 Optimierung noch weiter treiben kann. Hieraus folgt dann wieder, dass man die generelle Spiele-Tauglichkeit von Grafikkarten nicht anhand weniger, "repräsentativer" Spiele festmachen kann. Bessere Leistung in Doom 3 heißt weder bei ATi noch bei Nvidia, dass damit zwangsläufig die jeweilige Hardware-Architektur besser ausgenutzt würde. Eine bessere Hardware-Ausnutzung könnte in diesem Fall vorliegen, doch vielleicht handelt es sich auch nur um Treiber-Optimierungen.

Um ein allgemeines Statement zum Shaderreplacement abzugeben: Dass der "Original-Shader" genau so ausgeführt wird, wie er ist, kann man heutzutage nicht mehr verlangen: Eingebaute allgemeine Shader-Optimierungen, welche das Resultat nicht ändern, sind prinzipiell immer zulässig. Schwierig wird es, wenn handoptimierte Verfahren genutzt werden. Doch so lange nicht das Gegenteil gezeigt wird, nehmen wir an, dass nVidia in Doom 3 "nur" Dinge zur Leistungssteigerung ausnutzt, welche bei der Programmierung des Spiels übersehen wurden. Dennoch ist Handoptimierung auf einen Benchmark (Doom 3 ist ein Quasi-Standardbenchmark) grundsätzlich kritisch zu sehen.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig 3DCenter-Artikel - Index Home

Shortcuts
nach oben