Radeon 8500 FSAA - DirectX 8.1 vs. OpenGL

Das Testsystem

Komponente
Beschreibung
Betriebssystem(e)
Windows XP (DirectX 8.1 Build 0810)
Treiber
ATi 6.13.10.6043 Release 2 (atioglxx.dll 3008 / ati3d2ag.dll 3232)
Benchmark(s)
Serious Sam Second Encounter Demo (Details hoch), Deus Ex (Details niedrig), Max Payne, DX8.1 SDK
CPU
AMD Athlon XP 1900+ Ghz (138 Mhz FSB)
Mainboard
ECS K7s5a (SIS 735)
Speicher
2x 256 MB PC2700 CL2.5 (2-3-2)
Festplatte(n)
Western Digital WDAC418000 18 GB, Maxtor 52049H3 20 GB
Grafikkarte
ATi Radeon 8500 (275/275 Mhz,  mit AGP 4x betrieben)
Netzwerkkarte
SIS 900 10/100 MBit
Soundkarte
Creative Soundblaser Live Value

Einleitung

Hier möchte ich einmal die 2x und 4x FSAA Qualität der Radeon 8500 gegenüberstellen, unter Verwendung von OpenGL und DirectX. Verwendet wurde jeweils der Qualitätsmodus. Dazu verwende ich die neuesten Entwickler Beta-Treiber vom 28.02.2002 (WinXP 6043 Release 2), da ATi nun einige Zeit hatte, ihr Smoothvision vollständig zu aktivieren.

2xFSAA (Qualitätsmodus)

2xFSAA

Bei diesem Ausschnitt ist deutlich der Vorteil auf der Seite von OpenGL zu sehen, obwohl beide 2xFSAA im Qualitätsmodus verwenden. Einfach ein wenig vom Monitor zurücktreten und die saubere Rundung wird erkennbar.

2xFSAA

Hier gewinnt DirectX deutlich vor OpenGL. Besonders gut erkennbar am Bogen und an der verzierten Mauer rechts im Bild.

2xFSAA

Der Lauf der Waffe wird unter OpenGL besser geglättet. Jedoch ist der vordere Teil der Waffe, sowie die Trommel besser unter DirectX geglättet. Die hier gezeigten Screenshots zeigen, dass unter OpenGL, beim 2xFSAA, die vertikalen Kanten kaum oder deutlich schwächer geglättet werden, als unter DirectX.

2xFSAA

Bei Deus Ex habe ich die Texturedetails runtergesetzt und die Farben invertiert, damit man sich besser auf die Polygonkanten konzentrieren kann. Deutlich ist der Unterschied an der linken vertikalen Kante zu erkennen, keinerlei Glättung bei OpenGL, genau wie das Schild am rechten Bildrand.

4xFSAA(Qualitätsmodus)

4xFSAA

Im Gegensatz zum 2xFSAA sieht hier der DirectX-Modus deutlich besser aus. Der Bogen hat keine Zacken mehr, wie unter OpenGL.

4xFSAA

Biede Versionen haben hier eine fast gleiche Qualität, jedoch sind die Abstufungen unter DirectX etwas gleichmässiger.

4xFSAA

Die Qualität des Laufes ist bei beiden Versionen gleich, jedoch sind die vertikalen Kannten, am vorderen Ende des Laufes, unter DirectX etwas besser geglättet.

4xFSAA

Auch hier wird die linke vertikale Kante, im Vordergrund, unter OpenGL kaum geglättet, jedoch das Schild am rechten Rand, welches sich weiter hinten befindet. Eben jenes Schild sieht unter DirectX und OpenGL gleich aus, jedoch die linke Kante nicht. Entweder haben die Treiber hier eine Macke, oder ATi verwendet unter OpenGL einen entfernungsabhängigen FSAA-Modus für vertikale Kanten. Vielleicht eignet sich DirectX besser für FSAA, da wir auch bei NVIDIA einen FSAA-Modus haben, welcher nur unter DirectX verwendbar ist.

Fazit

UPDATE (10.03.2002):
Auch unter DirectX macht FSAA Probleme. So ist die vertikale Kantenglättung (2xFSAA) bei Max Payne deutlich geringer als bei Serious Sam 2. Jedoch hat Serious Sam 2 Probleme bei der Waffendarstellung, sowie bei den Lichtumrahmungen, welche auch durch Wände sichtbar sind.
UPDATE (11.03.2002):
So, der BUG ist identifiziert. Nach einigen Test (Max Payne, DX8.1 SDK) konnte ich feststellen, dass es sich um die Renderstateoption D3DRS_FOGENABLE handelt. Wenn diese auf TRUE gesetzt wird, dann werden vertikale Kanten bei 2xFSAA nicht und bei 4xFSAA deutlich schächer geglättet. Die horizontale Kantenglättung wird ohne D3DRS_FOGENABLE ein wenig schwächer, was daruf zurückzuführen ist, dass Samples für die vertikalen Kanten benötigt werden, welche nun beim horizontalen Glätten fehlen. Ich habe den BUG an ATi gemailt.
Fog-BUG


UPDATE (15.03.2002):
Nach einigem Mailkontakt mit ATi ist der Grund für das FSAA-Problem bekannt. Es ist nicht wie vermutet ein Treiberbug, sondern eine Hardwarelimitierung, welche in zukünftigen GPU's behoben werden soll. Sobald ein Programm Fog verwendet (egal ob Vertex oder Table Fog) schaltet FSAA auf ein festes Muster um - OGSS - somit ist es bei 2xFSAA nicht möglich, vertikale Kanten zu glätten. Dies kann mit Max Payne wunderbar getestet werden, aber auch mit jedem der DX8.1 SDK Programme..

Unter OpenGL funktioniert es, jedoch immer (egal ob 2x oder 4x) mit geringer vertikaler Glättung bei nahen Kanten. Jedoch ist hier der vertikale Glättungsgrad von der Entfernung des Polygons zum Betrachter abhängig. Ist die vertikale Polygonkante weit weg, wird sie geglättet. Dies kann man mit MOHAA, Deus Ex oder Serious Sam 2 (OpenGL-Mode) ausprobieren.