Archiv verlassen und diese Seite im Standarddesign anzeigen : Antialiasing: Bitte zum Mitschreiben
Kladderadatsch
2007-02-15, 16:50:21
hi,
ich versuche gerade, die technik hinter den verfahren zu verstehen. anhand des 3dc-artikels (http://www.3dcenter.org/artikel/anti-aliasing/) und wikipedia stellen sich nach nun etwa eineinhalb stunden allerdings mehr fragen als antworten.
das problem an sich ist imo klar. das pixelraster (=bildschirmraster?) ist zu grob. bei schrägen in niedrigeren auflösungen führt das eben zu aliasing.
grundsätzlich wird also zwischen faa (fragment-aa) und fsaa unterschieden. ssaa gehört demnach zum fsaa, und msaa (jedenfalls laut wikipedia) zum faa?
ssaa:
das pixelraster wird ver'feinert', also praktisch die auflösung erhöht, wodurch das aliasing weniger sichtbar wird. das hochaufgelöste resultat wird wieder auf die tatsächliche (angezeigte) auflösung heruntergerechnet.
wo genau spielt da nun die sampel-anzahl eine rolle?
zusätzlich wird das bild, bzw. die texturen auch geschärft, da nun jedes verwendete sample im gegensatz zum msaa seinen eigenen farbwert behält.
da frage ich mich, was die beachtung der farbwerte für einen vorteil hat, wenn das pixel letzten endes doch nur den mittelwert der verwendeten sampels erhält.
msaa:
*nicht versteh*
dann noch die begriffe:
err:
gibt das an, welche achsen im raster gefiltert werden?
also 1x2 heißt: x-achse 1-fach, bzw. nicht, y-achse mit 2 sampels?
sample, sampleposition, subpixel, sampleposition der subpixel etc.:
würde mir da bitte auch jemand die zusammenhänge erklären?
ps.:
was hat es mit den geometrie-sampels auf sich?
vergrößerter backbuffer = superbackbuffer? (= eine variante, ssaa zu erzeugen?)
mehrere backbuffer = multisample-buffer? (= eine variante, ssaa zu erzeugen?)
was hat der dann mit multisampling zu tun?
:confused:
immerhin, og, rg und sg leuchten mir ein;)
Sonyfreak
2007-02-15, 17:45:38
Das wird dir zwar konkret gar nicht helfen, aber mir gehts genau so. Ich habe mir auch die Artikeln durchgelesen, aber ganz durchschaut habe ich die Wirkungsweise von AntiAliasing leider noch nicht. :(
mfg.
Sonyfreak
Die gelbe Eule
2007-02-15, 18:04:05
Der 3DC Artikel erklärt es ganz gut in Bild und Wort. Und zwar dieser hier:
http://www.3dcenter.org/artikel/2006/10-12.php nicht der alte von 2002 ;)
Spasstiger
2007-02-15, 18:09:34
Beim Supersampling-AA wird jedes Pixel mehrfach abgetastet ("gesampled"), d.h. für jeden Punkt (= für jedes Fragment) aus dem Sample-Muster wird die gesamte Pipeline durchlaufen, inklusive Texturierung, Pixel-Shading, etc. Anschließend werden die so ermittelten Farbwerte gemischt, um den endgültigen Farbwert des Pixels zu erhalten. Diesen Mischvorgang nennt man in der Fachsprache auch Downsampling. Beim Mischen wird nicht unbedingt genau der arithmetische Mittelwert gebildet, es kann auch nach einer komplizierteren Formel ablaufen (z.B. bei gammakorrigiertem AA).
Beim Multisampling-AA werden nur die Pixel mehrfach abgetastet, bei denen mehrere Polygone zusammentreffen, also an Polygonkanten. Das Pixelshading und die Texturierung erfolgt dabei aber auch nur für ein Sample/Fragment (nämlich das in der Mitte des Pixels). Genauer wird das hier (http://www.3dcenter.org/artikel/multisampling_anti-aliasing/index3.php) erklärt.
Die EER ergibt sich aus der Anordnung der Sample-Punte in der Sample-Maske. Sie gibt an, um welchen Faktor die x- und die y-Auflösung durch das AA vervielfacht wird. Reines Oversampling mit einem Faktor 2 in x-Richtung und Faktor 2 in y-Richtung (= doppelte Auflösung in beide Richtungen) entspricht z.B. 2x2 Supersampling mit einer ordered-grid-Maske. Verwendet man 2x2 4x-Supersampling mit einer sparse-grid-Maske, erreicht man schon eine EER von 4x4.
Welche EER maximal erreichbar ist, hängt von der Auflösung des Triangle-Setups ab. Die GeForce 1 bis afaik GeForce 4 GeForce FX kamen nicht über eine EER von 2x2 hinaus (die Voodoo 5 6000 erreicht mit 4 Chips eine EER von 8x8, bei Radeons ab dem R300 gibts max. 6x6).
Black-Scorpion
2007-02-15, 18:12:42
Der Artikel beschreibt nicht das was er wissen will.
Verwendet man 2x2-Supersampling mit einer sparse-grid-MaskeWas soll denn bitte 2x2 SGSSAA sein? Du meinst wohl 4x SGSSAA, die Samples sind ja nicht in einem ordered Grid.
Es ist eigentlich ganz einfach, aber schwer zu erklären. Multisampling bedeutet, dass pro Pixel an mehreren Stellen geprüft wird ob das Dreieck noch drin liegt, aber nur einmal der Farbwert für das ganze Pixel vom Pixelshader erzeugt wird. An den Stellen in denen das Dreieck liegt wird dann dieser Wert geschrieben.
Bei Supersampling wird pro Sample auch der Pixelshader neu durchlaufen. That's it.
Cubitus
2007-02-15, 18:53:30
Vielleicht hilft dir mein oberflächliches Wissen weiter :D
vor dem MSAA folgte das SSAA
ich glaube Super-Sampling Anti Aliasing ist das älteste Verfahren
Super bedeutet, dass das Bild in einer höheren Auflösung berechnet wird,
und danach auf die gewählte Auflösung heruntergerechnet wird.
bei z.b 800*600 wird das Bild auf 1600*1200 berechnet und dann auf 800*600
wieder umgerechnet, also 4AA Samples pro Pixel, das wäre dann 2x2 Supersampling. Kostet aber um einiges mehr an Speicherband breite und Graphikleistung, als MSAA
Bei SSAA werden sowohl Kanten als auch Texturen geglättet.
MSAA wurde wegen dem leistungshungrigen SSAA eingeführt.
im Gegensatz zu SSAA werden dort nur die Kanten der geometrischen Objekte geglättet, also alle Objekte die im dargestellten Bild aus Dreiecken modelliert wurden, wenn ich damit falsch liege verbessert mich bitte:smile:
Super bedeutet, dass das Bild in einer höheren Auflösung berechnet wird, und danach auf die gewählte Auflösung heruntergerechnet wird.
Das ist nur eine möglich Implementierung von Supersampling. Kann jede Grafikkarte - deshalb wurde es am Anfang verwendet. Ist aber ziemlich ineffizient, weil ordered-grid.
Spasstiger
2007-02-15, 18:55:43
Super bedeutet, dass das Bild in einer höheren Auflösung berechnet wird,
und danach auf die gewählte Auflösung heruntergerechnet wird.
Nicht richtig, das was du hier nennst, wäre Oversampling.
Es gibt eine Form des Supersampling, die dasselbe bewirkt wie Oversampling, nämlich ordered-grid-Supersampling-AA (OGSSAA).
Die Voodoo 5 hat gezeigt, dass es auch besser geht, hier kam sparse-grid-Supersampling-AA (SGSSAA) zum Einsatz.
Nicht richtig, das was du hier nennst, wäre Oversampling.
Natürlich ist das Supersampling. Wenn auch nur eine schlechte Teilmenge davon.
Spasstiger
2007-02-15, 19:02:35
Natürlich ist das Supersampling. Wenn auch nur eine schlechte Teilmenge davon.
Er schrieb SSAA = Oversampling. Das stimmt aber nicht. Denn - wie du schon sagst - ist SSAA >= Oversampling.
/EDIT: Muss mich hier aber noch einschränken. Oversampling im technischen Sinne wird bei echtem AntiAliasing immer betrieben. Statt Oversampling meinte ich die Erhöhung der x- und y-Auflösung (im Sinne eines ordered-grid).
Cubitus
2007-02-15, 19:12:15
im 3DC Artikel den ich mir just zu gemühte führe, weil ich jetzt wissen will was nach ordered-grid kommt , stach mir dieser Satz sofort ins Auge
Supersampling bedeutet Überabtastung und wirkt dem entgegen. Es wird mit einer höheren Abtastrate gearbeitet und eine größere Menge an Informationen erzeugt. Anschließend findet ein Downsampling, also eine Heruntertastung statt. Damit presst man die Mehrinformationen in das ursprüngliche Raster zurück
Beim Supersampling-AA wird jedes Pixel mehrfach abgetastet ("gesampled"), d.h. für jeden Punkt (= für jedes Fragment) aus dem Sample-Muster wird die gesamte Pipeline durchlaufenich habe meine Zweifel, ob der Threadersteller mit dem Begriff Pipeline in diesem Zusammenhang sonderlich viel anfangen kann.
Beim Multisampling-AA werden nur die Pixel mehrfach abgetastet, bei denen mehrere Polygone zusammentreffen, also an Polygonkanten. Das Pixelshading und die Texturierung erfolgt dabei aber auch nur für ein Sample/Fragment (nämlich das in der Mitte des Pixels). Genauer wird das hier (http://www.3dcenter.org/artikel/multisampling_anti-aliasing/index3.php) erklärt.eher nicht genauer, sondern anders ;)
In dem Artikel steht nämlich nichts davon, daß nur Pixel, in denen Polygonkanten liegen, überabgetastet werden:
Multisampling bedeutet zunächst nur, für jedes Pixel nur noch einen Textur-Wert zu sampeln, obwohl mehrere Subpixel erzeugt werden. Anders gesagt: Während Supersampling das gesamte Bild in höherer Auflösung rendert, werden mit Multisampling nur noch die Kanten mit höherer Auflösung berechnet, nicht aber die Texturen.d.h. überabgetastet wird jedes Pixel, egal ob mit Polygonkante drin oder nicht. Nur wird nicht mehr für jedes Subpixel ein Texturwert erzeugt. Praktische Auswirkungen hat die Überabtastung damit zwar nur noch auf Polygonkanten, durchgeführt aber wird sie für alle Pixel.
Anderenfalls müßte ja z.B. erst einmal für jedes Pixel detektiert werden, ob es eine Polygonkante enthält.
BTW: man liest zuweilen, daß bei Multisampling irgendwie der Bildschirminhalt verschoben würde. Eine ähnliche Darstellung vermeine ich in aths' älterem Artikel gelesen zu haben, dort bezog sie sich aber nicht auf Multisampling, sondern auf Multisample-Buffering. Soweit ich das verstanden habe, hat dieses Multisample-Buffering aber - trotz des ähnliches Namens - nichts mit Multisampling zu tun, sondern ist eine Supersampling-Technik, richtig?
das problem an sich ist imo klar. das pixelraster (=bildschirmraster?) ist zu grob. bei schrägen in niedrigeren auflösungen führt das eben zu aliasing.
grundsätzlich wird also zwischen faa (fragment-aa) und fsaa unterschieden. ssaa gehört demnach zum fsaa, und msaa (jedenfalls laut wikipedia) zum faa?FAA ist AFAIK eine spezielle Technik von Matrox, die z.B. auf der Parhelia zum Einsatz kam. MSAA gilt eigentlich als FSAA. Früher war auch mal das Edge-AA im Einsatz, das wirklich nur Kanten glättete.
ssaa:
das pixelraster wird ver'feinert', also praktisch die auflösung erhöht, wodurch das aliasing weniger sichtbar wird. das hochaufgelöste resultat wird wieder auf die tatsächliche (angezeigte) auflösung heruntergerechnet.
wo genau spielt da nun die sampel-anzahl eine rolle?die Zahl der Samples pro Pixel ist einfach die Zahl der Subpixel. Beim reinen Ordered Grid SSAA ist das einfach der Faktor, um den die Auflösung erhöht wird.
zusätzlich wird das bild, bzw. die texturen auch geschärft, da nun jedes verwendete sample im gegensatz zum msaa seinen eigenen farbwert behält.
da frage ich mich, was die beachtung der farbwerte für einen vorteil hat, wenn das pixel letzten endes doch nur den mittelwert der verwendeten sampels erhält.das ist relativ leicht zu verstehen:
stell dir ein Schachbrett-Muster vor. Nimm nun an, du tastest dieses Muster so schlecht ab, daß du nur jedes zweite Feld des Musters erwischt. Dann triffst du entweder nur schwarze oder nur weiße Felder, und das ganze Muster wird auf deinem Bildschirm als monochrom schwarz oder monochrom weiß dargestellt.
Machst du nun ein 2*2 SSAA, triffst du jedes Feld. Pro Pixel hast du jetzt 2 weiße und zwei schwarze Subpixel. Beim Downsampling werden die Farben dieser vier Subpixel nun zusammengemischt, und du erhälst grau.
Das Muster wird also auf deinem Bildschirm grau dargestellt.
Ohne das SSAA wäre es nur schwarz oder weiß.
Mr. Lolman
2007-02-15, 20:17:28
Schöne Erklärung. Ergänzend wäre zu vermerken, dass in Bewegung das Bild ohne AA abwechselnd schwarz und weiss ist - also flimmert :)
Spasstiger
2007-02-15, 20:20:26
[...]
d.h. überabgetastet wird jedes Pixel, egal ob mit Polygonkante drin oder nicht. Nur wird nicht mehr für jedes Subpixel ein Texturwert erzeugt. Praktische Auswirkungen hat die Überabtastung damit zwar nur noch auf Polygonkanten, durchgeführt aber wird sie für alle Pixel.
Anderenfalls müßte ja z.B. erst einmal für jedes Pixel detektiert werden, ob es eine Polygonkante enthält.
Ok, da muss ich dir recht geben. Ich habe nur die Wirkung nach außen beschrieben, nicht den internen Prozess. Und man sieht nach außen ja auch den vervielfachten Speicherbedarf, von daher trifft meine Erklärung nicht zu.
EDIT: Jetzt hab ich aber auch eine Frage: Was passiert denn eigentlich mit den Multisample-Buffern, wenn ein fertiges Pixel geschrieben wurde? Werden die Buffer dann gelöscht? Wenn nicht, hätte man ja immer falsche Farbwerte in den nicht benutzten Buffern stehen (wenn ein Sample nicht im Dreieck liegt).
Und wie fließt der Farbwert eines angrenzenden Polygons in die Pixelfarbe mit ein? Bzw. wie will man Farbwerte mitteln, wenn man z.B. nur ein Geometrie-Sample hat, das auf dasselbe Polygon wie das Textur-Sample fällt? Man hat ja dann z.B. nur eine Information "blau wird zu einem Viertel gewichtet". Der Artikel von aths verwirrt mich jetzt ...
Kladderadatsch
2007-02-15, 20:54:06
danke euch:)
ich glaube, das hilft mir weiter.
(das mit den backbuffern und multisample-buffern ist mir allerdings immer noch nicht klar.)
die Zahl der Samples pro Pixel ist einfach die Zahl der Subpixel.
sind sample und subpixel synonyme?:confused:
wahrscheinlich nicht- warum wird dann der unterschied gemacht?
Dann triffst du entweder nur schwarze oder nur weiße Felder, und das ganze Muster wird auf deinem Bildschirm als monochrom schwarz oder monochrom weiß dargestellt. Machst du nun ein 2*2 SSAA, triffst du jedes Feld.
weil das raster die doppelte auflösung verpasst bekommt und somit den doppelten inhalt enthält? aber halt, war 2x2 nicht die 4-fache information?
und wenn ich mit 2x2 bereits alles erfasse, würde das in diesem fall das optimum darstellen?
Bei Supersampling wird pro Sample auch der Pixelshader neu durchlaufen.
das erklärt den im vergleich zum msaa höheren bedarf an füllrate und die wiederum an speicherbandbreite?
Verwendet man 2x2-Supersampling mit einer sparse-grid-Maske, erreicht man schon eine EER von 4x4.
warum das?
ps.: danke für den link!
MSAA gilt eigentlich als FSAA.
warum, wenn doch ganz nach dem prinzip von faa nur die kanten, nicht aber das ganze bild gefiltert wird?
mit der sample-maske meint man doch diese bildchen mit den lustigen punkten, oder?
morgen schau ich mir die sache dann nochmal mit klarem kopf an, und löcher weiter;)
ps.: ist es möglich, das zeug in 3 tagen (jetzt noch 2) zu verstehen?;(
Spasstiger
2007-02-15, 21:25:56
warum das?
ps.: danke für den link!
Falls dich das 2x2-sparse-grid-SSSAA verwirrt, ich meinte natürlich 4x sparse-grid-SSSAA. In einem sparse grid und auch einem rotated grid sind die Samples so angeordnet, dass sie nicht in derselben "Zeile" oder "Spalte" liegen. Jede Achse wird also bei 4x SGSSAA auch viermal abgetastet.
Schau dir mal das Samplemuster an:
http://www.3dcenter.org/images/anti-aliasing/subpixel3.png
In x-Richtung sinds 4 verschiedene Samples und in y-Richtung ebenfalls vier verschiedene.
Das ordered grid sieht so aus:
http://www.3dcenter.org/images/anti-aliasing/subpixel1.png
Die x-Achse wird nur zweimal abgetastet, die y-Achse ebenfalls.
In beiden Fällen hat man aber denselben Füllraten-, Bandbreiten- und Speicherbedarf. Das rotated grid bzw. das sparse grid ist halt etwas aufwändiger zu implementieren.
P.S.: Kann mir jemand meine Fragen von zwei Postings drüber beantworten?
EDIT: Jetzt hab ich aber auch eine Frage: Was passiert denn eigentlich mit den Multisample-Buffern, wenn ein fertiges Pixel geschrieben wurde? Werden die Buffer dann gelöscht? Wenn nicht, hätte man ja immer falsche Farbwerte in den nicht benutzten Buffern stehen (wenn ein Sample nicht im Dreieck liegt).In der Regel wird der Color Buffer vor einem neuen Frame mit einer einstellbaren Hintergrundfarbe gelöscht.
Und wie fließt der Farbwert eines angrenzenden Polygons in die Pixelfarbe mit ein? Bzw. wie will man Farbwerte mitteln, wenn man z.B. nur ein Geometrie-Sample hat, das auf dasselbe Polygon wie das Textur-Sample fällt? Man hat ja dann z.B. nur eine Information "blau wird zu einem Viertel gewichtet". Der Artikel von aths verwirrt mich jetzt ...Es gibt im Framebuffer keine nil- oder null-Werte, nur Farbwerte.
Kladderadatsch
2007-02-15, 21:38:05
http://www.3dcenter.org/images/anti-aliasing/subpixel3.png
In x-Richtung sinds 4 verschiedene Samples und in y-Richtung ebenfalls vier verschiedene.
Das ordered grid sieht so aus:
http://www.3dcenter.org/images/anti-aliasing/subpixel1.png
Die x-Achse wird nur zweimal abgetastet, die y-Achse ebenfalls.
die theorie leuchtet ja ein, aber wie zähle ich da 4, bzw. 2 sampels?:redface:
betrachtet wird doch lediglich das mittlere feld ( ein pixel?) mit den 4 sampels. ob die jetzt geordnet oder rotiert angeordnet sind, lässt mich leider keine 4 sampels auf der x, bzw. y-achse zählen.
Spasstiger
2007-02-15, 21:40:50
In der Regel wird der Color Buffer vor einem neuen Frame mit einer einstellbaren Hintergrundfarbe gelöscht.[QUOTE]
Ok, das beantwortet die erste Frage.
[QUOTE=aths;5256153]Es gibt im Framebuffer keine nil- oder null-Werte, nur Farbwerte.
Hm, da muss ich jetzt aber nochmal nachhaken.
Angenommen, die voreingestellte Hintergrundfarbe sei grün (R=0, G=255, B=0).
Dann hat man ein Pixel auf das zwei Polygone fallen. Das Textursample fällt auf ein Polygon mit roter Textur (R=255, G=0, B=0). Die ersten zwei Geometriesamples fallen ebenfalls auf dieses Polygon, also stehen im Multisample-Buffer 1 und 2 jeweils der Farbwert R=255, G=0, B=0.
Die anderen beiden Geometriesamples fallen auf das andere Polygon, die Buffer werden demnach ja nicht überschrieben.
Als Farbmittelwert für das Pixel ergibt sich nun R=128, G=128, B=0.
Die Integralbildung über das Pixel würde aber vielleicht ergeben R=140, G=0, B=110.
D.h. ich hab plötzlich ein bräunliches Pixel, obwohl es eigentlich lila sein müsste. Hab ich da jetzt einen Denkfehler gemacht? Wird vielleicht der Farbwert vom Nachbarpixel mit einbezogen?
die theorie leuchtet ja ein, aber wie zähle ich da 4, bzw. 2 sampels?:redface:
betrachtet wird doch lediglich das mittlere feld ( ein pixel?) mit den 4 sampels. ob die jetzt geordnet oder rotiert angeordnet sind, lässt mich leider keine 4 sampels auf der x, bzw. y-achse zählen.Hiermit wirds vielleicht klarer:
http://www.3dcenter.de/images/multisampling_anti-aliasing/spnvati.gif
Hier wirds noch genauer:
http://www.3dcenter.de/images/anti-aliasing-masken/sub1.gif
Hm, da muss ich jetzt aber nochmal nachhaken.
Angenommen, die voreingestellte Hintergrundfarbe sei grün (R=0, G=255, B=0).
Dann hat man ein Pixel auf das zwei Polygone fallen. Das Textursample fällt auf ein Polygon mit roter Textur (R=255, G=0, B=0). Die ersten zwei Geometriesamples fallen ebenfalls auf dieses Polygon, also stehen im Multisample-Buffer 1 und 2 jeweils der Farbwert R=255, G=0, B=0.
Die anderen beiden Geometriesamples fallen auf das andere Polygon, die Buffer werden demnach ja nicht überschrieben.
Als Farbmittelwert für das Pixel ergibt sich nun R=128, G=128, B=0.
Die Integralbildung über das Pixel würde aber vielleicht ergeben R=140, G=0, B=110.
D.h. ich hab plötzlich ein bräunliches Pixel, obwohl es eigentlich lila sein müsste. Hab ich da jetzt einen Denkfehler gemacht? Wird vielleicht der Farbwert vom Nachbarpixel mit einbezogen?Im Framebuffer gibt es nur Farbsamples (und keine Geometriesamples.) Hast du in einem Pixel bei 4x AA zwei Subpixel Grün, und zwei Subpixel Rot, ist die Mischfarbe in diesem Fall (128, 128, 0). Für alle „Geometrie-Samples“ werden ja die entsprechenden Farbwerte geschrieben. Der Framebuffer kennt keine „Geometrie-Samples“. Wenn du ein Dreieck in einen „leeren“, also vorher gelöschten Framebuffer renderst, und das Dreieck nicht alle Subpixel bedeckt, fließen natürlich auch Hintergrund-Farben mit in die finale Farbe ein.
Nachbar-Farbwerte werden nur bei Verfahren à la Quincunx mit einbezogen und dann auch nur bei der Ausgabe und nicht während des Renderings.
Kladderadatsch
2007-02-15, 21:57:27
Hiermit wirds vielleicht klarer:
http://www.3dcenter.de/images/multisampling_anti-aliasing/spnvati.gif
ah, klar. danke.
achja, was genau ist hier (http://www.3dcenter.org/artikel/anti-aliasing/index03.php) (bzw. in diesem zusammenhang generell) mit 'dreieck' eigentlich gemeint?
(ich hoffe, die fragen werden jetzt nicht all zu blöd;) )
Spasstiger
2007-02-15, 21:59:39
Für alle „Geometrie-Samples“ werden ja die entsprechenden Farbwerte geschrieben.
Welcher Farbwert wird dann für ein Geo-Sample geschrieben, das nicht im betrachteten Dreieck liegt? Eigentlich ja gar keiner, oder?
Und der nach dem Löschen im Framebuffer vorliegende Wert sollte ja nicht in die Pixelfarbe mit einfließen.
Welcher Farbwert wird dann für ein Geo-Sample geschrieben, das nicht im betrachteten Dreieck liegt? Eigentlich ja gar keiner, oder?
Und der nach dem Löschen im Framebuffer vorliegende Wert sollte ja nicht in die Pixelfarbe mit einfließen.Sofern dort „nichts“ ist, wird natürlich die Hintergrundfarbe genommen (die bereits im Framebuffer steht.) Sonst wäre es ja nicht möglich, einfach nur ein einzelnes Dreieck vor dem Hintergrund zu rendern und dabei Kantenglättung zu bekommen.
In der Regel wird der Color Buffer vor einem neuen Frame mit einer einstellbaren Hintergrundfarbe gelöscht.
Nö. Das kostet ja bloß unnötig nix wenn man eh alles überzeichnet.
Welcher Farbwert wird dann für ein Geo-Sample geschrieben, das nicht im betrachteten Dreieck liegt? Eigentlich ja gar keiner, oder?
Natürlich keiner, sonst würde die ganze Geschichte die man treibt ja nichts bringen.
Spasstiger
2007-02-15, 22:16:42
@Aths: Also ich hab wohl nen Knoten im Gehirn. Nehmen wir mal an, der Framebuffer ist gelöscht und alle Bits sind auf 0 gesetzt (= schwarz).
Jetzt ziehe ich mal ein Beispiel aus einer deiner Artikel heran:
http://www.3dcenter.org/images/2003/08-06_pic2.png
Hier sollten an der Kante ja Mischfarben resultieren aus blau und weiß. Jetzt betrachten wir mal Pixel 3 (von oben links nach rechts gezählt). Das Textursample liefert die Farbe weiß und entsprechend der Geosamples wird in Buffer 1 und Buffer 3 dann auch weiß geschrieben. In Buffer 2 und Buffer 4 steht schwarz. Eigentlich sollte dort ja blau stehen, aber woher soll die Information kommen, wenn man nur ein Textursample hat?
Spasstiger. Es werden alle Dreiecke auf dem Bildschirm nacheinander gezeichnet. Nicht gleichzeitig.
Da steht natürlich zuerst noch schwarz, aber sobald das blaue Dreieck kommt eben blau. Wo ist das Problem?
Nö. Das kostet ja bloß unnötig nix wenn man eh alles überzeichnet.Wenn man eine Skybox hat, und der Rest aus zusammenhängenden Polygonen besteht, schaltet man den Colorclear natürlich ab.
Wenn man eine Skybox hat, und der Rest aus zusammenhängenden Polygonen besteht, schaltet man den Colorclear natürlich ab.
Was in 99% aller Fälle so ist. So what?
"In der Regel" ist bei mir was anderes.
Spasstiger
2007-02-15, 22:23:50
Spasstiger. Es werden alle Dreiecke auf dem Bildschirm nacheinander gezeichnet. Nicht gleichzeitig.
Da steht natürlich zuerst noch schwarz, aber sobald das blaue Dreieck kommt eben blau. Wo ist das Problem?
Achso, das geht vom Triangle-Setup aus?! Ich dachte, man arbeitet die ganze Szene pixelweise ab. Aber wenn jedes Pixel bei MSAA quasi mehrmals durchlaufen wird, weil alle Dreiecke nacheinander abgearbeitet werden, ist die Sache klar.
@Aths: Also ich hab wohl nen Knoten im Gehirn. Nehmen wir mal an, der Framebuffer ist gelöscht und alle Bits sind auf 0 gesetzt (= schwarz).
Jetzt ziehe ich mal ein Beispiel aus einer deiner Artikel heran:
http://www.3dcenter.org/images/2003/08-06_pic2.png
Hier sollten an der Kante ja Mischfarben resultieren aus blau und weiß. Jetzt betrachten wir mal Pixel 3 (von oben links nach rechts gezählt). Das Textursample liefert die Farbe weiß und entsprechend der Geosamples wird in Buffer 1 und Buffer 3 dann auch weiß geschrieben. In Buffer 2 und Buffer 4 steht schwarz. Eigentlich sollte dort ja blau stehen, aber woher soll die Information kommen, wenn man nur ein Textursample hat?Man hat aber pro Polygon und Pixel ein Textursampel. Für den Fall, dass es kein Centroid-Sampling gibt, wird das Textursample für eine Position außerhalb des Polygons genommen. (Das geht auch dann, wenn man Texurkoordinaten kleiner 0 oder größer 1 erhält, in dem je nach Einstellung Texture-Repeat oder -Mirror genutzt wird.)
Wenn man Centroid-Sampling nutzt, wird die Textursampleposition für Rand-Pixel in das Polygon reingeschoben.
Was in 99% aller Fälle so ist. So what?
"In der Regel" ist bei mir was anderes.Dafür, dass ich kürzlich von dir gelesen habe dass TAA mit Alpha-to-Coverage kein Alphablending nachstelle, oder dass die DXT1-Sache schon bei der GF4 "gefixt" worden sei, finde ich deinen Tonfall etwas unangebracht.
Spasstiger
2007-02-15, 22:27:54
Man hat aber pro Polygon und Pixel ein Textursampel. Für den Fall, dass es kein Centroid-Sampling gibt, wird das Textursample für eine Position außerhalb des Polygons genommen. (Das geht auch dann, wenn man Texurkoordinaten kleiner 0 oder größer 1 erhält, in dem je nach Einstellung Texture-Repeat oder -Mirror genutzt wird.)
Wenn man Centroid-Sampling nutzt, wird die Textursampleposition für Rand-Pixel in das Polygon reingeschoben.
Ok, damit (zusammen mit dem Posting von Coda) wären meine Unklarheiten endgültig beseitigt. :)
Ich glaub über Centroid-Sampling brauchen wir jetzt nicht auch noch zu diskutieren, sonst wird's noch komplizierter.
Ok, damit (zusammen mit dem Posting von Coda) wären meine Unklarheiten endgültig beseitigt. :)
Sicher? Das Texturesample hat nix mit den Subpixel-Samples zu tun.
Dafür, dass ich kürzlich von dir gelesen habe dass TAA mit Alpha-to-Coverage kein Alphablending nachstelle
Es ist eine sehr grobe Approximation dessen, deshalb fand ich die Aussage bissel arg schief.
oder dass die DXT1-Sache schon bei der GF4 "gefixt" worden sei, finde ich deinen Tonfall etwas unangebracht.
Wurde sie auch. Ja. Ganz sicher (zumindest auf NV25, was mit den MX ist weiß ich nicht).
DXT1
This is a four-bit compressed color format that allows for opaque, and one-bit alpha textures; that is, textures with no transparency at all, and textures with a single transparent color (masking). The most compression will be put on textures.
Caution: a hardware bug in some nVidia chipsets, including the NV20 (GeForce3/Xbox), potentially makes certain DXT1 textures exhibit banding/ quantization artifacts. Specifically, decompression is performed in 16-bit color mode internally, making the resulting texture potentially unacceptable for use, especially when combined with other operations. This problem has been corrected in the NV25 chipset and all other DXTC formats on nVidia hardware are okay, as textures are decompressed in 32-bit color internally.
Und ich hab's damals auch selber ausprobiert. Und jetzt?
Und ansonsten kratzt es mich eher weniger was du über meinen Tonfall denkst. Ich fasse die Sachen selber an, anstatt bloß drüber zu reden und sich großspurig 3D-Guru zu nennen.
Sonyfreak
2007-02-15, 22:30:44
2 Fragen:
1) Wird für jeden einzelnen Pixel in einer Szene überprüft, ob er am Rand eines Polygons liegt, oder weiß die Grafikkarte, wo die Ränder sind?
2) Wenn die Grafikkarte jetzt auf eine Kante stößt, bei der AA eingesetzt werden soll. Überprüft sie dann, zu welchen Teilen ein Pixel jetzt auf der Kante liegt, und ändert je nachdem dann die Farbe ab oder wie? Je mehr Subpixel bzw. je höher der AA Modus, desto mehr Abstufungen sind möglich?
mfg.
Sonyfreak
2 Fragen:
1) Wird für jeden einzelnen Pixel in einer Szene überprüft, ob er am Rand eines Polygons liegt, oder weiß die Grafikkarte, wo die Ränder sind?Bei MSAA wird für jedes Pixel eine Maske erstellt, so dass die Pipeline (genauer gesagt, die ROP-Unit) weiß, für welche Subpixel der berechnete Farbwert gilt. Die Graka weiß insofern nicht, ob es ein Randpixel ist oder nicht. (Es gibt ja auch Randpixel, bei denen alle Subpixel vom Polygon bedeckt sind.)
2) Wenn die Grafikkarte jetzt auf eine Kante stößt, bei der AA eingesetzt werden soll. Überprüft sie dann, zu welchen Teilen ein Pixel jetzt auf der Kante liegt, und ändert je nachdem dann die Farbe ab oder wie?Das wird rein über die eben genannte Maske gelöst.
Sonyfreak
2007-02-15, 22:42:40
Dazu dann nochmal 3 Fragen:
1) Woher weiß die Grafikkarte dann, wenn sie nicht weiß wo ein Randpixel ist, bei welchen Pixeln der Subpixelvergleich eingesetzt werden soll?
2) Und der Mehrleistungsverbrauch von AA kommt daher, dass für jeden Pixel mehrere Subpixel erstellt werden, die dann über die Endfarbe bestimmen?
3) Je höher der AA-Faktor, desto mehr Subpixel werden eingesetzt?
Danke fürs die Antwort. Ich bemühe mich wirklich, es endlich zu kapieren, was nicht ganz einfach ist.
mfg.
Sonyfreak
Spasstiger
2007-02-15, 23:05:48
Dazu dann nochmal 3 Fragen:
1) Woher weiß die Grafikkarte dann, wenn sie nicht weiß wo ein Randpixel ist, bei welchen Pixeln der Subpixelvergleich eingesetzt werden soll?
Es werden immer alle Samples berücksichtigt.
Ein Dreieck kommt von Triangle-Setup und wird für ein Pixel mit seinen Samples betrachtet. Der Farbwert des Dreiecks für dieses Pixel wird über ein oder mehrere Textur-Samples bestimmt. Dann kommen bei MSAA noch die Subpixel-Samples dazu. Liegen diese Samples innerhalbt des Dreiecks wird in den zu den Samples gehörenden Multisampling-Buffern der Farbwert des Dreiecks geschrieben. Liegen Samples nicht im betrachteten Dreieck, so wird nix in die zugehörigen Buffer geschrieben.
Das Triangle-Setup geht dann weiter zum nächsten Dreieck und führt dort dieselbe Prozedur aus.
Die in den Buffern stehenden Farbwerte werden dann jeweils für ein Pixel zusammengemischt.
(ich hoffe, ich hab das jetzt korrekt zusammengeschrieben)
2) Und der Mehrleistungsverbrauch von AA kommt daher, dass für jeden Pixel mehrere Subpixel erstellt werden, die dann über die Endfarbe bestimmen?
Du schreibst ja bei MSAA für jedes Pixel immer mehrere Farbwerte in die Multisampling-Buffer. D.h. du verbrauchst ein Vielfaches an Bandbreite und Speicher. Außerdem braucht man ein wenig zusätzliche Füllrate.
Bei SSAA sollte die Sache sowieso klar sein, da wird die komplette Pipeline für jeden Pixel mehrfache durchlaufen. Das kostet natürlich.
3) Je höher der AA-Faktor, desto mehr Subpixel werden eingesetzt?
Der AA-Faktor steht für die Anzahl an Samples je Pixel. Subpixel können es je nach Maske auch mehr sein, aber das interessiert auch nur das Triangle-Setup (2x2-OGSSAA braucht 4 Subpixel, 4xRGSSAA braucht 16 Subpixel). Außerdem sind Subpixel eh nur ein theoretisches Konstrukt, sie kennzeichnen gewissermaßen die Auflösung des Triangle-Setups. Für den Rechenaufwand ist die Samplezahl je Pixel entscheidend.
Dazu dann nochmal 3 Fragen:
1) Woher weiß die Grafikkarte dann, wenn sie nicht weiß wo ein Randpixel ist, bei welchen Pixeln der Subpixelvergleich eingesetzt werden soll?Was für ein Subpixel-Vergleich?
2) Und der Mehrleistungsverbrauch von AA kommt daher, dass für jeden Pixel mehrere Subpixel erstellt werden, die dann über die Endfarbe bestimmen?Nein, das ist kostenlos. Der Leistungsverbrauch kommt daher, dass bei 4x Antialiasing auch 4 Farbwerte pro Pixel geschrieben werden, sowie dass diese Subpixel zum Farbmischen bei der Bildausgabe noch mal erneut gelesen werden müssen.
3) Je höher der AA-Faktor, desto mehr Subpixel werden eingesetzt?Ja, natürlich.
Kladderadatsch
2007-02-16, 14:34:51
in welchem zusammenhang steht die sample-anzahl mit der abtastung? bedeuten 4 samples = 4 mal abgetastet?
und kann mir bitte jemand erklären, wie diese samples nun genau dazu beitragen, die aa-qualität zu steigern?
Kladderadatsch
2007-02-16, 15:11:30
Verwendet man 2x2-Supersampling mit einer sparse-grid-Maske, erreicht man schon eine EER von 4x4.
warum steht dann in deiner liste (http://img253.imageshack.us/my.php?image=aamodialphauv0.png) unter 4xssaa sparse grid ein eer von 4x4? (bei 8x das gleiche)
Sonyfreak
2007-02-16, 15:49:09
@ Spasstiger: Danke für die Erklärung. Ich denke, dass sie mir doch ein gutes Stück weiter geholfen hat.
Was für ein Subpixel-Vergleich?Damit habe ich eben dieses Farbmischen gemeint, dass du in deinem nächsten Satz erwähnt hast. War scheinbar nicht der richtige Ausdruck, aber mir ist kein besserer eingefallen.
Jetzt vielleicht noch ein kurzes Beispiel, ob ich das ganze eh korrekt verstanden habe. Bei einer Szene treten beispielsweise 3 farbige Dreiecke auf einem einfärbigen Hintergrund auf. Da berechnet die Grafikkarte zuerst wie und wo sich diese Dreiecke überdecken, und dementsprechend werden sie nach Sichtbarkeit sortiert. Anschließend wird für jeden Pixel der Polygone überprüft, ob er sich innerhalb oder außerhalb des Polygons befindet. Wenn man jetzt zum Beispiel 4xAA einschaltet, wird für den Pixel an 4 Stellen die Farbe überprüft. Je nachdem wie groß der Anteil des Pixels anhand der 4 Subpixel innerhalb und außerhalb des Polygons ist, wird dann die Farbe des Pixels bestimmt. Das heißt, dass es für 4xAA vier Abstufungen (100%, 75%, 50% oder 25% des Bereiches liegen innerhalb) der Pixelfarbe zur Farbe des Polygons geben kann. Je nachdem wie günstig die AA-Maske ist, wird die Polygonkante entweder gut, oder weniger gut erwischt, wodurch auch mal ein wenig günstiger Wert errechnet werden kann. Wenn dieser Vorgang für alle Dreiecke geschrieben ist, springt die Grafikkarte zum nächsten Polygon, und fängt an, diesen zu bearbeiten.
Bitte mich auszubessern, sollte ich noch irgendwas falsch verstanden haben und danke für die Geduld. :smile:
mfg.
Sonyfreak
Spasstiger
2007-02-16, 16:32:12
warum steht dann in deiner liste (http://img253.imageshack.us/my.php?image=aamodialphauv0.png) unter 4xssaa sparse grid ein eer von 4x4? (bei 8x das gleiche)
Das 2x2 SGSSAA war ein Schreibfehler, das sollte 4xSGSSAA heißen. Und natürlich erreicht man damit eine EER von 4x4.
Es wird sowohl in x-Richtung als auch in y-Richtung auf vier verschiedenen Kanten abgetastet (schau dir einfach nochmal das Bild von aths an).
Jetzt vielleicht noch ein kurzes Beispiel, ob ich das ganze eh korrekt verstanden habe. Bei einer Szene treten beispielsweise 3 farbige Dreiecke auf einem einfärbigen Hintergrund auf. Da berechnet die Grafikkarte zuerst wie und wo sich diese Dreiecke überdecken, und dementsprechend werden sie nach Sichtbarkeit sortiert. Anschließend wird für jeden Pixel der Polygone überprüft, ob er sich innerhalb oder außerhalb des Polygons befindet. soooo intelligent sind Grafikkarten nicht ;)
Soweit ich das richtig verstanden habe (im Zusammenhang mit Alpha-Blending und dessen Abhängigkeit von der Reihenfolge, in der man Polygone zeichnen läßt, mußte ich da zwangsweise drüber nachdenken) werden jedes Mal, wenn ein Polygon gerendert werden soll, sämtliche Pixel des Bildschirms durchgegangen. D.h. für jedes Polygon wird ein Fullscreen-Sampling gemacht, das für jeden Bildschirmpixel guckt, ob er innerhalb des Polygons, außerhalb oder auf einer Polygonkante liegt.
Lediglich wenn der Z-Buffer aktiv ist (was aber der Standard ist), wird bei jedem dieser Fullscreens-Sampling für jeden Pixel überprüft, ob bereits von einem früheren Rendern eines Polygons ein z-Wert eingetragen ist, der niedriger ist als der für das aktuelle Polygon berechnete (d.h. es wird überprüft, ob ein bereits gerendertes Polygon näher liegt als das aktuelle und den aktuellen Pixel bedeckt). Diese Übeprüfung findet aber immer erst beim Sampling (also beim Rendern des aktuellen Polygons) statt, also wesentlich später als von dir vermutet.
Wenn man jetzt zum Beispiel 4xAA einschaltet, wird für den Pixel an 4 Stellen die Farbe überprüft. so in etwa, nur wird das für jeden Pixel auf dem Bildschirm gemacht, und zwar für jedes Polygon einzeln. Es wird nicht vorher eine Berechnung durchgeführt, welche Pixel auf welchem Polygon liegen. Das Sampling ist quasi selbst diese Berechnung.
sind sample und subpixel synonyme?:confused:
in gewisser Hinsicht ja: für jeden Subpixel wird ein Sample erzeugt. Von Sampling spricht man immer im Zusammenhang mit Abtastung. Ein Sample ist ein Abtastwert. Die Bildschirmdarstellung beruht auf einem Rasterizing, für jeden Pixel - bzw. bei SSAA für jeden Subpixel - wird ein Abtastwert gewonnen.
wahrscheinlich nicht- warum wird dann der unterschied gemacht?für jeden Subpixel wird ein Sample erzeugt, der Subpixel ist aber nicht dieses Sample.
weil das raster die doppelte auflösung verpasst bekommt und somit den doppelten inhalt enthält? aber halt, war 2x2 nicht die 4-fache information?ganz recht. Statt der Information von nur jedem vierten Feld hast du so die Information von jedem Feld.
und wenn ich mit 2x2 bereits alles erfasse, würde das in diesem fall das optimum darstellen?ganz recht. In diesem speziellen Fall.
warum, wenn doch ganz nach dem prinzip von faa nur die kanten, nicht aber das ganze bild gefiltert wird?beim MSAA wird das ganze Bild gefiltert: für jeden Bildschirmpixel werden (bei 2*2) 4 Subpixel erzeugt. Wie die dadurch gewonnene Möglichkeit, Zusatzinformationen zu gewinnen, genutzt wird, ist eine andere Sache ;)
Jetzt ziehe ich mal ein Beispiel aus einer deiner Artikel heran:
http://www.3dcenter.org/images/2003/08-06_pic2.png
Hier sollten an der Kante ja Mischfarben resultieren aus blau und weiß. Jetzt betrachten wir mal Pixel 3 (von oben links nach rechts gezählt). Das Textursample liefert die Farbe weiß und entsprechend der Geosamples wird in Buffer 1 und Buffer 3 dann auch weiß geschrieben. habe ich das jetzt richtig verstanden:
es wird zunächst für jeden Pixel ein Farbwert aus einem Textursample gewonnen. Nun gibt es für jeden Subpixel einen Buffer (in deinem Beispiel 4). Für jedes Subpixel wird überprüft, ob es im aktuellen Polygon liegt, und wenn ja, wird der gerade gewonnene Farbwert in den Buffer des Subpixels geschrieben?
Spasstiger
2007-02-16, 17:17:39
habe ich das jetzt richtig verstanden:
es wird zunächst für jeden Pixel ein Farbwert aus einem Textursample gewonnen. Nun gibt es für jeden Subpixel einen Buffer (in deinem Beispiel 4). Für jedes Subpixel wird überprüft, ob es im aktuellen Polygon liegt, und wenn ja, wird der gerade gewonnene Farbwert in den Buffer des Subpixels geschrieben?
Jopp, so ist es. Und das wird für alle Polgone durchexerziert.
Kladderadatsch
2007-02-16, 20:34:42
in gewisser Hinsicht ja: für jeden Subpixel wird ein Sample erzeugt. Von Sampling spricht man immer im Zusammenhang mit Abtastung. Ein Sample ist ein Abtastwert. Die Bildschirmdarstellung beruht auf einem Rasterizing, für jeden Pixel - bzw. bei SSAA für jeden Subpixel - wird ein Abtastwert gewonnen.
für jeden Subpixel wird ein Sample erzeugt, der Subpixel ist aber nicht dieses Sample.
ganz recht. Statt der Information von nur jedem vierten Feld hast du so die Information von jedem Feld.
ganz recht. In diesem speziellen Fall.
beim MSAA wird das ganze Bild gefiltert: für jeden Bildschirmpixel werden (bei 2*2) 4 Subpixel erzeugt. Wie die dadurch gewonnene Möglichkeit, Zusatzinformationen zu gewinnen, genutzt wird, ist eine andere Sache ;)
danke für deine erklärung:)
so langsam kommt licht ins dunkel;)
hat die tatsache, dass es beim msaa immer nur ein textur-sample gibt, damit zu tun, dass im gegensatz zum ss beim msaa nur ein farbwert interessant ist. (und deswegen nicht die textur geschärft wird, weswegen beim ssaa wiederum pro sample die gesamte pipeline durchlaufen wird?)
woran liegt es, dass quincunx das bild so unscharf macht? daran, dass die subpixel am rand des pixels angeordnet sind?
http://pics.computerbase.de/1/5/8/8/6/50.png
das grüne sind doch samplepositionen? warum denn 2?
Spasstiger
2007-02-16, 21:10:31
@insane in the membrane: Die Idee beim MSAA ist, Rechenleistung einzusparen. Das erreicht man dadurch, dass man pro Dreieck und Pixel den gesamten TMU-ALU-Block nur einmal durchläuft statt mehrmals.
Wenn kein MSAA-Sample ein Dreieck in einem bestimmten Pixel abdeckt, dann kann man sich die Berechnung des Farbwerts dort auch sparen.
Und wenn MSAA-Samples auf dem Dreieck liegen, wird der Farbwert für das Dreieck (in diesem Pixel) bestimmt und in die jeweils zu den Samples gehörenden Multisample-Buffern geschrieben.
Im günstigsten Fall muss bei 4xMSAA für ein Pixel der TMU-ALU-Block nur einmal durchlaufen werden, weil nur ein Dreieck unter diesem Pixel liegt.
Im ungünstigsten Fall wird der TMU-ALU-Block für ein Pixel viermal durchlaufen, weil die vier MSAA-Samples auf vier verschiedenen Dreiecken liegen.
D.h. zusätzliche Informationen werden mit MSAA nur dort erzeugt, wo Polygonkanten aufeinander treffen.
Der Speicher- und Bandbreitenbedarf ist mit MSAA aber dennoch bedeutend höher als ohne AA, weil für jedes Pixel immer soviele Farbwerte in die Buffer geschrieben werden, wie Samples vorhanden sind. Auch wenn die Farbwerte auch alle gleich sein mögen. Geht halt nur nicht anders ohne aufwändigere Logik.
Afaik wird aber sowieso Kompression bei der Speicherung der Farbwerte betrieben, um den Bandbreitenbedarf etwas zu senken (oder macht man das nur bei den z-Werten?).
woran liegt es, dass quincunx das bild so unscharf macht? daran, dass die subpixel am rand des pixels angeordnet sind?
Nach meinem Laienverständniss teilen sich bei Quincunx angrenzende Pixel die Samples und es fließen immer Farbwerte von Nachbarpixeln mit ein. Das kann man sich bildlich so vorstellen, also wenn man die Pixel mit dem Finger verwischt.
Mr. Lolman
2007-02-16, 21:35:16
Der AA-Faktor steht für die Anzahl an Samples je Pixel. Subpixel können es je nach Maske auch mehr sein, aber das interessiert auch nur das Triangle-Setup (2x2-OGSSAA braucht 4 Subpixel, 4xRGSSAA braucht 16 Subpixel). Außerdem sind Subpixel eh nur ein theoretisches Konstrukt, sie kennzeichnen gewissermaßen die Auflösung des Triangle-Setups. Für den Rechenaufwand ist die Samplezahl je Pixel entscheidend.
Dem Trianglesetup ists vom Prinzip her wurscht, wie das AA Grid aussieht. Mit Subpixel sind imho einfach die Samplepositionen gemeint. D.h ein 4xRGSSAA hat auch nur 4 Subpixel.
Spasstiger
2007-02-16, 21:42:33
Dem Trianglesetup ists vom Prinzip her wurscht, wie das AA Grid aussieht. Mit Subpixel sind imho einfach die Samplepositionen gemeint. D.h ein 4xRGSSAA hat auch nur 4 Subpixel.
Ich finde den Begriff Subpixel etwas schwammig. Samples sind klar, das sind einfach Punkte in der Fläche, an denen abgetastet wird.
Subpixel sind eigentlich Unterteilungen des Pixels in kleinere Pixel und haben wie das große Pixel eine Fläche.
Deshalb würde ich Samples und Subpixel nicht als äquivalent ansehen. Am Besten verzichtet man bei AA-Diskussionen ganz auf den Begriff Subpixel.
Ein Subpixel ist in meinem Augen z.B. eine rotes, grünes oder blaues Pixel bei einem TFT-Bildschirm.
Kladderadatsch
2007-02-16, 21:50:36
Im ungünstigsten Fall wird der TMU-ALU-Block für ein Pixel viermal durchlaufen, weil die vier MSAA-Samples auf vier verschiedenen Dreiecken liegen.
in dem fall wäre msaa genau so aufwändig wie ssaa, oder? bzw. das wäre das ss-prinzip?
wie ist dass da dann eigentlich mit dem farbwert. ist das ein mittelwert aus den 4 sampels? wo arbeitet da dann supersampling noch mal anders?
Nach meinem Laienverständniss teilen sich bei Quincunx angrenzende Pixel die Samples und es fließen immer Farbwerte von Nachbarpixeln mit ein. Das kann man sich bildlich so vorstellen, also wenn man die Pixel mit dem Finger verwischt.
gut, dann hatte ich das schonmal richtig verstanden.
Am Besten verzichtet man bei AA-Diskussionen ganz auf den Begriff Subpixel.
mit welchem begriff dann ersetzen? (um das auf aths artikel anzuwenden)
Mr. Lolman
2007-02-16, 22:02:02
hat die tatsache, dass es beim msaa immer nur ein textur-sample gibt, damit zu tun, dass im gegensatz zum ss beim msaa nur ein farbwert interessant ist. (und deswegen nicht die textur geschärft wird, weswegen beim ssaa wiederum pro sample die gesamte pipeline durchlaufen wird?)
Du denkst zu kompliziert. Fürs SSAA ist nur der Framebuffer interessant. Das Bild wir intern in einfach einer höheren Auflösung berechnet und im Framebuffer runtergesampelt. Die Subpixelposition ist dabei der GPU bis inkl. Rasterizer völlig Banane. Beim MSAA hingegen wird im TriangleSetup pro Pixel jedes Dreieck mehrfach gesampelt, die werden dann durch den Rasterizer geschickt und dann erst werden die Texturen draufgepflanzt.
woran liegt es, dass quincunx das bild so unscharf macht? daran, dass die subpixel am rand des pixels angeordnet sind?
Nö, das liegt daran, dass Quincunx eigentlich ein 2xRGMSAA ist, aber der Farbwert aus 5 Samples gebildet wird. Die restlichen 3 schnappt man sich dabei einfach von den umliegenden Nachbarpixeln. Die dadurch erkaufte Bildruhe geht einher mit einem Verlust von Bildinformation.
http://pics.computerbase.de/1/5/8/8/6/50.png
das grüne sind doch samplepositionen? warum denn 2?
Weil das 8xS ist.
Mr. Lolman
2007-02-16, 22:12:28
Ich finde den Begriff Subpixel etwas schwammig. Samples sind klar, das sind einfach Punkte in der Fläche, an denen abgetastet wird.
Subpixel sind eigentlich Unterteilungen des Pixels in kleinere Pixel und haben wie das große Pixel eine Fläche.
Und wie werden dann 16 Subpixel draus? Du brauchst zwar ein Gitter mit 16 Felder um ein schönes RG zu basteln (was ja im Screenspace ohnehin immer ein SG ist ;)), aber für die Größe des Subpixels ists das belanglos. Beim SGAA sind die Subpixel also nicht kleiner oder gar mehr als beim OGAA. Imo kann mans so unterscheiden: Quincunx AA hat 5 Samples aber nur 2 Subpixel.
Kladderadatsch
2007-02-16, 22:16:02
Du denkst zu kompliziert. Fürs SSAA ist nur der Framebuffer interessant. Das Bild wird intern in einfach einer höheren Auflösung berechnet und im Framebuffer runtergesampelt. Die Subpixelposition ist dabei der GPU bis inkl. Rasterizer völlig Banane.
wozu gibts die dann beim supersampling überhaupt?
wozu dann beim supersampling überhaupt ordered, rotated und sparse grid? (edit: ah, beim downsampling)
msaa und ssaa sind doch zwei völlig unterschiedliche ansätze, oder?
aber tasten nicht beide verfahren das pixel erst mal je nach anzahl der subpixel/samples ab..dann wären sie ja eben doch nicht völlig unterschiedlich..
sich den vorgang an sich schnipselweise zusammenzusetzen, eher zusammenzuinterpretieren ist echt nicht leicht;)
Weil das 8xS ist.
das vergaß ich dazu zu schreiben. ich meine, warum hat 8xs zwei samplepositionen?
Mr. Lolman
2007-02-16, 22:33:41
wozu gibts die dann beim supersampling überhaupt?
wozu dann beim supersampling überhaupt ordered, rotated und sparse grid? (edit: ah, beim downsampling)
Das ist prinzipbedingt. Wenn das Bild in ner höheren Auflösung berechnet wird, und anschließend runtergesampelt wird, entsteht automatisch ein Ordered Grid. Das heisst, wenn das Bild in einer 4x höheren Auflösung berechnet wird (=2x2OGSSAA=4xOGSSAA) hat man auch nur logischerweise ne jew. 2x höheren Seitenauflösung. Quasi ein 2x2EER, also nur eine neue zusätzliche Abstufung pro Seite (noAA=1x1EER). Deswegen brech ich auch nicht in Euphorie aus, wenn mit 16xOGSSAA geprotzt wird. Das Bild wird in einer 16x höheren Auflösung berechnet (also 4x4), das EER ist somit 4x4, und erlaubt somit nur jew. 3 Zwischenstufen - für praktisch 16-fache Füllratenlast!
SGSSAA funktioniert nach dem Prinzip, dass mehrere Bilder in Originalauflösung berechnet werden (steht aber eh auch im 3dfx-Artikel :|) und am Ende zusammengemischt werden. Da kann man dann natürlich ein optimales Subpixeloffset wählen und mit 4 Bildern auch ein 4x4EER erzeugen.
RGSSAA ist eigentlich ein OGSSAA was gedreht berechnet wird und erst nach dem Downsampling zurück gedreht wird. Aber imo gibts da ein paar prinzipielle Probleme, deswegen funkltioniert das bei S3 auch nicht unter Fullscreen.
das vergaß ich dazu zu schreiben. ich meine, warum hat 8xs zwei samplepositionen?
Weils eigentlich ein 4xMSAA ist was in mit doppelter Höhe (oder Breite je nach Api/TReiber) berechnet wird und anschliessend runtergesampelt wird.
Kladderadatsch
2007-02-16, 22:37:52
RGSSAA ist eigentlich ein OGSSAA was gedreht berechnet wird und erst nach dem Downsampling zurück gedreht wird. Aber imo gibts da ein paar prinzipielle Probleme, deswegen funkltioniert das bei S3 auch nicht unter Fullscreen.
Weils eigentlich ein 4xMSAA ist was in mit doppelter Höhe (oder Breite je nach Api/TReiber) berechnet wird und anschliessend runtergesampelt wird.
das sind dinge, die lese zumindest ich nicht aus den artikeln raus. kennst du eventuell englischsprachige artikel, die da kleinschrittiger erklären?
Sonyfreak
2007-02-16, 23:29:28
@Gast: Danke für deine Erklärung.
es wird zunächst für jeden Pixel ein Farbwert aus einem Textursample gewonnen. Nun gibt es für jeden Subpixel einen Buffer (in deinem Beispiel 4). Für jedes Subpixel wird überprüft, ob es im aktuellen Polygon liegt, und wenn ja, wird der gerade gewonnene Farbwert in den Buffer des Subpixels geschrieben?Legt die Anzahl der Buffer auch fest, wie hoch der maximale MSAA Faktor gewählt werden kann? Das heißt, dass wenn zb. der G70 nur 4 Buffer hat, kann er daher auch maximal 4xMSAA durchführen oder wie?
mfg.
Sonyfreak
Spasstiger
2007-02-17, 00:40:42
Legt die Anzahl der Buffer auch fest, wie hoch der maximale MSAA Faktor gewählt werden kann? Das heißt, dass wenn zb. der G70 nur 4 Buffer hat, kann er daher auch maximal 4xMSAA durchführen oder wie?
Die Buffer liegen ja im Grafikspeicher, du kannst die Farbwerte auch irgendwo im Grafikspeicher ablegen, solange sie korrekt adressiert werden.
Es sind keine Extra-Buffer-Speicher physikalisch vorhanden, die Buffer sind sozusagen virtuell. Woher die Beschränkung auf 4xMSAA beim NV40 und beim G70 jetzt wirklich kommt, kann ich auch nicht sagen. Bei der GeForce FX hatte das max. 4xOGMSAA ja was damit zu tun, dass das Triangle-Setup jede Bildschirmzeilen nur in zwei Unterzeilen zerlegen konnte.
Avalox
2007-02-17, 11:26:19
Ich probiere mich auch mal.
Das Problem im 3D Rendering ist..
dass du nur den Farb- und Helligkeitswert eines Punktes ermittelst. Ein Punkt hat keine räumliche Ausdehnung.
Ein Pixel hat aber schon eine räumliche Ausdehnung. Man bläst also im Grafik Rendering einen Punkt zu einem Pixel auf.
Weil die Geschwindigkeit eines Rechners immer zu gering ist, geht man da den einfachsten Weg und sagt ein Punkt für einen Pixel. Was dann eben zu massiven Ungenauigkeiten führen kann.
AA ist nichts anderes als einfach die Anzahl der (Mess)Punkte pro Pixel zu erhöhen. Aus der höheren Anzahl, lässt sich dann ein genauerer Rückschluss auf die Farbe und Helligkeit des Pixels ermitteln.
Alle verschiedenen AA Ansätze drehen sich nun drum, (a) welche Pixel genauer betrachtet werden müssen um ein besserers Ergebnis in angemessener Zeit zu ermitteln und (b) wie die Punkte verteilt und mit welcher Anzahl diese in einem Pixel liegen müssen. Eigentlich beides völlig nebensächlich und eine Detailfrage. Denn es ist klar, dass man möglichst alle Pixel und diese mit einer möglichst extrem hohen Anzahl an Punkten berücksichtigen sollte.
Kladderadatsch
2007-02-17, 12:27:57
AA ist nichts anderes als einfach die Anzahl der (Mess)Punkte pro Pixel zu erhöhen. Aus der höheren Anzahl, lässt sich dann ein genauerer Rückschluss auf die Farbe und Helligkeit des Pixels ermitteln.
wie verstehe ich diese definition neben der des ssaa: das bild wird einfach hochgerechnet, wodurch die x-fache informationsmenge entsteht, welche auf die tatsächliche auflösung wieder heruntergerechnet wird.
etwa so, dass eben durch die steigerung der samplerate die (nötige) höhere informationsmenge gewonnen wird?
die anordnung der subpixel (eben ob ordered, rotated oder sparse) spielt dann dabei die rolle, das sampling möglichst effektiv zu machen?
wenn mir da jemand ein :up: drunter setzt, kann ich endlich mit der referatsvorbereitung beginnen:usad:
Avalox
2007-02-17, 13:20:06
die anordnung der subpixel (eben ob ordered, rotated oder sparse) spielt dann dabei die rolle, das sampling möglichst effektiv zu machen?
Ja genau. Die optimale Anordnung ergibt sich dabei aus dem Content und ist nicht absolut.
Man macht sich zu nutze, dass in der Regel "realistische" Bilder gerendert werden sollen. In der Natur kommen gewisse Formen öfter vor als andere, für diese Formen werden dann die Anordnungen hin "optimiert".
Ein Detail um die Geschwindigkeit zu steigern.
Diese "Natur" optimierten Anordnungen mögen für abstrakte Renderings dagegen völlig kontraproduktiv sein. Ein universelles Ideal gibt es nicht.
Mr. Lolman
2007-02-17, 21:28:58
wie verstehe ich diese definition neben der des ssaa: das bild wird einfach hochgerechnet, wodurch die x-fache informationsmenge entsteht, welche auf die tatsächliche auflösung wieder heruntergerechnet wird.
SSAA != SSAA. Die Modi heissen gleich aber funktionieren tw. sehr unterschiedlich (wie in meinem vorigen Post schon angedeutet)
Das Bild wird somit nicht hochgerechnet (klingt zu sehr nach interpoliert und dass ist falsch) , sondern das Rendertarget vergrößert, also schonmal in ner höheren Grundauflösung berechnet. Vor der Ausgabe wird es in die gewünschte Auflösung runtergerechnet. Dass ist die simpelste Form von (SS)AA.
D.h. wenn du 1280x1024+8xSAA eingestellt hast, berechnet die Karte eigentlich 2560x1024+4xMSAA. Klingt toll, ist es aber nicht, wenn man bedenkt, dass 6xRGMSAA eine konsistentere EER als 8xS hat (nämlich 6x6 anstatt 4x8) und keine Auflösungsverdoppelung notwendig hat.
(Deswegen ists ja auch 'unfair' beide Modi gegeneinander zu benchen ;))
etwa so, dass eben durch die steigerung der samplerate die (nötige) höhere informationsmenge gewonnen wird?
Ja kann man so sagen. Aber die Aussage ist eher verwirrend, weil zu allgemein. Denn die Samplerate wird im Fall von OGSSAA ja durch die Vergrößerung des Rendertargerts erhöht und nicht ein mehrfaches Sampling im Rasterizer. Aber im Grunde stimmts. Durch eine Steigerung der Samplerate wird der informationsgehalt höher. Das gilt aber für alle aktuellen AA-Modi (ausgenommen Quincunx ;))
wenn mir da jemand ein :up: drunter setzt, kann ich endlich mit der referatsvorbereitung beginnen:usad:
:up:
Diese "Natur" optimierten Anordnungen mögen für abstrakte Renderings dagegen völlig kontraproduktiv sein. Ein universelles Ideal gibt es nicht.
Naja aufgrund beschränkter Sampleanzahlen und unter dem Aspekt der Performance ist ein SGAA im Durchschnitt dem Ideal weitaus näher als OGAA.
Denn Aliasing wird umso störender je flacher die Kanten sind und ein (gutes) Sparse Grid hat genau bei flachen Kanten seine Stärken. Das 3dfx 8xSGSSAA ist somit quasi perfekt - für ein AA mit 8 Samples (Das G80 AA hat mir anscheinend eine etwas wirre Subpixelverteilung). So wurde vor kurzem ein TDU 16xQAA Screenshot gepostet, in der sich diese imo eher ungünstige Sampleverteilung zeigt: http://www.forum-3dcenter.de/vbulletin/showthread.php?p=5243538#post5243538 (Vergrößerung in Post #46)
Kladderadatsch
2007-02-17, 23:47:56
gut, dann noch mal ein dickes danke für eure hilfe.
Das Bild wird somit nicht hochgerechnet, sondern das Rendertarget vergrößert, also schonmal in ner höheren Grundauflösung berechnet.
rendertarget = pixelraster?
beides beschreibt ja im prinzip das gleiche, blos dass letzteres genauer, ersteres dafür aber verständlicher ist, (und das prophylaktische) oder?;)
@ Spasstiger: Danke für die Erklärung. Ich denke, dass sie mir doch ein gutes Stück weiter geholfen hat.
Damit habe ich eben dieses Farbmischen gemeint, dass du in deinem nächsten Satz erwähnt hast. War scheinbar nicht der richtige Ausdruck, aber mir ist kein besserer eingefallen.
Jetzt vielleicht noch ein kurzes Beispiel, ob ich das ganze eh korrekt verstanden habe. Bei einer Szene treten beispielsweise 3 farbige Dreiecke auf einem einfärbigen Hintergrund auf. Da berechnet die Grafikkarte zuerst wie und wo sich diese Dreiecke überdecken, und dementsprechend werden sie nach Sichtbarkeit sortiert.Nein, ganz falsch =)
Die GPU rendert Dreieck pro Dreieck, wobei die Dreiecke im Prinzip in jeder beliebigen, zufälligen Reihenfolge kommen können.
- GPU erhält das nächste Dreieck.
- Dieses Dreieck wird in Pixel zerlegt.
- Für jedes Pixel, das irgendwie betroffen ist, wird festgestellt, welche Subpixel vom Dreieck überdeckt werden.
- Die Subpixel, die nicht bedeckt sind, werden ausmaskiert. Die Überdeckungsinformation wird im Trianglesetup gemacht. (Das Dreieck wird also in Wahrheit nicht in Pixel, sondern schon in Subpixel zerlegt.)
- Ebenso werden die Subpixel, die bereits (von im Vordergrund befindlichen Dreiecken) übermalt sind, nicht in den Framebuffer geschrieben. Dies wird via Z-Test festgestellt.
- Am Ende hat man im Framebuffer die Szene in höherer Auflösung. Bei MSAA sind nur die Geometriekanten höher aufgelöst, die Texturen nicht: Bei 4x MSAA steht innerhalb eines Dreiecks pro Pixel 4x dieselbe Texturfarbe.
- Das Bild wird dann herunterskaliert und angezeigt. Beim Herunterskalieren findet die Farbmischung der Subpixel statt.
- Innerhalb einer Dreiecksfläche werden bei 4x AA vier mal dieselben Farben gemischt – es ändert sich nichts.
- An Kanten werden unterschiedliche Farben gemischt – so kommen die Übergänge zustande, die man dann im endgültigen Bild sieht.
Carl-Gustav
2009-04-21, 18:56:26
Ich hab auch mal eine Frage zu Transparenz-AA oder Adaptiv-AA: Ich habe es so verstanden, daß bei diesem Verfahren all die Texturen mit SSAA versehen werden, bei denen es sich "lohnt" (weil Transparenz vorkommt).
Wozu braucht man dann überhaupt noch "vollständiges" SSAA?
Avalox
2009-04-21, 20:25:32
Wozu braucht man dann überhaupt noch "vollständiges" SSAA?
Weil das eine eine effektive, das andere eine effiziente Methode ist.
Oh, eine AA-Thread-Leiche. Dann will ich auch mal fleddern:
Hintergrund für ein Anti-Aliasing-Filter ist bekanntlich das in der digitalen Signalverarbeitung omnipräsente Shannon/Nyquist Abtasttheorem. Wünschenswert wäre ein unendlich steilflankiges Tiefpassfilter mit unendlich hoher Sperrdämpfung. Das Downsampling entspricht in der 1D-Welt wohl einem moving-average FIR Filter und ist eigentlich ein ziemlich dämlicher Ansatz für ein TP Filter (erster Treffer bei Gurkl: http://ptolemy.eecs.berkeley.edu/eecs20/week12/freqResponseRA.html). In der Echtzeitgrafik mangelt es wohl an vorhandenen Samples, aber offline ginge da sicher noch einiges. Ist da was dran an meinen Überlegungen?
Avalox
2009-04-21, 21:40:53
Oh, eine AA-Thread-Leiche. Dann will ich auch mal fleddern:
Ja. Es mangelt an Samples pro Bild. Aber ebenso stellt das Bild, auch mit bester Glättung ein zeitbezogenes extremes Alias-Artefakte selbst dar.
Die Bildschärfe ist ein Alias Effekt. Welches nur durch ein zeitliches Anti-Aliasing, eben Motion Blur verbessert werden, oder durch einer höheren Auflösung sprich mehr Bilder pro Sekunde (Bildfrequenz) verringert werden kann.
Carl-Gustav
2009-04-23, 23:58:36
Ich hab da noch eine Frage zu diesem Artikel: http://alt.3dcenter.org/artikel/2006/10-12.php
Es wird ja TAA-MS angesprochen. Da fiel mir dieser Satz auf: Trotzdem ist es bei Texturvergrößerung oft angenehmer, Alphatest-Kanten mit TAA-MS zu behandeln. Bei Texturverkleinerung ist das Supersampling-Verfahren allerdings überlegen, je nach Situation mehr oder weniger deutlich.
Also ist es wohl abhängig vom LoD einer transparenten Textur, ob SSAA notwendig ist, oder nicht.
Frage: Ist es nicht möglich, dass die GraKa das testet und dann entweder TAA-MS oder TAA-SS verwendet?
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.