PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perspektivenkorrektes Anisotropisches Filtering und Tile Based Renderer


nggalai
2001-10-02, 21:23:02
Nabend,

Im Follow-up Diskussion zum TnL-Artikel landeten wir plötzlich in einer Diskussion über die Vorteile von Tilern beim Texturfiltern (i.e. gibt's die oder ned), und im Laufe dieser OT-Sache hab' ich dann das hier geschrieben:P.S. wie ich oben schrieb, es SOLLTEN nicht mehr als ein Tile fürs AF gebraucht werden, pro Pixel. Allerdings ist noch die Frage da, wie das verhindert werden kann, mit Tilern--anders als FSAA, welches in 2D Filtert (die Bildschirmfläche, sozusagen) ist die Anisotropie abhängig vom Tiefenwinkel (wie stark ist die Textur geneigt?). Wenn Du echtes, perspektivenkorrektes AF machen willst, wird's immer Tile-Überschneidungen geben.

Stellt's euch so vor, als ob ihr durch ein Gitter auf eine Strasse guckt--das sind die Render-Tiles. Die AF Sample-Bereiche werden jedoch je nach Tiefeninfo gelegt, also ein Gitter (oder eher, je nach Implementation, eine Kette von Ellipsen), welches auf der Strasse liegt. Da wirst Du immer Überschneidungen haben, oder aber das "Strassengitter" zu gunsten des "Bildschirmgitters" beeinträchtigen, i.e. die AF-Qualität runterschrauben müssen.

Kommentare?Ja, einen Kommentar. :) Ich hab's nochmals durchgelesen, im Kontext der Diskussion, und ich weiss ned wo, aber irgendwo hat's da einen Denkfehler drin. Nochmals zur Klarstellung: ich spreche NICHT explizit von der Kyro, und auch nicht von der PVR-Implementation von AF, sondern von einem theoretisch "exakten," perspektivisch-korrekten Verfahren für anisotropes Filtering. (Also eher GF-like als Radeon-like.)

Ich weiss nicht allzuviel über die Render-Pipeline von Tile Based Renderern, deshalb hier mal die Fragen in den Raum gestellt:

- wo liegt mein Fehler?

- innerhalb der Render Pipeline, wann wird die Anisotropie korrigiert? Als Teil des Texturing? Als separater Schritt? Beim eigentlichen in-den-Framebuffer-Schreiben?

- wird anisotropes Filtering über die ganze Szene berechnet (i.e. pixelweise) oder als dem Blending ähnlichen Effekt zu den Textur-Informationen pro Dreieck dazugerechnet?

- hat ein Tiler beim Filtern theoretische Vorteile gegenüber einem (mit mehreren Texture pipes pro pixel pipe ausgestatteten) SGI Renderer?

Danke für jeden Input,

ta,
-Sascha.rb

HOT
2001-10-02, 23:58:53
Als erstes müssen wir da mal differenzieren:
Anisotropic Filering hat nichts perpective Correction zu tun. Der Kyro kann Texturen über mehrere Tiles perspektiv korrekt darstellen, ohne tileübergreifend zu arbeiten. Das Ganze kann man am besten mit der ZD 3D WInbench 2000 testen, da wird eine Textur mehr oder weniger perspektiv korrekt über den ganzen Bildschirm "gebogen".
Das liegt daran, dass die Textur komplett geladen wird und ein entsprechender Algorithmus (genau wie in einem SGI Renderer auch) sie perspektiv korrigiert.
Anistropic Filtering jedoch hat an sich nix mit der perspektive Correction zu tun, sondern lediglich mit Pixelmittelwerten der Textur. Da die Textur aber ganz in die Renderpipe geladen wird, kann auch ein deferred Renderer problemlos eine Textur (egal wieviele Subpixel) anisotropic filtern, genau wie ein SGI-Renderer auch.

Du siehst also, im Grunde funktioniert eine Tile Based Renderer in Tachen Texturepipes nicht anders als ein SGI Renderer.
Die entsprechenden Texturen wer dann während des Rendervorgangs Pixelweise geteilt auf die Polygone jedes Tiles aufgetragen. Also eine ganz saubere Sache, die man an der Grafik an sich nicht erkennen kann. Ausser man übertaktet den Kyro, so dass er nichtmehr korrekt arbeiten kann :D

nggalai
2001-10-03, 08:32:19
Hey, danke fürs Feedback--jetzt weiss ich, dass ich mich klarer ausdrücken muss. :)

