PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum haut AA manchmal so rein?


=Floi=
2009-10-26, 23:24:58
Hallo
warum gibt es spiele bei denen durch den einsatz von aa die fps ins bodenlose fallen? Es gibt spiele da läuft das ganze relativ human ab und games, bei denen sich die framerate drittelt. liegt es am programmierten code, oder an der detailfülle?
bei transparentem aa ist das ganze ja noch viel schlimmer und selbst aktuelle spiele weden nicht mit der nächsten grafikgeneration und TSAA wirklich flüssig laufen!

|-Sh0r7y-|
2009-10-26, 23:32:25
Kenne die Antwort nicht aber ich könnte mir vorstellen es ist die Bandbreite.
Ein Spiel wie Crysis bringt auch ohne aa die KArten zum glühen.
Aktiviert man nun AA bricht die fps stark ein.
Bei ein ssaa wird das Bild auch gleich x mal berechnet das ist so als würden wir 3000x2000 Spielen.

Ein altes Spiel das heutige Karten nicht fordert oder allgemein nicht so ansprusvoll ist hat dagegen viele reserven.
Der Vram spielt auch eine Rolle und läuft grade bei 512MB Karten schnell über.

Schätze ich :-)

deekey777
2009-10-26, 23:55:19
Darf ich was Lustiges sagen? MSAA kostet grundsätzlich keine (Rechen-)Leistung.
Zum Leistungsabfall kommt es durch Zugriffe auf verschiedene Buffer. Und wenn noch zusätzlich fortschrittliche Filter wie AMDs CFAA hinzukommen, dann wird's ganz schlimm. Und EDAA erst...

Warum die Kantenglättung in Crysis so extrem reinhaut, weiß ich nicht. Für richtiges MSAA brauchen sie den Z-Readback, da tricksen sie.

=Floi=
2009-10-27, 03:50:58
bei stalker ist es ja noch schlimmer und oblivion war auch so ein spiel.

Gast
2009-10-27, 06:45:18
http://alt.3dcenter.org/artikel/multisampling_anti-aliasing/

3DC hatte mal gute Artikel geschrieben...

deekey777
2009-10-27, 10:28:36
bei stalker ist es ja noch schlimmer und oblivion war auch so ein spiel.
Gut zu wissen, aber wurde jetzt deine Frage beantwortet?

Gast
2009-10-27, 10:43:50
Darf ich was Lustiges sagen? MSAA kostet grundsätzlich keine (Rechen-)Leistung.


Keine stimmt aber auch nur für Pixel in denen nur 1 Polygon vorkommt und damit defakto kein Antialiasing stattfindet.

Für Kantenpixel muss zumindest pro Polygon im Pixel der entsprechende Pixelshader, Texturzugriff etc. durchlaufen werden.


Bei Stalker liegt der große Leistungsverlust wohl daran, dass es sich um einen deferred renderer handelt. Die Technik braucht schon ohne AA viel Bandbreite und mit AA natürlich durch die vielen Bufferzugriffe extrem viel

deekey777
2009-10-27, 11:12:14
Ich hab das so verstanden, dass Einheiten, die für MSAA zuständig sind, eben dedizierte Einheiten (FF?) sind, die darauf ausgelegt sind. Und sie sind ziemlich fix dabei, werden aber duch weitere Faktoren ausgebremst.

Bei STALKER soll das Problem hinzukommen, dass die Shader auch für Subpixel/Samples ausgeführt werden müssen.

Gast
2009-10-27, 12:56:34
es kommt drauf an durch was das spiel limitiert ist und wie sie mit groesseren aufloesungen skalieren.

indizien:
-hat man viele kleine polygone (und ich glaube crysis schiebt ein paar millionen pro frame durchs bild), hat man entsprechend viele kanten und dann kostet selbst msaa.
-hat man viele post-effects, muss man diese nun mit viel mehr pixeln durchfuehren, dinge wie z.b. SSAO, Glow oder Blur steigen in ihren kosten sogar quadratisch. das kann durch viel mehr texturecache misses und/oder durch viel mehr samples kommen.
-kostspielige ROP operationen. rops sind nicht immer gleich schnell, logischerweise, wenn es komplexere dinge gibt die gemacht werden muessen, z.b. MRT mit float blending, laufen sie auch mal am anschlag, wenn nun 4mal soviele pixel vorhanden sind, werden sie zum limitierenden faktor bei so manchem einfachen drawcall.


zudem muss man bedenken dass GPUs nur solange gut laufen, solange man sich im vorgesehenem handlungsspielraum bewegt. es kann sein dass man nur knapp ueber ein cachelimit ist oder knap eine andere einheit ueberbelatest und dadurch die ganze hardware aus dem sprint zum fussmarsch kommt.
das muss nicht 100% der zeit der fall sein, aber wenn von 1000 objekten die gezeichnet werden 4 in sowas rennen, diese 4 nun 256mal langsammer laufen, dann kosten die 4 mehr als der rest -> halbe fps.

Spasstiger
2009-10-27, 13:52:30
Darf ich was Lustiges sagen? MSAA kostet grundsätzlich keine (Rechen-)Leistung.
Irgendwas hast du an MSAA falsch verstanden. MSAA kostet natürlich Rechenleistung und Texelfüllrate, weil ja zusätzliche Bildinformationen errechnet werden müssen. Hab mal ein Beispiel angefertigt:

Oblivion ohne AA | Oblivion mit 2xMSAA

