PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Echte" Texturfilterung


aths
2003-05-03, 16:56:52
Trikubisches 32:1 AF?

Dazu bräuchte es FP-Texturen einen FP-Framebuffer.

Warum nicht ein ganz anderer Ansatz? Grundidee: Alle Texturen liegen als Frequenzspektrum vor. Für jedes Pixel wird berechnet, wie es auf der Textur liegt. Das resultiert in einem Viereck. Diese Fläche wird aus der Textur gesampelt.

Da ist dann gleich alles drin.

Nachteil: Bei sehr langen Projektions-Flächen würde das Sampling sehr lange dauern. Deshalb könnte man doch noch mit einigen MIP-Leveln arbeiten. Ist die Fläche in einer Ausdehnung besonders lang, wird aus einem MIP-Level gefiltert, so dass die Länge (bzw. Fläche) begrenzt ist. Wird das spät genug gemacht, brauchts auch keinen "trilinearen" Anteil.

Vedek Bareil
2003-05-03, 19:19:17
würde das nicht bedeuten, daß man für jedes einzelne Pixel eine Fourier-Trafo des Frequenzspektrums der Textur durchführen müßte?
Das wäre dann doch auch ziemlich langsam.

aths
2003-05-03, 19:41:01
Originally posted by Vedek Bareil
würde das nicht bedeuten, daß man für jedes einzelne Pixel eine Fourier-Trafo des Frequenzspektrums der Textur durchführen müßte? Zum sampeln wäre eine Fourier-Synthese erforderlich, also die Umkehr-Operation. Die Textur selbst muss transformiert werden, ja.

Unregistered
2003-05-03, 22:57:34
Originally posted by aths
Warum nicht ein ganz anderer Ansatz? Grundidee: Alle Texturen liegen als Frequenzspektrum vor. Für jedes Pixel wird berechnet, wie es auf der Textur liegt. Das resultiert in einem Viereck. Diese Fläche wird aus der Textur gesampelt.


Hi aths,

ob man diese Berechnung im Frequenzraum oder im Ortsraum durchführt ist wurscht. Über die si Funktion [si(x) = sin(x)/x] kann man im Ortsraum durch eine Faltung den Farbwert bestimmen, den man auch durch die Fourier-Berechnung bekäme.

Das Problem ist, daß man korrekterweise über die Fläche integrieren müßte, der das Pixel auf dem Bildschirm zugeordnet ist, um den Farbwert zu bestimmen.

Allerdings ist diese Präzision kaum nötig, denn der Einfluß der Pixel auf den Farbwert in Abhängigkeit des Abstandes vom Sample-Punkt ist reziprog zum Abstand (getrennt auf den beiden Achsen - die Fouriertransformation ist separierbar) - |si(x)| <= 1/|x|. Mehr als 2 oder 3 Texturpixel nach rechts/links vom Samplepunkt zu betrachten, lohnt sich also nicht, d.h. eine echte Fouriertransformation muß man gar nicht durchführen.

Gruß

Jörg

zeckensack
2003-05-03, 23:03:19
Summed area tables sind unkomplizierter, und leisten beliebig große Integrationsflächen in konstanter Zeit.
Außerdem können sie Mipmaps in den meisten Anwendungsfällen überflüssig machen (spart Speicher, ob's wirklich schneller ist, ist wegen Cache-Problemchen allerdings zweifelhaft).

Xmas
2003-05-04, 00:33:18
Originally posted by Unregistered
Allerdings ist diese Präzision kaum nötig, denn der Einfluß der Pixel auf den Farbwert in Abhängigkeit des Abstandes vom Sample-Punkt ist reziprog zum Abstand (getrennt auf den beiden Achsen - die Fouriertransformation ist separierbar) - |si(x)| <= 1/|x|. Mehr als 2 oder 3 Texturpixel nach rechts/links vom Samplepunkt zu betrachten, lohnt sich also nicht, d.h. eine echte Fouriertransformation muß man gar nicht durchführen.
Auch wenn das unter Signaltheoretikern die verbreitete Meinung zu sein scheint, so ist sie IMO falsch, denn in diesem Fall gibt es keinen Samplepunkt sondern nur eine "Samplefläche", und jeder Punkt dieser Samplefläche hat den gleichen Einfluss auf den finalen Farbwert.

Ebenso idiotisch finde ich die Anwendung einer Ellipse als Filterkernel beim anisotropen Filtern. Das ist *falsch*! Korrekt ist es, die Projektion eines Quadrats (sofern Pixel quadratisch sind) auf die Textur zu berechnen und daraus dann den Farbwert anteilig zu bestimmen.

Demirug
2003-05-04, 00:58:18
Also wenn mich meine Erinnerung nicht ganz im Stich läst ist doch der Ideale Reconstructions-Filter eine Sinus function. Was aber in der Praxsis nicht anwendbar ist da man sonst für jedes Sampel die ganze Texture durchrechnen müsste.

Eine gute Näherung scheint ein 4*4 bicubic Kernel zu sein.

Edit: Nicht Sinus sondern sinc(x)

aths
2003-05-04, 16:17:53
Originally posted by Xmas
Auch wenn das unter Signaltheoretikern die verbreitete Meinung zu sein scheint, so ist sie IMO falsch, denn in diesem Fall gibt es keinen Samplepunkt sondern nur eine "Samplefläche", und jeder Punkt dieser Samplefläche hat den gleichen Einfluss auf den finalen Farbwert.Eben, ich möchte die genaue Projektionsfläche ("Samplefläche") haben. Ob nun mit Fourier, oder nicht, "echte" Texturfilterung geht ja nur wenn man exakt das ausliest, was ins Pixel gehört.
Originally posted by Xmas
Ebenso idiotisch finde ich die Anwendung einer Ellipse als Filterkernel beim anisotropen Filtern. Das ist *falsch*! Korrekt ist es, die Projektion eines Quadrats (sofern Pixel quadratisch sind) auf die Textur zu berechnen und daraus dann den Farbwert anteilig zu bestimmen. FSAA könnte da natürlich schwierig werden. (Ohweia, da müsste man noch gleichzeitig echtes Anti-Aliasing machen...)

TF und AF sind alles Approximationen, welche die Grafikqualität verbessern, aber leider keine korrekte Projektion des Texturinhaltes erzeugen. Da wird nur an den herkömmlicher Filter rumgeschraubt.

aths
2003-05-04, 16:18:47
Originally posted by Demirug
Also wenn mich meine Erinnerung nicht ganz im Stich läst ist doch der Ideale Reconstructions-Filter eine Sinus function. Was aber in der Praxsis nicht anwendbar ist da man sonst für jedes Sampel die ganze Texture durchrechnen müsste.Ja, man müsste mit Tiles arbeiten. Dank Texture Compression hätte man sowieso Tiles.