Ja, anisotropisches Filtering hat nix mit Perspektivischer Korrektheit von Texturen zu tun, das ist mir klar. Jedoch kannst Du anisotropisches Filtering SELBST entweder perspektivisch korrekt rendern (GF Karten machen das recht gut) oder auf Tricks zur Reduktion des Rechenaufwandes zurückgreifen (wie das ATi auch schon mit den MIP-maps selbst macht).

Hoffe, dass das so klarer geworden ist. :)

@ HOT,

Du sagst also, dass AF dem "blending" Modell folgt, i.e. Teil des normalen Texturing-Vorgangs pro Polygon ist?

ta,
.rb

HOT
2001-10-03, 11:54:58
IMHO wird erst gefiltert und dann geblendet. Ausserdem, wo ist das Problem? Selbst wenn du perspektiv korrektes aniso hat, spielt das doch kaum ne rolle, oder? Das gilt ja nicht nur für das anisotropische filtern, das gilt für echtes trilineares genauso. Je weiter das Objekt entfernt ist, desto mehr Pixel müssen bei anisotropischen Filtern zur Mittelwertberechnung herangezogen werden, deshalb braucht man ja auch so viele Taktzyklen zu dessen Berechnung. Soweit ich weiss basiert das anisotropic Filtering des Geforce und Kyro auf einem LOD System, genau wie echtes Trilinear auch. Wie gesagt, ob sich das jetzt im ganzen Bild abspielt, oder in einem Tile, macht absolut keinen Unterschied, da die Textur komlett gefiltert wird. Die LOD Werte sind ja fest vorgegeben.

Xmas
2001-10-04, 18:03:06
Hm, ich versteh irgendwie nicht ganz was ihr meint...
Auf jeden Fall erzeugt anisotropisches Filtern genauso wie die anderen Filtermethoden letztlich einen Wert pro Pixel, der in die Blending-Operationen einbezogen wird. Und die Texel, die zum Filtern verwendet werden liegen alle innerhalb eines Pixels (sollten sie zumindest), wie kann es da tileübergreifende Überschneidungen geben?

nggalai
2001-10-04, 18:07:38
@ Xmas,

hmm, ja, ich denke, Du hast meinen Denk-Fehler gefunden. HMM. Muss nochmals drüber nachdenken. Ich denke, mein Haupt-Missverständnis liegt in der Frage, wann in der Pipeline gefiltert wird, und in wiefern dieses Filtering per pixel oder per polygon geschieht.

Aber auch dir, HOT, vielen Dank für die Denkanstösse. *hirnt weiter*

ta,
.rb

ow
2001-10-06, 12:07:12
Originally posted by Xmas
Hm, ich versteh irgendwie nicht ganz was ihr meint...
Auf jeden Fall erzeugt anisotropisches Filtern genauso wie die anderen Filtermethoden letztlich einen Wert pro Pixel, der in die Blending-Operationen einbezogen wird. Und die Texel, die zum Filtern verwendet werden liegen alle innerhalb eines Pixels (sollten sie zumindest), wie kann es da tileübergreifende Überschneidungen geben?


Ich glaube, hier drehst du die Reihenfolge etwas um;).

Beim Filtern wird ein Pixel immer aus vielen Texeln berechnet.

Ein Dreieck kann mehrere Tiles überdecken (dürfte sogar eher die Regel als die Ausnahme sein), aber für jedes Dreieck wird die zugehörige Textuir nur einmal angegeben (für einen der Eckpunkte des Dreiecks nämlich).

Der Kyro muss also ein Dreieck, das mehrere Tiles überdeckt, zerlegen und für jeden dieser Dreiecksteile die Textur angeben.

Xmas
2001-10-06, 15:33:04
Ohm, ow, kann es sein dass du mein Posting völlig falsch verstanden hast? Ich sehe bei deiner Antwort schlicht gar keinen Bezug auf mein Posting...
Ich habe weder von Dreiecken und deren Zerlegung noch von der Angabe der Texturen geschrieben.

nggalai
2001-10-06, 15:49:16
XMAS,

Auf jeden Fall erzeugt anisotropisches Filtern genauso wie die anderen Filtermethoden letztlich einen Wert pro Pixel, der in die Blending-Operationen einbezogen wird. Und die Texel, die zum Filtern verwendet werden liegen alle innerhalb eines Pixels (sollten sie zumindest), wie kann es da tileübergreifende Überschneidungen geben?Dein Verwenden von "Texel" kann so missverstanden werden, daher ows Einspruch. Natürlich ist ein Texel nie grösser als ein Pixel, aber ein Pixel der TEXTUR, nicht des Bildes.

Durch durch die Perspektive kann sehr wohl mehr als ein Texel in einen schlussendlich gerenderten Pixel übergehen, dies ist der Normalfall, ausser, Du schaust "gerade" auf eine texturierte Fläche.