http://www.abload.de/thumb/oblivion_noaaqxvs.png (http://www.abload.de/image.php?img=oblivion_noaaqxvs.png) http://www.abload.de/thumb/oblivion_2xaabbcb.png (http://www.abload.de/image.php?img=oblivion_2xaabbcb.png)

Hab beide Bilder mit einem XOR überlagert und alle nicht-schwarzen Pixel im resultierenden Bild - also alle Pixel, die durch das 2xMSAA verändert werden - markiert:

http://www.abload.de/thumb/oblivion_aa_diffsaul.png (http://www.abload.de/image.php?img=oblivion_aa_diffsaul.png)

Zwischen den beiden Screenshots unterscheiden sich 145.840 von 2.304.000 Pixeln. Für diese Pixel hat das 2xMSAA jeweils zwei statt einem Farbwert errechnet. Der Rechenaufwand durch das 2xMSAA steigt in diesem Beispiel also um 145.840/2.304.000*100%=6,3%.

Coda
2009-10-27, 13:59:54
Bei MSAA gilt aber wirklich, dass die ALUs nicht mehr Arbeit bekommen (*). Die zusätzlichen Informationen kommen allein daher dass die Geometrie höher abgetastet wird.

(*) Die Polygone werden leicht größer, deshalb kann es passieren dass ein paar zusätzliche Pixel berechnet werden müssen die normal wegfallen würden. Das dürfte aber da die ALUs eh Quadweise arbeiten in den Promillebereich fallen.

Spasstiger
2009-10-27, 14:13:42
Und woher kommen dann beim MSAA die neuen Farbwerte, die in die endgültige Pixelfarbe reingemischt werden? Wo ist dann der Unterschied zu CSAA?

Coda
2009-10-27, 14:20:20
Wenn ein Polygon gerastert wird, wird bei MSAA pro Pixel nur ein Farbwert in den ALUs berechnet. Dieser Farbwert wird dann von den ROPs für jedes von in diesem Pixel vom Dreieck überdeckten Sample geschrieben falls Z-Test und Alpha-Test es nicht killen.

Es können also bei nxMSAA an Kanten bis zu n Farbwerte gemischt werden. Bei CSAA sind es aber weniger. 16x CSAA speichert z.B. nur 4 Farbwerte, 16xQ 8. Man spart neben Rechenleistung also auch noch Bandbreite und Speicherplatz.

Spasstiger
2009-10-27, 14:43:00
Wird denn auch ohne MSAA für jedes Polygon und Pixel ein Farbwert errechnet? Ich dachte, wenn keine Überdeckung vorliegt, dann wird entfällt die Berechnung.

/EDIT: Ich stelle mir das gerade ziemlich ineffizient vor. Man hat Polygon A, Polygon B und Polygon C. Nur Polygon A wird vom Sample in Pixel X überdeckt. Trotzdem wird der Farbwert des Samples in Pixel X für Polygon A, Polygon B und Polygon C berechnet? Welches Polygon setzt sich dann durch, wenn nur ein Farbwert gespeichert wird?

Gast
2009-10-27, 15:30:44
Wenn ein Polygon gerastert wird, wird bei MSAA pro Pixel nur ein Farbwert in den ALUs berechnet. Dieser Farbwert wird dann von den ROPs für jedes von in diesem Pixel vom Dreieck überdeckten Sample geschrieben falls Z-Test und Alpha-Test es nicht killen.

Und was passiert mit den nicht vom Polygon überdeckten Subpixeln? Die brauchen eine andere Farbe, von einem anderen Polygon die auch erstmal berechnet werden muss.


Es können also bei nxMSAA an Kanten bis zu n Farbwerte gemischt werden. Bei CSAA sind es aber weniger. 16x CSAA speichert z.B. nur 4 Farbwerte, 16xQ 8. Man spart neben Rechenleistung also auch noch Bandbreite und Speicherplatz.

Das macht aber nur bei vielen Polygonen die in einem Pixel zusammentreffen einen unterschied. Wie du geschrieben hast wird beim Multisampling ja eine berechnete Farbe für alle überdeckten Subpixel verwendet. Pro Pixel kann es also maximal so viele Farben wie Polygone geben die vermischt werden.

Xmas
2009-10-27, 15:50:39
GPUs arbeiten normalerweise Quad-basiert, d.h. selbst wenn nur ein Pixel (oder Subsample mit AA) innerhalb eines 2x2-Pixel-Quadrats von einem Polygon bedeckt wird, werden alle Pixel im Quad berechnet.

Das bedeutet dass der Rechenaufwand (im PS) deutlich weniger steigt als das Differenzbild von Spasstiger zu zeigen scheint. Je nach Szene kann es aber trotzdem im einstelligen Prozentbereich liegen. Größere Leistungseinbrüche dürften eher in Speicher- und Bandbreitenmangel begründet sein.

Coda
2009-10-27, 16:24:07
Und was passiert mit den nicht vom Polygon überdeckten Subpixeln? Die brauchen eine andere Farbe, von einem anderen Polygon die auch erstmal berechnet werden muss.
Die werden sowieso berechnet. Ausnahme siehe (*).

Wir reden hier von immediate mode Renderern. Es wird nicht auf ein Pixel geschaut und dann nur die Polygone angefasst die auch dazu beitragen, sondern jedes Polygon wird einzeln gerendert.

Wird denn auch ohne MSAA für jedes Polygon und Pixel ein Farbwert errechnet? Ich dachte, wenn keine Überdeckung vorliegt, dann wird entfällt die Berechnung.
Natürlich entfällt dann die Berechnung, aber nur wenn man Front-To-Back rendert.