aths
2002-10-15, 16:37:53
Lässt sich Quincunx verbessern? Der große Quincunx-Nachteil ist ja, dass Texturen mitgeblurrt werden. Dass die Kanten unschärfer werden, ist der eigentlich gewollte Effekt.
Unschärfe ist zwar kein Anti-Aliasing, aber Quincunx wäre sicherlich brauchbarer, wenn es nur Kanten anfassen würde. Meine erste Idee war, die Quincunx-Filterung folgendermaßen zu verbessern:
http://www.aths.de/files/q1.png
Sofern die beiden "echten" Subpixel gleich sind (also FarbeA XOR FarbeB = 0) wird auf das Blurring einfach verzichtet. Denn innerhalb einer Textur wird beim Multisampling ja für alle Subpixel die gleiche Farbe geschrieben. Sind die beiden Subpixel unterschiedlich, liegt auf jeden Fall ein Kantenpixel vor, was geblurrt werden kann. Xmas meinte nun, dass sich das bei folgenden Fällen aber ungünstig auswirken würde:
http://www.aths.de/files/q2.png
Hier hat man ein Kantenpixel, was aber durch meine Methode nicht als solches erkannt wird.
Mit einigen Zutaten ließe sich das vermeiden. Man nehme:
- Einen zweiten Zeilen-Cache
- 5 XOR-Glieder
- 1 Tester auf Null
http://www.aths.de/files/q3.png
Sind die beiden Subpixel im Pixel 1, 2, 3 und 4 jeweils gleich, wird im Pixel 1 nicht geblurrt. Leider erkennt dieses Verfahren folgende Kanten nicht:
http://www.aths.de/files/q4.png
Man kann über die Farbwerte nicht entscheiden, ob Kanten- oder Innenflächen-Pixel vorliegen. Also müsste man mit einem extra Stencil-Buffer arbeiten. Dieser arbeitet folgendermaßen: Schreibt die Pipeline weniger AA-Sampels als maximal möglich (bei Quincunx also nur 1 Sample statt 2) so wird für das gesamte Pixel ein Bit auf 1 gesetzt, was da heißt: "Kantenpixel". Dann müsste zusätzlich der 2x2-Pixel-Filter zum Einsatz kommen. Sind sowohl Pixel 1, 2, 3 als auch 4 keine Kantenpixel, wird Pixel 1 nicht geblurrt. Ansonsten findet normales Quincunx statt.
Damit würde zwar um die Kanten noch etwas in die Textur hereingeblurrt, größere Textur-Flächen blieben vom Blurring aber verschont. Der Aufwand hierfür wäre aber gewaltig. Fazit: Quincunx lässt sich nicht sinnvoll verbessern.
Unschärfe ist zwar kein Anti-Aliasing, aber Quincunx wäre sicherlich brauchbarer, wenn es nur Kanten anfassen würde. Meine erste Idee war, die Quincunx-Filterung folgendermaßen zu verbessern:
http://www.aths.de/files/q1.png
Sofern die beiden "echten" Subpixel gleich sind (also FarbeA XOR FarbeB = 0) wird auf das Blurring einfach verzichtet. Denn innerhalb einer Textur wird beim Multisampling ja für alle Subpixel die gleiche Farbe geschrieben. Sind die beiden Subpixel unterschiedlich, liegt auf jeden Fall ein Kantenpixel vor, was geblurrt werden kann. Xmas meinte nun, dass sich das bei folgenden Fällen aber ungünstig auswirken würde:
http://www.aths.de/files/q2.png
Hier hat man ein Kantenpixel, was aber durch meine Methode nicht als solches erkannt wird.
Mit einigen Zutaten ließe sich das vermeiden. Man nehme:
- Einen zweiten Zeilen-Cache
- 5 XOR-Glieder
- 1 Tester auf Null
http://www.aths.de/files/q3.png
Sind die beiden Subpixel im Pixel 1, 2, 3 und 4 jeweils gleich, wird im Pixel 1 nicht geblurrt. Leider erkennt dieses Verfahren folgende Kanten nicht:
http://www.aths.de/files/q4.png
Man kann über die Farbwerte nicht entscheiden, ob Kanten- oder Innenflächen-Pixel vorliegen. Also müsste man mit einem extra Stencil-Buffer arbeiten. Dieser arbeitet folgendermaßen: Schreibt die Pipeline weniger AA-Sampels als maximal möglich (bei Quincunx also nur 1 Sample statt 2) so wird für das gesamte Pixel ein Bit auf 1 gesetzt, was da heißt: "Kantenpixel". Dann müsste zusätzlich der 2x2-Pixel-Filter zum Einsatz kommen. Sind sowohl Pixel 1, 2, 3 als auch 4 keine Kantenpixel, wird Pixel 1 nicht geblurrt. Ansonsten findet normales Quincunx statt.
Damit würde zwar um die Kanten noch etwas in die Textur hereingeblurrt, größere Textur-Flächen blieben vom Blurring aber verschont. Der Aufwand hierfür wäre aber gewaltig. Fazit: Quincunx lässt sich nicht sinnvoll verbessern.