à propos:

Meine Aussage, dass Du meinen Denkfehler gefunden haben könntest liegt in deinem Satz "... einen Wert pro Pixel, der in die Blending-Operationen einbezogen wird." Ich bin mir noch nicht sicher, ob das so stimmt (i.e. ob das anisotrope Filtering Teil des Blending-Vorganges ist, was ja auch eine meiner Fragen war), aber falls Du damit recht hast, dann ist das mein Denkfehler. :)

Weshalb bin ich mir ned sicher mit deiner Aussage? Naja, es wird bei anisotropischem Filtering eben nicht nur einfach das "Bild" gefiltert, sondern die Texturen in Lage zur Perspektive / Geometrie. Daher auch meine Ursprungsfrage.

ta,
.rb

nggalai
2001-10-06, 15:55:12
P.S. tschuldigung wegen der 2 Edits, hoffentlich habe ich euch nicht beim zerlegen meiner ersten Antwort unterbrochen. :D

ta,
.rb

Xmas
2001-10-06, 17:37:10
Dann will ich das mal genauer ausführen...
Erst mal die Begriffe klären: Pixel ist ein Farbwert im Framebuffer (bzw ein Punkt auf dem Bildschirm), Texel ist ein Farbwert in einer Textur (und zwar genau einer, nicht gefiltert). Nun gibt es sowohl bei Framebuffer als auch bei Texturen zwei Betrachtungsmöglichkeiten: Pixel/Texel sind kleine ausgefüllte Rechtecke, oder Pixel/Texel sind flächenlose Punkte und geben nur den Farbwert an genau diesem Punkt an. Und beide Vorstellungen werden bei 3D-Grafik verwendet.
Einerseits ist z.B. ein Pixel auf dem Bildschirm tatsächlich flächig, andererseits stellt das Triangle Setup (und speziell das Raycasting des Kyro) nur fest, ob ein Punkt innerhalb eines Dreiecks liegt.
Nun werden aber sowohl Dreieckskoordinaten als auch Texturkoordinaten als FP-Werte, also keine Ganzzahlen, angegeben. Bei der einfachsten Texturiermethode, dem Point Sampling, geht man davon aus, dass Texel rechteckig und Pixel nur Punkte sind. In der Praxis werden die Texturkoordinaten gerundet, es wird der Farbwert jenes Texels verwendet, der den Texturkoordinaten am nächsten ist.
Beim Bi-/Trilinearen Filtering geht man davon aus dass sowohl Pixel als auch Texel nur Punkte sind. Nun muss man aber irgendwie Farbwerte für nicht ganzzahlige Texturkoordinaten finden. Diese liegen ja irgendwo zwischen den Texeln. Also interpoliert man zwischen den Texeln. Das wird bilinear (also in zwei Richtungen linear) gemacht, könnte aber durchaus auch biquadratisch oder bikubisch gemacht werden. Zur interpolation liest man vier Texel ein und gewichtet diese, je nach Fraktionalteil der Texturkoordinaten.
Beim anisotropischen Filtern geht man davon aus dass Texel Punkte, aber Pixel Rechtecke sind. Nun muss man ein Samplefenster berechnen, denn es reicht nicht mehr aus pro Pixel nur ein Texturkoordinatenpaar zu haben, das genau dem Pixelpunkt entsprechen würde. Abhängig vom Neigungswinkel des Dreiecks ist dieses Samplefenster mehr oder weniger lang, und, auf die Textur projiziert, ein Trapez. Innerhalb dieses Samplefensters werden nun mehrere Farbwerte ermittelt, nach Art der bi-/trilinearen Filterung. Alle Farbwerte die ermttelt werden (und gemischt einen Farbwert ergeben, der beim Blending weiterverarbeitet wird), befinden sich so innerhalb des einen rechteckigen Pixels, der gerade gerendert wird.

nggalai
2001-10-06, 20:15:01
Hi Xmas,

danke für die ausführlichen, err, Ausführungen. :) Ich denke allerdings, dass dies allen Beteiligten in diesem Thread schon bekannt war. Daher auch meine recht spezifischen Fragen am Kopf dieses Threads, ich habe mich wohl wiedermal ein wenig unbeholfen auf Deutsch ausgedrückt. ;)

