PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Directionally adaptive edge AA filter


Ailuros
2009-11-17, 11:25:26
http://developer.amd.com/gpu_assets/AA-HPG09.pdf

Irgend ein Kommentar von den Gurus hier?

Coda
2009-11-17, 19:49:58
Was willst du denn wissen? Das verbessert offenbar die Qualität des Downsamplings braucht aber Rechenleistung.

Edit: Das ist auch das was ATI offenbar schon seit HD2000 macht beim Edge-Detect.

Spasstiger
2009-11-17, 20:05:09
Edit: Das ist auch das was ATI offenbar schon seit HD2000 macht beim Edge-Detect.
Nicht ganz. Bei ATIs Edge Detect spielen die Gradienten der Kantenpixelfarben keine Rolle, sondern es werden einfach alle Kantenpixel in gleicher Weise mit dem Wide-Tent-Filter behandelt.
Durch das Einbeziehen der Gradienten kann man die zu mischenden Samples besser wählen und reduziert dadurch unnötige Unschärfe an den Kanten.

Coda
2009-11-17, 20:07:49
Nicht ganz. Bei ATIs Edge Detect spielen die Gradienten der Kantenpixelfarben keine Rolle, sondern es werden einfach alle Kantenpixel in gleicher Weise mit dem Wide-Tent-Filter behandelt.
Anscheinend ja nicht. Lies das Paper.

"This filter is the basis for the Edge-Detect Custom Filter AA driver feature on ATI Radeon HD GPUs."

Spasstiger
2009-11-17, 20:10:11
Hast du irgendwelche Papers zu der Implementierung von ATI? Mein Kenntnisstand ist, dass alle Samples von Kantenpixeln (gemäß MSAA) mit demselben Wide-Tent-Downsampling-Filter behandelt werden. D.h. keine Vorzugsrichtung bei der Wahl der Samples.

"This filter is the basis for the Edge-Detect Custom Filter AA driver feature on ATI Radeon HD GPUs."
Ok, hab nur die Bildchen angeschaut. Aber es kann ja trotzdem Implementierungsunterschiede geben. Jedenfalls kann ich mir nicht vorstellen, dass die Radeons in einem Zwischenschritt auch die Gradienten berechnen. Kosten vs. Nutzen dürfte in keinem guten Verhältnis stehen.

Coda
2009-11-17, 20:15:25
Für Gradienten braucht man keinen Zwischenschritt, deshalb brauchst du dir das auch nicht vorstellen.

Spasstiger
2009-11-17, 20:27:21
Kann es sein, dass du auf die Geometrie-Gradienten anspielst? Hier kommt es ja auf die Farbgradienten an, die nicht zwangsweise mit den Geometriegradienten übereinstimmen müssen. Das Paper beschreibt das Berechnen der Gradienten auch recht ausführlich. Hier die Schritte des Algorithmus:

Pass 1 Identify edge pixels using the MSAA buffer. Seed the
frame buffer by performing a standard resolve at each pixel.

Pass 2 Mask out candidate pixels using edge patterns.

Pass 3 Compute the edge gradient for pixels that were not rejected
in the last pass and use thresholding to further eliminate
pixels. Values are written to a floating point buffer.

Pass 4 Derive the final frame buffer color for the pixels from
the previous pass through stochastic integration using samples
from a 3x3 pixel neighborhood. Integration and weights are
calculated in the shader. All other pixels have already been
filtered during the first pass.

Klingt nicht so, als ob man sich die Gradientenberechnung sparen könnte.

Coda
2009-11-17, 20:32:24
Es ist auf jeden Fall so, dass es eigentlich Hardware dafür gibt. Man kann in einem Shader für beliebige Werte das lokale DDX und DDY auswerten. Und zwar in einer Instruction.

Man muss sowieso einen zusätzlich Pass machen um die Pixel zu bestimmen die eine Kante beinhalten. In dem Schritt wird wohl auch gleich der Gradient rausgeschrieben.

Und doch, ich bin mir ziemlich sicher, dass das genau das ist was bei Edge-Detect gemacht wird.

Spasstiger
2009-11-17, 20:55:32
Ok, ich kenne die Renderpipeline und die APIs nur sehr oberflächlich, insofern muss ich deine Antwort so stehen lassen und davon ausgehen, dass du richtiger liegst als ich. ;)
Eigentlich müsste man doch mit Testszenen ermitteln können, ob die Sample-Auswahl fürs Downsampling von den Gradienten beeinflusst wird oder nicht. Eine wandernde schwarze vertikale horizontale oder vertikale Linie auf weißem Hintergrund dürfte in Gradientenrichtung nur soviel verschiedene Farbabstufungen besitzen wie durch das reine MSAA vorgegeben. Denn in Gradientenrichtung werden keine Samples von benachbarten Pixeln herangezogen.

aths
2009-11-24, 23:11:54
Und doch, ich bin mir ziemlich sicher, dass das genau das ist was bei Edge-Detect gemacht wird.Edge-Detect auf Radeon funktioniert so dass geprüft wird ob alle Color-Samples im Pixel den gleichen Farbwert haben. Wenn ja, gilt es als Textur-Pixel und Blurring findet nicht statt. Wenn nein, gilt es als Kantenpixel und Umgebungspixelfarben fließen mit ein.