Du hast mit diesem Absatz eigentlich den Kern meines Verständnisproblems getroffen, i.e. weshalb ich überhaupt zu Grübeln began und dieses Posting machte:Beim anisotropischen Filtern geht man davon aus dass Texel Punkte, aber Pixel Rechtecke sind. Nun muss man ein Samplefenster berechnen, denn es reicht nicht mehr aus pro Pixel nur ein Texturkoordinatenpaar zu haben, das genau dem Pixelpunkt entsprechen würde. Abhängig vom Neigungswinkel des Dreiecks ist dieses Samplefenster mehr oder weniger lang, und, auf die Textur projiziert, ein Trapez.Hier also die Kernfrage: Wie kann ein Tiler, der ja nur einen rechteckigen Ausschnitt aufs mal in den Rendervorgang einbezieht, dafür sorgen, dass das Samplefenster nicht die Tiles überschneidet? Oder ist dies unnötig (i.e. es ist schnurz, wie/wo das Samplefenster liegt), weil das, err, Tilen auf diese Stelle der Renderingpipeline keinen Einfluss hat?

Oder anders gefragt, eine komplette Basics-Frage was Tiler betrifft (wie schon gesagt, ich kenne mich mit der Render-Pipeline eines Tilers nicht sonderlich gut aus): Bezieht sich das Tilen nur auf die Geometrie-Daten? Und wenn ja, wie kann ein Tiler die (geometrischen, i.e. Neigung und Position) Informationen, welche innerhalb der Position des Samplefensters liegen aber ausserhalb des gerenderten Tiles, für anisotropisches Filtering verwenden?

Ich verstehe, dass z.B. die Kyro trilineares und bilineares Texturfiltering komplett on-chip macht und die Farbwerte dann in den Framebuffer geschrieben werden. Aber in dem Fall reden wir ja auch von Point Sampling / Linear_Nearest, und nicht von einem relativ grossen Samplingfenster, welches bei anisotropischem Filtering verwendet wird.

nochmals, danke für die ausführlichen Antworten, aber kannst Du vielleicht auf meine Punkte eingehen? Du scheinst viel von Tilern zu verstehen, und ich bin für jeden Input dankbar.

ta,
-Sascha.rb

P.S. Ich habe gerade nochmals meine Eingangs-Fragen ausm ersten Posting durchgelesen ... uiuiui ... Ich brauche wohl echt "Deutsch für Du, nur 5 Geld fünfundzehn ..." ;) .rb

Quasar
2001-10-06, 20:48:37
Ohne auch nur irgendwas technisches vom Renderingvorgang eines Tilers zu verstehen, halte ich die Kanten für Problematisch, da, wie schon gesagt, teilweise bis zu 64 Farbwerte für die Interpolation auf ein Pixel herangezogen werden...oder?

HOT
2001-10-06, 23:30:01
Diese Pixel sind zwar theoretisch Rechtecke (Trapeze), aber immernoch in Pixelgrösse. Die Trapeze werden doch nur anhand der Texturdaten ermittelt. Wieso sollte es den Rand eines Tiles überschneiden?

Xmas
2001-10-07, 00:42:37
Ich hoffe ich hab deine Frage jetzt verstanden, nggalai, also denke ich mal du hast Probleme dir das "Samplefenster" vorzustellen.
Stell dir mal folgendes vor: Du hast eine Lampe, ein quadratisches Gitter aus Draht, und ein Stück kariertes Papier, das hinter dem Gitter liegt. Das Gitter wirft also einen Schatten auf das Papier, wobei dieser Schatten trapezförmige Zellen bildet. Jetzt stell dir vor, das Gitter wäre der Bildschirm, jedes Loch entspricht einem Pixel, das Blatt Papier ist eine Textur und jede trapezförmige Zelle ist das Samplefenster eines einzelnen Pixels.
Also befinden sich die Texel, die für einen Pixel gelesen werden, innerhalb dieses einen Pixels.

Beim Tilen werden die Dreiecke eigentlich nicht wirklich zerlegt, d.h. es finden keine Clipping-Berechnungen statt. Jedes Dreieck wird jedem Tile zugeordnet, das es belegt, und zwar ganz, nicht auf die Größe des Tile zurechtgeschnitten. Der Kyro macht dann pro Dreieck Raytracing, d.h. für jeden Pixel im Tile stellt er fest ob das Dreieck dort sichtbar ist.

nggalai
2001-10-07, 12:55:51
*an den Kopf schlag*

DUH ! Ich hab' angenommen, dass die 8-16 samples beim anisotropischen Filtering PIXEL samples seien--aber das sind TEXEL.

Jetzt wird mir einiges klarer ... :)

Danke fürs Knotenlösen, Xmas.

ta,
.rb

aths
2001-11-02, 22:34:48
"Danke fürs Knotenlösen, Xmas."

... der mir heute entscheidend weiter geholfen hat, einen Rotationskörper korrekt zu beleuchten :)