-
AUFGABENGEBIET
DER ERFINDUNG
-
Die vorliegende Erfindung betrifft
die Anzeige von grafischen Bildern auf einem Computersystem und
insbesondere ein Verfahren und ein System zum Durchführen eines
Antialiasing unter Verwendung einer einzigen Mischeinheit, welches
die Größe des Systems
verringert, wobei in den meisten Fällen keine zusätzliche
Zeit erfordert wird.
-
HINTERGRUND
DER ERFINDUNG
-
Ein herkömmliches Computer-Grafiksystem kann
grafische Abbilder von Gegenständen
auf einer Anzeige darstellen. Die Anzeige beinhaltet eine Mehrzahl
von Anzeigeelementen, die als Pixel bekannt sind und üblicherweise
in einem Gitter angeordnet sind. Um Gegenstände darzustellen, unterteilt das
herkömmliche
Computer-Grafiksystem üblicherweise
jeden Gegenstand in eine Mehrzahl von Polygonen. Ein herkömmliches
System rendert dann die Polygone in einer bestimmten Reihenfolge.
Für eine dreidimensionale
Szene werden die undurchsichtigen Polygone im allgemeinen von der
Sichtebene der Anzeige aus gesehen von vorne nach hinten gerendert.
Lichtdurchlässige
Polygone werden wünschenswerterweise
von hinten nach vorne gerendert. Auf ähnliche Weise kann eine zweidimensionale
Szene dargestellt werden. Für
eine zweidimensionale Szene werden die Polygone auf der Grundlage
einer Schichtreihenfolge gerendert, im Gegensatz zu einem Tiefenwert.
Flache Schichten verdecken tiefe Schichten.
-
Jedes der Polygone beinhaltet Kanten. Wenn
ein Bild gerendert wird, rendert das herkömmliche System oft diagonale
Linien oder Polygonkanten, die nicht exakt waagrecht oder senkrecht
sind. Da jedes Pixel begrenzte physikalischer Abmessungen besitzt,
können
Kanten, die nicht waagrecht oder senkrecht sind, gezackt erscheinen.
Beispielsweise soll jedes Pixel als Quadrat angenommen werden. Eine
diagonale Linie oder Kante, die unter Verwendung der quadratischen
Pixel gerendert worden ist, wird gezackt erscheinen, ähnlich einer
Treppe. Dieser Effekt ist als Aliasing bekannt.
-
Um das Aliasing zu verringern, führen herkömmliche
Systeme Antialiasing durch. Das Antialiasing hilft, die Auswirkung
zu verringern, die die physikalischen Abmessungen der Pixel auf
die Erscheinung der dargestellten Gegenstände besitzt. Diagonale Linien
und Kanten erscheinen weicher.
-
Mehrere herkömmliche Mechanismen werden
verwendet, um Antialiasing durchzuführen.
-
Viele der herkömmlichen Techniken führen ebenso
eine Auswertung und Mischung von Daten auf der Subpixelebene durch.
Jeder Mechanismus besitzt ebenso seine Nachteile. Beispielsweise
ist ein herkömmlicher
Mechanismus zum Antialiasing herkömmliches Super-Sampling. Herkömmliches
Super-Sampling wird für
einen Teil der Anzeige, der Kachel genannt wird, oder die gesamte
Anzeige auf einmal durchgeführt.
Jedes Pixel in der Kachel oder der Anzeige wird als eine M × N-Matrix
von Subpixel betrachtet. Daten für
jedes Polygon in der Kachel werden bei jedem Subpixel ausgewertet.
So können
der Tiefenwert, die Farbe, die Textur und andere Daten für das Polygon
unterschiedlich sein und werden bei jedem Subpixel ausgewertet.
Die Daten für
die Subpixel in jedem Pixel in der Kachel werden kombiniert, um
die Daten für
jedes Pixel in der Kachel bereitzustellen. Da das Super-Sampling Tiefenwerte
für die Subpixel
auswertet und kombiniert, kann das Super-Sampling helfen, den Treppeneffekt
auf beinhaltete Kanten zu glätten.
Das System erfordert jedoch ausreichenden Speicher, um Daten für die M × N-Subpixel
in jedem Pixel in einer Kachel zu halten, um das Super-Sampling
durchzuführen.
Daher ist viel Speicher erforderlich. Dies erhöht die Größe des Systems. Es muss ebenso
sichergestellt werden, dass es keine Artefakte an den Säumen zwischen den
Kacheln gibt. Dies verlangsamt die Verarbeitung. Weiterhin werden
viel mehr Daten für
jedes Pixel in der Anzeige unabhängig
von jeder Gleichförmigkeit der
Subpixel innerhalb eines Pixels verarbeitet. Das Super-Sampling
ist daher rechenintensiv und relativ langsam.
-
Einige herkömmliche Systeme richten sich auf
einige der Probleme beim Super-Sampling, indem ein adaptives Super-Sampling
durchgeführt wird.
Das adaptive Super-Sampling identifiziert zuerst Bereiche, in denen
Super-Sampling erwünscht sein
kann, wie beispielsweise nahe von Kanten. Wenn einmal dieser Bereich
identifiziert ist, wird das Super-Sampling für eine Kachel durchgeführt, die diesen
Bereich beinhaltet. In anderen Bereichen wird das Super-Sampling
nicht durchgeführt.
Beispielsweise kann ein herkömmliches
System die Kanten von jedem Polygon markieren, wobei angezeigt wird, dass
die Kanten das Äußere des
Polygons sind und daher den Umriß des Polygons bilden. Auf
diesen Umriß wird
das Antialiasing durchgeführt.
Auch wenn das adaptive Super-Sampling
die Verarbeitungsgeschwindigkeit erhöht, indem die Bereiche verringert werden, die
einem Super-Sampling unterworfen werden, wird immer noch viel Speicher
erfordert. Weiterhin kann die Identifikation der Bereiche, auf die
das Super-Sampling angewendet werden muss, rechenintensiv sein.
Beispielsweise erfordert die Bestimmung des Umrisses eines Polygons,
die oben beschrieben ist, eine relativ aufwendige Berechnung. Daher
kann das System immer noch relativ groß oder langsam sein.
-
Ein anderer herkömmlicher Mechanismus für das Antialiasing
verwendet einen Akkumulation-Puffer („A-Puffer") und ist als A-Puffer-Technik bekannt. Es
werden Daten für
jedes Pixel in jedem Polygon verarbeitet. Während der Verarbeitung wird
für jedes Pixel
in jedem Polygon eine Maske geschaffen. Die Maske zeigt den Teil
des Pixels an, der von dem Polygon bedeckt ist. Die Maske kann so
aufgefaßt
werden, als ob sie die Subpixel anzeigt, die jedes Polygon bedeckt.
Eine verbundene Liste der Polygonmasken wird dann für jedes
Pixel geschaffen. Die verbundene Liste hält üblicherweise eine Maske, einen
Farbwert und andere Daten, die in bezug zu dem möglichen Beitrag von jedem Polygon
auf die Anzeige des Pixel stehen. Nachdem die gesamte Szene in dem
A-Puffer gespeichert worden ist, wird die verbundene Liste durchgearbeitet,
um die Daten von den Polygonen, die jedem Pixel zugeordnet sind,
zu akkumulieren und zu rendern. Das Aliasing wird dadurch verringert.
Es werden jedoch zwei Durchgänge durch
die Daten gemacht, um Objekte für
die Anzeige zu rendern. Der erste Durchgang dient zum Schaffen der
Masken für
jedes Polygon und um die Polygone den bestimmten Pixeln zuzuordnen.
Der zweite Durchgang verwendet die für jedes Pixel gespeicherten
Daten, um zu bestimmen, wie die Daten für jedes Pixel darzustellen
sind. Daher ist dieser Mechanismus zeitraubend. Die verbundene Liste
muss ebenso von dem Computer-Grafiksystem verwaltet werden, welches
die A-Puffer-Technik schwieriger zu implementieren macht. Üblicherweise
wird sowohl ein A-Puffer als auch ein Frame-Puffer zum Rendern der Szene
verwendet. Daher erfordert die A-Puffer-Technik ebenso zusätzlichen
Speicher.
-
Ein anderes herkömmliches Verfahren zum Antialiasing
kann einen Gewichtungsfaktor verwenden. Der Gewichtungsfaktor zeigt
den Prozentsatz eines Pixels an, den ein Polygon besetzt. Wenn beispielsweise
ein Polygon ein vollständiges
Pixel besetzt, kann der Gewichtungsfaktor 1 sein. Der Gewichtungsfaktor
von Pixeln an den Kanten des Polygons kann daher kleiner 1 sein.
Dieser Gewichtungsfaktor würde
dann berücksichtigt
werden, wenn die Daten für
verschiedene Polygone, die ein Pixel schneiden, gemischt werden.
-
Die zuvor genannten herkömmlichen
Antialiasing-Techniken besitzen einen zusätzlichen Nachteil. Um die Verarbeitungsgeschwindigkeit
zu erhalten, können
die oben genannten herkömmlichen
Verfahren mehrere Mischeinheiten oder eine komplexere Mischeinheit
verwenden. Eine Mischeinheit führt die
mathematische Operation durch, die einen gespeicherten Wert, wie
beispielsweise die Farbe für ein
Subpixel, mit einer Farbe für
ein Fragment mischt. Bei dem herkömmlichen Antialiasing-Verfahren,
das eine Gewichtung verwendet, kann die Mischeinheit komplexer sein,
um das Gewicht zu berücksichtigen. Auf ähnliche
Weise können
das Super-Sampling, das adaptive Supersampling und die A-Puffer-Technik mehrere Mischeinheiten
verwenden, um die Verarbeitungsgeschwindigkeit aufrecht zu erhalten.
Der Grund dafür
ist, dass Super-Sampling, adaptives Supersampling und die A-Puffer-Technik Daten
auf der Subpixelebene auswerten und kombinieren. Mischungen werden
daher für
jedes Subpixel in einem Pixel durchgeführt, um sicherzustellen, dass
jedes Subpixel die korrekte Farbe und andere Informationen zu dem
Pixel beiträgt.
Um die Verarbeitungsgeschwindigkeit aufrecht zu erhalten, wenn Subpixel verwendet
werden, werden die Mischungen für
jedes Subpixel üblicherweise
parallel durchgeführt.
Für jedes
Subpixel wird eine Mischeinheit verwendet, um diese Mischungen zu
Parallelisieren.
-
Auch wenn eine Mischeinheit für jedes
Subpixel verwendet werden kann, nimmt die Anzahl der Mischeinheiten
dramatisch zu, da die Anzahl der verwendeten Subpixel steigt. Für ein 2 × 2 Array
von Subpixel werden beispielsweise vier Mischeinheiten erfordert,
um alle Operationen parallel durchzuführen. Für ein 4 × 4 Array von Subpixel werden
sechzehn Mischeinheiten erfordert, um alle Operationen parallel
durchzuführen.
Das Vorsehen einer so großen
Anzahl von Mischeinheiten verzehrt sehr viel Platz und ist ziemlich
kostspielig, wobei beides unerwünscht
ist.
-
Dementsprechend wird ein System und
ein Verfahren zur Verringerung der Anzahl der verwendeten Mischeinheiten
benötigt.
Es würde
ebenso wünschenswert
sein, wenn das Verfahren und das System keine Leistung opfert. Die
vorliegende Erfindung richtet sich auf diese Notwendigkeit.
-
Die US-A-5 684 939 offenbart ein
Bildverarbeitungssystem, das unter der Leitung eines Prozessors
Polygonbilddaten erhält
und Bilddaten mit Antialiasing zur Darstellung auf einer rasterabgetasteten Anzeige
entwickelt. Insbesondere beinhaltet das Bildsystem einen Abtastumwandler
zum Umwandeln der Polygonbilddaten in Pixeldaten, welche Pixelbildschirmkoordinaten
und wenigstens einen Farbwert für
jedes von einem Polygon bedeckte Pixel von den Pixeldaten und eine
Super-Sample-Bedeckungsmaske umfasst, die ein Ausmaß der Polygonbedeckung
innerhalb jedes von einem Polygon bedeckten Pixels anzeigt. Das
Bildsystem beinhaltet ebenso ein Rastersystem mit wenigstens einem
Bildprozessor zum Empfangen der Pixeldaten für jedes Pixel, um eine Bereichsmaske
auf der Grundlage der Super-Sample-Bedeckungsmaske zu entwickeln
und zum Speichern des Farbwerts im Zusammenhang mit der Bereichsmaske
als antialiaste Anzeigedaten in einem Bildspeicher in Kommunikation
mit dem Bildprozessor auf der Grundlage der Pixel-Bildschirm-Koordinaten.
Die Bereichsmaske zeigt wenigstens einen örtlichen Bereich von Super-Sampeln innerhalb
jedes Pixels an, das von einem oder mehreren Polygonen bedeckt ist,
und zeigt einen Farbwert an, der in den Bildspeicher gespeichert
ist und den Super-Sampeln
in einem Bereich zugeordnet werden soll. Dies erfordert, dass nur
ein einziger Farbwert für
Super-Sampel innerhalb eines Bereichs eines bedeckten Pixels in
dem Bildspeicher gespeichert werden muss. Das Bildsystem kann ebenso zum
Entwickeln und Speichern von Z-Werten, Alpha-Werten, Schablonenwerten
und Texturwerten für jedes
Pixel zum Speichern in dem Bildspeicher im Zusammenhang mit der
Bereichsmaske konfiguriert sein.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Die vorliegende Erfindung schafft
ein Verfahren und ein System zum Antialiasing eines graphischen
Bildes auf einer Anzeige. Das graphische Bild wird von Daten e zeugt,
die wenigstens ein Objekt beschreiben. Die Anzeige beinhaltet eine
Mehrzahl von Pixel. Das wenigstens eine Objekt beinhaltet eine Mehrzahl
von Fragmenten. Ein Teil der Mehrzahl von Fragmenten schneidet ein
Pixel der Mehrzahl von Pixel. Jedes der Mehrzahl von Fragmenten
beinhaltet eine Angabe eines Teils eines entsprechenden Fixels,
das geschnitten wird. Das System und das Verfahren beinhalten das
Bereitstellen wenigstens eines aktiven Bereichs für das Pixel.
Der wenigstens eine aktive Bereich schneidet einen ersten Teil des Pixels.
Das Verfahren und das System beinhalten ebenso das Bereitstellen
wenigstens eines neuen Bereichs. Ein erster Abschnitt des wenigstens
einen neuen Bereichs zeigt an, wo in dem Pixel der wenigstens eine
aktive Bereich und das Fragment sich schneiden. Ein zweiter Abschnitt
des wenigstens einen neuen Bereichs zeigt an, wo in dem Pixel der
wenigstens eine aktive Bereich und das Fragment sich nicht schneiden.
Das Verfahren und das System beinhalten weiterhin das Mischen eines
Teils des Fragments in einem zweiten Abschnitt des Pixels, entsprechend
dem ersten Abschnitt des wenigstens einen neuen Bereichs.
-
Gemäß dem hier offenbarten System
und Verfahren schafft die vorliegende Erfindung ein Antialiasing,
das weniger Mischeinheiten verwendet, wodurch die Gesamtsystemgröße verringert
wird, wobei im allgemeinen keine nachteilige Auswirkung auf die Leistungsfähigkeit
auftritt.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
1A ist
ein Blockdiagramm einer graphischen Anzeige, die eine Mehrzahl von
Polygonen beinhaltet.
-
1B ist
ein Blockdiagramm, das eine nähere
Ansicht eines der Mehrzahl von Polygonen in der Anzeige zeigt.
-
2 ist
ein Blockdiagramm, das ein Computer-Grafiksystem zeigt.
-
3 ist
ein Blockdiagramm, das ein Computer-Grafiksystem gemäß der vorliegenden
Erfindung zeigt.
-
4 ist
ein Blockdiagramm, das ein bevorzugtes Ausführungsbeispiel einer Antialiasing-Einheit
gemäß der vorliegenden
Erfindung zeigt.
-
5 ist
ein Flussdiagramm auf einer hohen Ebene eines Verfahrens zum Mischen
von Daten für ein
Pixel gemäß der vorliegenden
Erfindung.
-
5A ????????????????????
-
5B ist
ein Flussdiagramm auf einer hohen Ebene eines Verfahrens zum Antialiasing
von Daten für
eine graphische Anzeige gemäß der vorliegenden
Erfindung.
-
6 ist
ein Flussdiagramm eines Verfahrens zum Bereitstellen und Mischen
von Bereichen gemäß der vorliegenden
Erfindung.
-
7A und 7B zeigen ein detaillierteres Flussdiagramm
eines Verfahrens zum Antialiasing von Daten gemäß der vorliegenden Erfindung.
-
8A ist
ein Blockdiagramm eines Pixels einer graphischen Anzeige.
-
8B ist
ein Blockdiagramm eines Pixels einer graphischen Anzeige, das eine
Mehrzahl von Subpixel beinhaltet.
-
8C ist
eine Bedeckungsmaske für
das erste Fragment, das das Pixel schneidet.
-
8D ist
die Bedeckungsmaske für
das zweite Fragment, das das Pixel schneidet.
-
9 ist
ein Blockdiagramm eines ersten aktiven Bereichs für das Pixel.
-
10A ist
ein Blockdiagramm des ersten aktiven Bereichs für das Pixel, nachdem das erste Fragment
verarbeitet worden ist.
-
10B ist
ein Blockdiagramm eines zweiten aktiven Bereichs für das Pixel,
nachdem das erste Fragment verarbeitet worden ist.
-
10C ist
ein Blockdiagramm des Akkumulators, nachdem das erste Fragment verarbeitet worden
ist.
-
11A ist
ein Blockdiagramm des ersten aktiven Bereichs des Pixels, nachdem
das zweite Fragment verarbeitet worden ist.
-
11B ist
ein Blockdiagramm des zweiten aktiven Bereichs für das Pixel, nachdem das zweite Fragment
verarbeitet worden ist.
-
11C ist
ein Blockdiagramm des dritten aktiven Bereichs für das Pixel, nachdem das zweite Fragment
verarbeitet worden ist.
-
11D ist
ein Blockdiagramm des vierten aktiven Bereichs für das Pixel, nachdem das zweite Fragment
verarbeitet worden ist.
-
11E ist
ein Blockdiagramm der Daten in dem Akkumulator für das Pixel, nachdem das zweite Fragment
verarbeitet worden ist.
-
DETAILLIERTE
BESCHREIBUNG DER ERFINDUNG
-
Die vorliegende Erfindung beschreibt
eine Verbesserung bei der Anzeige von graphischen Bildern. Die folgende
Beschreibung wird vorgestellt, um einen Fachmann auf dem Gebiet
in die Lage zu versetzen, die Erfindung zu realisieren und zu verwenden
und wird im Zusammenhang mit einer Patentanmeldung und deren Anforderungen
bereitgestellt. Zahlreiche Modifikationen des bevorzugten Ausführungsbeispiels
werden den Fachleuten auf dem Gebiet schnell ersichtlich sein und
die grundsätzlichen Prinzipien
hieraus können
auf andere Ausführungsformen
angewendet werden. Daher ist die vorliegende Erfindung als nicht
begrenzt auf das dargestellte Ausführungsbeispiel gedacht, sondern
dass ihm der weiteste Umfang gewährt
werden soll, der den hier beschriebenen Prinzipien und Merkmalen
entspricht.
-
1A ist
ein Diagramm eines graphischen Bildes auf einer Anzeige 10,
die drei Polygone 20, 30 und 40 beinhaltet.
Die Polygone 20, 30 und 40 können Teil
von Objekten sein, die Teil eines graphischen Bildes sind, das auf
der Anzeige 10 abgebildet wird. Die Polygone 20, 30 und 40 können Teile
von dreidimensionalen oder zweidimensionalen Objekten sein.
-
1B zeigt
eine nähere
Ansicht eines Teils des Polygons 30. Es ist eine Kante 32 des
Polygons 30 dargestellt. Die 1B zeigt
ebenso Pixel 50, von denen nur eines bezeichnet ist. Die
Pixel in der Anzeige 10 besitzen eine begrenzte Fläche und
sind als Quadrate dargestellt. Da die Pixel in der Anzeige 10 eine
begrenzte Größe besitzen,
ist die Kante 32 ebenso wie die anderen, in 1B nicht dargestellten Kanten
gezackt.
-
2 zeigt
ein vereinfachtes Blockdiagramm eines Ausführungsbeispiels eines Computer-Grafiksystems 100.
Das System 100 wird verwendet, um Objekte und insbesondere
dreidimensionale Objekte darzustellen.
-
Das Computer-Grafiksystem 100 beinhaltet eine
zentrale Verarbeitungseinheit (CPU) 102, eine Anzeige 104,
eine Benutzerschnittstelle 106, wie beispielsweise eine
Tastatur, eine Maus oder eine andere Kommunikationseinrichtung,
einen Speicher 110 und eine Bilderzeugungseinheit 120,
die mit einem Bus 108 gekoppelt sind. Die Anzeige 104 beinhaltet eine
Mehrzahl von Pixel, wie beispielsweise die Pixel 50 in
der Anzeige 10. Jedes der Mehrzahl von Pixel besitzt eine
Fläche.
Die Anzeige 104 könnte
einen Anzeigespeicher (nicht dargestellt) beinhalten, in den die
Pixel geschrieben werden. Beispielsweise könnte die Anzeige 104 einen
Frame-Puffer beinhalten. Um ein graphisches Bild zu erzeugen, wird
jedes der Objekte in dem Bild in Polygone aufgeteilt, die beim Rendern
des Objektes verwendet werden. In den oben genannten ebenfalls anhängigen Anmeldungen werden
die Polygone vorzugsweise in Rasterordnung gerendert. D. h., dass
Abschnitte der Polygone in der Reihenfolge der Pixel in der Anzeige 104 gerendert
werden. In der vorliegenden Erfindung können die Polygone jedoch auch
in einer anderen Reihenfolge gerendert werden.
-
Die Bilderzeugungseinheit 120 beinhaltet eine
Schnittstelle 121, die mit dem Bus 108 verbunden
ist. Die Schnittstelle 121 überträgt Daten an die Datenverarbeitungseinheit 122.
Ein Prozessorblock 124, der mit der Datenverarbeitungseinheit 122 gekoppelt
ist, identifiziert Daten, die Abschnitte der Polygone („schneidende
Polygone") beschreiben,
die den Bereich schneiden, der sich entlang einer z-Achse von einem
ausgewählten
Pixel in einer x-y-Ebene entsprechend einem Bildschirm der Anzeige 104 erstreckt.
Der Prozessorblock 124 kann einen getrennten Prozessor
für jedes
schneidende Polygon beinhalten. Die Daten für den Abschnitt des schneidenden
Polygons, das dem ausgewählten
Pixel zugeordnet ist, wird ein Fragment genannt. Beispielsweise beinhaltet
ein Fragment die Farbe, die Textur und einen Tiefenwert für das entsprechende
Polygon. Daten, die sich auf jedes ausgewählte Pixel beziehen, beinhalten
ein Fragment für
jedes der schneidenden Polygone. In dem Zusammenhang dieser Offenbarung
wird ein Fragment für
ein schneidendes Polygon so beschrieben, als ob es das Pixel schneidet,
das das Polygon schneidet.
-
Eine Einheit 126 zum Identifizieren/Entfernen
von verdeckten Objekten empfängt
wenigstens einen Teil des Fragments von jedem schneidenden Polygon,
das dem ausgewählten
Pixel zugeordnet ist, und entfernt Teile des Fragments für das schneidende
Polygon, die verdeckt sind. Die Einheit 126 zum Identifizieren/Entfernen
von verdeckten Objekten kann diese Funktion durchführen, ohne
den genauen z-Wert des Polygons zu bestimmen. Der Interpolator 128 empfängt die
Fragmente für
die schneidenden Polygone für
das ausgewählte
Pixel und interpoliert die Daten, welches das Interpolieren von Textur,
Farbe und Alpha-Werten für
das Fragment beinhaltet. Der Interpolator 128 stellt ebenso
eine Maske für
jedes Fragment zur Verfügung.
In einem alternativen Ausführungsbeispiel
jedoch kann die Erzeugung der Maske von einer anderen Einheit bereitgestellt
werden. Die Maske kann als Teil des Fragments für ein schneidendes Polygon
betrachtet werden. Die zu rendernden Fragmente werden von dem Interpolator 128 zu
einem Hardwaresortierer 130 geliefert, der die Fragmente
vorzugsweise auf der Grundlage des z-Wertes oder des Tiefenwertes
für jedes
Fragment sortiert.
-
Die sortierten Fragmente für das ausgewählte Pixel
werden dann an eine Antialiasing-Einheit 140 geliefert.
Die in den oben genannten, ebenso anhängigen Anmeldungen beschriebene
Antialiasing-Einheit 140 beinhaltet einen Akkumulator 142 und
eine oder mehrere Mischeinheiten 144. Der Akkumulator 142 beinhaltet
Subpixelpuffer, die in 2 nicht
dargestellt sind. In einem Ausführungsbeispiel
des in der oben genannten, ebenso anhängigen Anmeldung offenbarten
Systems beinhaltet der Akkumulator 142 einen getrennten
Subpixelpuffer für
jedes Subpixel, in das ein Pixel unterteilt wird.
-
In der oben genannten, ebenso anhängigen Anmeldung
beinhaltet jedes Fragment eine Maske und einen Tiefenwert. Die Maske,
auf die im Folgenden als Flächenmaske
bezug genommen wird, zeigt einen Abschnitt des Pixels an, der vom
Fragment geschnitten wird. Die Flächenmaske wird verwendet, um
den Beitrag zu bestimmen, den ein Fragment zu einem Pixel liefert,
das es schneidet. Die Flächenmaske
zeigt an, welches der Subpixel in einem Pixel das Fragment schneidet.
Wenn ein bestimmtes Pixel eine Kante eines Polygons beinhaltet,
wie beispielsweise die Kante 122, zeigt die Flächenmaske
für das Fragment
an, dass das Fragment nur einige der Subpixel schneidet. Das Fragment
wird nur in diesen Subpixeln gemischt. Jeder Subpixelpuffer in dem
Akkumulator 142 wird verwendet, um Informationen für die Fragmente
zu speichern, die in jedem der Subpixel innerhalb des ausgewählten Pixels
enthalten sind. Die wenigstens eine Mischeinheit 144 mischt die
Daten, die an die Subpixelpuffer geliefert werden. Die antialiasten
Daten für
das ausgewählte
Pixel werden dann an die Anzeige 104 geliefert.
-
Beinhaltete Kanten sind solche Kanten,
die nicht explizit definiert sind, die aber Aliasing unterworfen
sind. Antialiasing berücksichtigt
Unterschiede bei den Tiefenwerten bei verschiedenen Subpixel. Jedes
Fragment beinhaltet einen Tiefenwert, eine Steigung des Tiefenwerts
und eine Flächenmaske. Ein
Subpixel-Tiefenwert wird für
jedes Fragment berechnet, indem der Tiefenwert und die Steigung
des Tiefenwerts des Fragments verwendet wird. Es wird bestimmt,
ob ein Abschnitt des Fragments auf der Grundlage der Mehrzahl der
Subpixel-Tiefenwerte für das
Fragment und die Flächenmaske
des Fragments gemischt wird.
-
Um zu bestimmen, ob ein Abschnitt
des Fragments auf der Grundlage der Subpixel-Tiefenwerte gemischt wird, werden zwei
zusätzliche
Masken berechnet. Zuerst wird eine Tiefenmaske berechnet. Die Tiefenmaske
zeigt die Subpixel an, bei denen ein berechneter Tiefenwert geringer
als ein in dem Akkumulator 144 gespeicherter Tiefenwert
ist. So zeigt die Tiefenmaske die Subpixel an, bei denen das Fragment
sichtbar sein würde,
wenn das Fragment an dieser Stelle existieren würde. Die Tiefenmaske und die
Flächenmaske
werden dann geschnitten, um eine Gesamtmaske zu schaffen. Die Gesamtmaske
sollte die Subpixel anzeigen, bei denen das Fragment sichtbar ist.
Das Fragment wird dann in diesen Subpixeln gemischt.
-
Obwohl die in den oben genannten,
ebenso anhängigen
Anmeldungen beschriebenen Verfahren und Systeme zufriedenstellend
für deren
vorgesehenen Zweck funktionieren, wird ein Fachmann auf dem Gebiet
erkennen, dass die Mischungen immer noch auf der Subpixel-Ebene bereitgestellt
werden. Für eine
4 × 4-Auswahl
von Subpixel werden so sechzehn Mischungen durchgeführt. In
Ausführungsbeispielen
der oben genannten, ebenso anhängigen
Anmeldungen wird eine Mischeinheit 144 für jedes
Subpixel in dem Akkumulator 140 zur Verfügung gestellt. Das
Bereitstellen einer Mischeinheit 144 für jedes Subpixel ermöglicht es
der Mischeinheit 144, ein Fragment in einem einzigen Taktzyklus
zu verarbeiten. Mit anderen Worten ausgedrückt wird jedes neue Fragment
parallel für
jedes Subpixel von einer der Mischeinheiten 144 gemischt.
Jede Misch- oder Arithmetikeinheit 144 ist jedoch relativ
komplex. Das Bereitstellen von sechzehn Mischeinheiten 144,
eine für
jedes Subpixel, verzehrt ein großes Maß an Platz. So wie die Anzahl
der Subpixel ansteigt, steigt die Anzahl der Mischeinheiten und
somit der verzehrte Platz rapide an. Es ist immer noch wünschenswert, das
Ausmaß an
Platz und daher Silizium zu verringern, das von dem Computer-Graphiksystem
verzehrt wird. Auch wenn weniger Mischeinheiten bereitgestellt werden
könnten,
ist es immer noch wünschenswert,
diese Einheiten effizient zu nutzen. Dementsprechend wäre es wünschenswert,
die Größe des in 2 dargestellten Systems 100 zu
verringern, ohne die Geschwindigkeit des Systems 100 wesentlich
zu verringern.
-
Die vorliegende Erfindung schafft
ein Verfahren und ein System zum Antialiasing eines graphischen
Bildes auf einer Anzeige. Das graphische Bild wird von Daten erzeugt,
die wenigstens ein Objekt beschreiben. Die Anzeige beinhaltet eine
Mehrzahl von Pixeln. Das wenigstens eine Objekt beinhaltet eine
Mehrzahl von Fragmenten. Ein Teil der Mehrzahl der Fragmente schneidet
ein Pixel der Mehrzahl von Pixeln. Jedes der Mehrzahl von Fragmenten
beinhaltet eine Anzeige eines Abschnitts eines entsprechenden Pixels,
das geschnitten wird. Das System und das Verfahren beinhalten das
Bereitstellen wenigstens eines aktiven Bereichs für das Pixel.
Jeder der wenigstens einen aktiven Bereiche schneidet einen ersten
Abschnitt des Pixels. Das Verfahren und das System umfassen ebenso
das Bereitstellen von wenigstens einem neuen Bereich. Ein erster
Abschnitt des wenigstens einen neuen Bereichs zeigt an, wo in dem
Pixel sich jeder der wenigstens einen aktiven Bereiche und das Fragment
sich schneiden. Ein zweiter Abschnitt des wenigstens einen neuen
Bereichs zeigt an, wo in dem Pixel sich jeder der wenigstens einen
aktiven Bereiche und das Fragment sich nicht schneiden. Das Verfahren
und das System beinhalten weiterhin das Mischen eines Abschnitts des
Fragments in einem zweiten Abschnitt des Pixels, der dem ersten
Abschnitt des wenigstens einen neuen Bereichs entspricht.
-
Die vorliegende Erfindung wird in
den Begriffen eines bestimmten Systems beschrieben werden, das eine
einzige Mischeinheit verwendet. Ein Fachmann auf dem Gebiet wird
jedoch schnell erkennen, dass dieses Verfahren und System effektiv
für andere Systemtypen
und andere Anzahlen von Mischeinheiten arbeitet. Die vorliegende
Erfindung wird ebenso in den Begriffen eines bestimmten Computersystems und
der Verarbeitung von Fragmenten in einer besonderen Reihenfolge
beschrieben werden. Ein Fachmann auf diesem Gebiet wird jedoch schnell
erkennen, dass dieses Verfahren und System effektiv für andere
Computersystem-Typen und das Verarbeiten von Fragmenten in einer
anderen Reihenfolge arbeitet. Weiterhin wird die vorliegende Erfindung
in dem Zusammenhang mit spezifischen Blöcken, die bestimmte Funktionen
durchführen,
und Verfahren beschrieben, die bestimmte Schritte in einer besonderen
Reihenfolge durchführen.
Ein Fachmann auf dem Gebiet wird jedoch schnell erkennen, dass andere
Blöcke
diese Funktionen bereitstellen können und
dass die Schritte in einer anderen Reihenfolge oder parallel durchgeführt werden
können.
Beispielsweise kann die vorliegende Erfindung in einem anderen Computer-Grafiksystem
verwendet werden, welches Daten auf Subpixelebene bereitstellt und mischt,
aber das die Polygone nicht in Rasterordnung rendert, einen anderen
Mechanismus oder keinen Mechanismus zum Sortieren und Entfernen
von verdeckten Polygonen verwendet und das nicht Prozessoren 124 zur
Verfügung
stellt, um Fragmente parallel zu verarbeiten. So ist die vorliegende
Erfindung mit anderen Architekturen und anderen Verfahren des Antialiasing
vereinbar, wie beispielsweise Super-Sampling, adaptives Super-Sampling
oder die A-Puffer- Technik.
Die vorliegende Erfindung kann in jedem beliebigen System verwendet
werden, in dem mehrfache Mischeinheiten auf andere Weise genutzt werden
können.
-
Um das Verfahren und das System gemäß der vorliegenden
Erfindung besser darzustellen, wird nun auf 3 bezug genommen, das ein Blockdiagramm
auf hoher Ebene eines Ausführungsbeispiels von
solch einem System 100' darstellt.
Viele Komponenten des Systems 100' sind analog zu den Komponenten,
die in dem in 2 dargestellten
System 100 abgebildet sind. Diese Komponenten sind ähnlich bezeichnet.
Beispielsweise entspricht die in 3 dargestellte
Anzeige 104' der
in 2 dargestellten Anzeige 104.
So kann die Anzeige 104' einen
Anzeigespeicher (nicht dargestellt) beinhalten. Unter Bezugnahme
nochmals auf 3 beinhaltet
die Antialiasing-Einheit 140' einen
Akkumulator 142',
wenigstens eine Mischeinheit 144' und einen Bereichsgenerator 150.
Der Akkumulator 140' beinhaltet
immer noch eine Mehrzahl von Subpixel-Puffer (in 3 nicht dargestellt). Die Subpixel-Puffer
speichern Daten für
Fragmente, die ein bestimmtes Pixel der Anzeige 104' schneiden.
In einem bevorzugten Ausführungsbeispiel
ist die Anzahl der Mischeinheiten 144' gleich eins. In einem alternativen
Ausführungsbeispiel
ist die Anzahl der Mischeinheiten geringer als die Anzahl an Subpixel.
-
4 zeigt
ein detaillierteres Blockdiagramm der Anti-Aliasing-Einheit 140' gemäß der vorliegenden
Erfindung. Die Anti-Aliasing-Einheit 140' beinhaltet den Akkumulator 142,
die Mischeinheit 144' und
den Bereichsgenerator 150. Es ist ebenso eine Sendeeinheit 147 und
eine Einheit 148 für
aktuelle Daten dargestellt. Der Bereichsgenerator 150 beinhaltet
einen Schnittmaskengenerator 152, der mit der Bereichsliste 154 gekoppelt
ist. Die Bereichsliste 154 beinhaltet zwei Felder, eine
Bereichsnummer 156 und ein Bereichsbitfeld 158.
Die Bereichsnummer 156 beinhaltet aktive Einträge 160–175 für jeden
möglichen
aktiven Bereich. In einem bevorzugten Ausführungsbeispiel ist die maximale
Anzahl von möglichen
aktiven Bereichen und die Anzahl der aktiven Einträge 160–175 die
gleiche wie die Anzahl an Subpixel. In jedem aktiven Eintrag 160 bis 175 kann eine
Angabe angeordnet werden, ob ein entsprechender Bereich aktiv ist.
In einem bevorzugten Ausführungsbeispiel
ist der entsprechende Bereich aktiv, wenn ein Bit in einem aktiven
Eintrag 160–175 gesetzt
ist. Das Bereichsbitfeld 158 beinhaltet ebenso Bitfeldeinträge 180–195 für die möglichen
aktiven Bereiche. Jeder Bitfeldeintrag 180 bis 195 in
dem Bitfeld 158 zeigt die Subpixel an, die der entsprechende aktive
Bereich bedeckt.
-
5A zeigt
ein Flussdiagramm auf hoher Ebene eines Verfahrens 200 gemäß der vorliegenden
Erfindung zum Mischen von Daten für ein Fragment beim Schneiden
eines ausgewählten
Pixels der Anzeige 104'.
Ein Fragment beinhaltet eine Anzeige eines Abschnitts des Pixels,
das von dem Fragment geschnitten wird. In einem bevorzugten Ausführungsbeispiel
wird diese Angabe von einer Bedeckungsmaske geliefert. In einem
Ausführungsbeispiel
ist die Bedeckungsmaske die gleiche wie die Flächenmaske, die oben diskutiert
worden ist. In einem anderen Ausführungsbeispiel jedoch kann
die Bedeckungsmaske eine andere Maske sein. Wenn beispielsweise
das Verfahren 200 beim Antialiasing von impliziten bzw. beinhalteten
Kanten verwendet wird, kann die Bedeckungsmaske für das Fragment die
oben beschriebene Gesamtmaske sein. Das Verfahren 200 verarbeitet
vorzugsweise die Fragmente, die das ausgewählte Pixel schneiden, einzeln.
Weiterhin kann jedes Pixel in eine Mehrzahl von Subpixel unterteilt
werden. In einem bevorzugten Ausführungsbeispiel wird jedes Pixel
in ein 4 × 4
Array von Subpixel unterteilt.
-
Mittels des Schritts 202 wird
wenigstens ein aktiver Bereich für
das Pixel bereitgestellt. Der wenigstens eine aktive Bereich schneidet
wenigstens einen Teil des Pixels. So schneidet der wenigstens eine
aktive Bereich einige oder alle der Subpixel in dem Pixel. In einem
bevorzugten Ausführungsbeispiel
wird in dem Schritt 202 ein erster aktiver Bereich bereitgestellt,
der das gesamte Pixel bedeckt. Vorzugsweise wird der erste aktive
Bereich bereitgestellt, indem das Bit in einem ersten aktiven Eintrag 160 gesetzt
wird. Ebenso zeigt in einem bevorzugten Ausführungsbeispiel der erste Bitfeldeintrag 180 an, dass
das gesamte Pixel bedeckt ist. In einem alternativen Ausführungsbeispiel
jedoch kann der erste aktive Bereich nicht das gesamte Pixel sein.
Wenn beispielsweise jede Mischeinheit für einen Teil von jedem Pixel
verwendet wird, kann der erste aktive Bereich nur einen Teil des
Pixels bedecken.
-
Wenigstens ein neuer Bereich wird
mittels des Schritts 204 bereitgestellt, indem der Schnitt
zwischen jedem der aktiven Bereiche und dem Fragment bestimmt wird.
In einem bevorzugten Ausführungsbeispiel
beinhaltet der Schritt 204 das Bestimmen des Schnitts zwischen
jedem der aktiven Bereiche und der Bedeckungsmaske des Fragments,
in dem der Schnittmaskengenerator 152 verwendet wird. Die
Anzahl der in Schritt 204 zur Verfügung gestellten neuen Bereiche
hängt von
der Anzahl der aktiven Bereiche ab und welcher Abschnitt von jedem aktiven
Bereich von dem Fragment geschnitten wird. Die neuen Bereiche werden
ebenso in einen ersten Abschnitt bzw. Teil der neuen Bereiche und
einen zweiten Abschnitt bzw. Teil der neuen Bereiche unterteilt.
Der erste Abschnitt der neuen Bereiche kann einen oder mehrere neue
Bereiche beinhalten. Der erste Abschnitt beinhaltet neue Bereiche,
die den Abschnitten der aktiven Bereiche entsprechen, die das Fragment
schneidet. So zeigt der erste Abschnitt der neuen Bereiche die Abschnitte
der aktiven Bereiche an, in denen Daten in dem Akkumulator einschließlich der
Farbe sich aufgrund des Fragments verändern werden. Der zweite Abschnitt
der neuen Bereiche kann keinen oder mehrere neue Bereiche beinhalten.
Der zweite Abschnitt beinhaltet wenigstens einen neuen Bereich,
der den Abschnitten des wenigstens einen aktiven Bereichs entspricht,
die das Fragment nicht schneidet.
-
Der erste Abschnitt des wenigstens
einen neuen Bereichs wird dann mittels des Schritts 206 unter
Verwendung der Mischeinheit 144' gemischt. Für jeden neuen Bereich in dem
ersten Abschnitt der neuen Bereiche verwendet die Mischeinheit vorzugsweise
einen Taktzyklus. Das Ergebnis wird ebenso im Schritt 206 wie
im Akkumulator 142' gespeichert.
In einem bevorzugten Ausführungsbeispiel
beinhaltet der Schritt 206 das Mischen der Farbe für das neue Fragment
mit jeglicher Farbe, die in dem Akkumulator 142' für jedes
Subpixel im ersten Abschnitt der neuen Bereiche gespeichert ist.
-
5B zeigt
ein Flussdiagramm auf hoher Ebene eines Verfahrens 200' gemäß der vorliegenden
Erfindung zum Bereitstellen von antialiasten Daten für das graphische
Bild, das auf der Anzeige 104' dargestellt ist. Die Schritte 202' bis 206' sind analog zu
den Schritten 202 bis 206 des Verfahrens 200.
Unter Bezugnahme zurück
auf 5B werden der wenigstens
eine aktive Bereich mittels des Schritts 208 mit dem wenigstens
einen neuen Bereich aktualisiert. So beinhalten die aktiven Bereiche
den ersten Teil der neuen Bereiche, wo die vorigen aktiven Bereiche und
das Fragment sich schneiden, und den zweiten Teil der neuen Bereiche,
wo die vorigen aktiven Bereiche und das Fragment sich nicht schneiden.
Die Schritte 204 bis 208 werden dann für jedes
verbleibende Fragment mittels des Schritts 208 wiederholt, das
das Pixel schneidet. So wird der Schnitt zwischen den aktiven Bereichen
und jedem neuen Fragment bestimmt. Es werden dann neue Bereiche
auf der Grundlage der Schnitte zur Verfügung gestellt. Die Farbe und
andere Daten für
Fragmente werden gemischt und die aktiven Bereiche aktualisiert.
Das Verfahren fährt
fort, sich zu wiederholen, bis alle der Fragmente, die das Pixel
schneiden, gemischt worden sind.
-
Wenn einmal die Daten für alle Fragmente, die
das Pixel schneiden, gemischt worden sind, werden mittels des Schritts 212 die
antialiasten Daten für das
Pixel bereitgestellt. In einem bevorzugten Ausführungsbeispiel beinhaltet der
Schritt 212 das Liefern der Daten, die aktuell für jedes
Subpixel in dem Akkumulator 142' gespeichert sind, an die Anzeige 104'. Die Schritte 204 bis 212 werden
dann für
jedes Pixel, das in der Anzeige verbleibt, mittels des Schritts 214 wiederholt.
So kann das Antialiasing für jedes
der auf der Anzeige 104' dargestellten
Objekte durchgeführt
werden.
-
6 zeigt
ein detaillierteres Flussdiagramm eines Verfahrens 220 zur
Durchführung
der Schritte 204 und 206 der Erzeugung des wenigstens einen
neuen Bereichs und der Mischung des Fragments. Die Bedeckungsmaske
für das
Fragment wird mittels des Schritts 222 mit jedem der aktiven
Bereiche geschnitten, um eine Schnittmaske für jeden der aktiven Bereiche
bereitzustellen. In einem bevorzugten Ausführungsbeispiel beinhaltet der
Schritt 222 die Durchführung
einer logischen UND-Verknüpfung des
Bitfelds von jedem der aktiven Bereiche mit der Bedeckungsmaske
des Fragments. Die aktiven Bereiche, die das Fragment schneidet,
können
in zwei Gruppen aufgeteilt werden. Die erste Gruppe beinhaltet die
aktiven Bereiche, die vollständig
von der Bedeckungsmaske des Fragments bedeckt werden. Die zweite
Gruppe beinhaltet die aktiven Bereiche, die nicht vollständig von
der Bedeckungsmaske des Fragments bedeckt werden. Für jeden
aktiven Bereich, der von der Bedeckungsmaske des Fragments bedeckt
ist, wird der aktive Bereich mittels des Schritts 224 als
ein neuer Bereich aktualisiert. Der aktive Bereich wird aktualisiert,
da die Farbe oder andere für
das Fragment gespeicherte Daten von den Daten des Fragments verändert werden.
In einem bevorzugten Ausführungsbeispiel
beinhaltet der Schritt 224 die Anzeige, dass der aktive
Bereich gemischt werden muss, wobei er aber nicht den aktiven Eintrag 160– 175 oder
den Bitfeldeintrag 180–185 des
aktiven Bereichs verändert.
Jeder aktive Bereich, der nicht von der Bedeckungsmaske bedeckt
ist, wird in zwei neue Bereiche mittels des Schritts 226 geteilt. Der
erste neue Bereich beinhaltet den Abschnitt des aktiven Bereichs,
der das Fragment schneidet. Der erste neue Bereich wird gemischt,
da die Farbe und andere Daten für
den ersten neuen Bereich von den Daten des Fragments verändert werden.
Die Abschnitte des Fragments, die der wenigstens einen Schnittmaske
entsprechen, werden dann mittels des Schritts 228 unter
Verwendung der Mischeinheit 144' gemischt. Für jede Mischung auf der Grundlage
der wenigstens einen Schnittmaske verwendet die Mischeinheit 144' vorzugsweise
einen Taktzyklus.
-
Die 7A und 7B zeigen ein detaillierteres Flussdiagramm
eines Verfahrens 250 zum Liefern von antialiasten Daten
gemäß der vorliegenden
Erfindung. Das aktuelle Pixel wird mittels des Schritts 252 ausgewählt. Der
erste aktive Bereich wird dann als der aktuelle aktive Bereich mittels
des Schritts 254 ausgewählt.
Der erste aktive Bereich entspricht vorzugsweise dem Hintergrund.
So beinhaltet der Schritt 254 das Setzen des ersten aktiven
Eintrags 160 in der Liste 156 der aktiven Bereiche
und das Anzeigen in dem ersten Bitfeldeintrag 180, das
der erste aktive Bereich alle Subpixel 301–316 umfasst.
So beinhaltet der Schritt 254 ebenso vorzugsweise das Speichern
der Farbe und anderer Daten für
den Hintergrund in dem Akkumulator 142'. Der Schritt 254 beinhaltet
ebenso das Liefern von Daten in Bezug auf den ersten aktiven Bereich
von der Bereichsliste 156 an den Schnittmaskengenerator 158.
-
Ein erstes Fragment wird als das
aktuelle Fragment mittels des Schritts 255 gesetzt. Das
erste Fragment wird das Fragment für das Polygon 372 sein.
Das aktuelle Fragment wird dann mit dem ersten aktiven Bereich mittels
des Schritts 256 geschnitten. In einem bevorzugten Ausführungsbeispiel
beinhaltet der Schritt 256 das Durchführen einer logischen UND-Verknüpfung der
Bedeckungsmaske des Fragments und des Bitfelds 160 des
ersten aktiven Bereichs. Der Schritt 256 beinhaltet ebenso
das Bereitstellen einer Schnittmaske auf der Grundlage des Schnitts
der Bedeckungsmaske für
das aktuelle Fragment und des Bitfelds 160 des ersten aktiven Bereichs.
Es wird dann mittels des Schritts 258 bestimmt, ob die
Bedeckungsmaske für
das aktuelle Pixel den aktuellen aktiven Bereich bedeckt. In so
einem Fall bedecken die Schnittmaske, die Bedeckungsmaske und der
aktuelle aktive Bereich den gleichen Abschnitt des Pixels. Die Bedeckungsmaske
wird den ersten aktiven Bereich bedecken, wenn das dem Fragment
entsprechende Polygon das gesamte Pixel bedeckt. Wenn der aktuelle
aktive Bereich von der Bedeckungsmaske bedeckt wird, wird mittels
des Schritts 262 der aktuelle aktive Bereich aktualisiert.
In einem bevorzugten Ausführungsbeispiel
beinhaltet der Schritt 262 die Anzeige, dass der aktuelle
aktive Bereich einer Mischung unterzogen wird, ohne Veränderung
des aktiven Eintrags 160–175 oder des Bitfeldeintrag 180–195,
die dem aktuellen aktiven Bereich entsprechen. So wird kein neuer
Bereich erzeugt, wenn die Bedeckungsmaske anzeigt, dass das Fragment
dem gesamten aktuellen aktiven Bereich schneidet.
-
Wenn jedoch die Bedeckungsmaske des
aktuellen Pixels nicht den aktuellen aktiven Bereich bedeckt, wird
mittels des Schritts 260 der aktuelle aktive Bereich in
zwei neue Bereiche geteilt. Der erste neue Bereich, der in Schritt 260 gebildet
wird, ist der gleiche wie die Schnittmaske und beinhaltet den Abschnitt
des aktuellen aktiven Bereichs, den das Fragment schneidet. In einem
bevorzugten Ausführungsbeispiel
beinhaltet das Bilden des ersten neuen Bereichs in Schritt 260 das
Setzen eines Bits in einem nächsten
aktiven Eintrag der aktiven Einträge 160–175 und
das Anzeigen eines nächsten
Bitfeldeintrags des nächsten
Bitfeldeintrags 180–195. Der
nächste
Bitfeldeintrag zeigt an, dass das Bitfeld den gleichen Abschnitt
des Pixels wie die Schnittmaske bedeckt. Der zweite neue Bereich
beinhaltet den Abschnitt des aktuellen aktiven Bereichs, den das
Fragment nicht schneidet. So wird der zweite neue Bereich nicht
einer Mischung unterzogen und entspricht dem Komplement der Schnittmaske.
Das Komplement der Schnittmaske bedeckt den Abschnitt des aktuellen
aktiven Bereichs, der nicht in der Schnittmaske umfasst ist. Das
Bereitstellen des zweiten neuen Bereichs beinhaltet vorzugsweise
das Aktualisieren des aktuellen aktiven Bereichs. Das Aktualisieren
des aktuellen aktiven Bereichs für
den zweiten neuen Bereich ändert
das Bitfeld in dem Bitfeldeintrag 180–195 des aktuellen
aktiven Bereichs. Das Bitfeld für
den aktuellen aktiven Bereich wird verändert, um nur den Abschnitt
des Pixels zu umfassen, der von dem Komplement der Schnittmaske
bedeckt ist.
-
Mittels des Schritts 264 wird
dann eine Mischung für
die Schnittmaske des aktuellen aktiven Bereichs durchgeführt. Repräsentative
Daten für
den aktuellen Bereich, wie beispielsweise die Farbe, die in dem
Akkumulator 142' gespeichert
sind, werden mittels der Einheit 148 für aktuelle Daten zur Verfügung gestellt.
Die Einheit 148 für
aktuelle Daten wählt ein
Subpixel in dem aktuellen Bereich von dem Akkumulator 142' aus und liefert
die repräsentativen
Daten von diesem Subpixel. Die Einheit 148 für aktuelle Daten
erhält
Informationen darüber,
welches der Subpixel in dem Akkumulator 142' von der Bereichsliste 156 ausgewählt werden
soll. Die Mischeinheit 144' mischt
die Daten, einschließlich
der Farbe, von dem Fragment mit den repräsentativen Daten in Schritt 264.
Der Schritt 264 beinhaltet ebenso das Liefern der gemischten
Daten an eine Sendeeinheit 147. Der Sendeeinheit 147 wird
die Schnittmaske von der Bereichsliste 156 zur Verfügung gestellt.
Die Sendeeinheit 147 sendet die gemischten Daten zu dem
Subpixel in der Schnittmaske in Schritt 264. Der Schritt 264 benötigt vorzugsweise
einen einzigen Taktzyklus.
-
Es wird dann mittels des Schritts 266 bestimmt,
ob ein anderer aktiver Bereich verbleibt, der noch mit dem aktuellen
Fragment geschnitten werden muss. Wenn das so ist, wird mittels
des Schritts 268 der nächste
aktive Bereich als der aktuelle aktive Bereich gesetzt. Die Schritte 256 bis
wenigstens 266 werden dann wiederholt. Wenn kein anderer
aktiver Bereich mit dem aktuellen Fragment geschnitten werden muss,
wird dann in Schritt 270 bestimmt, ob ein anderes Fragment,
das das Pixel schneidet, mittels des Schritts 270 verarbeitet
werden soll. Wenn das so ist, wird mittels des Schritts 272 das
nächste zu
verarbeitende Fragment als aktuelles Fragment gesetzt. Die Schritte 254 bis
wenigstens 270 werden dann wiederholt.
-
Wenn kein anderes Fragment die Pixel schneidet,
wird dann in Schritt 274 bestimmt, ob alle Pixel in der
Anzeige 104' verarbeitet
worden sind. Wenn das nicht so ist, wird dann mittels des Schritts 276 das
nächste
Pixel als aktuelles Pixel gesetzt. Die Schritte 254 bis
wenigstens 276 werden dann wiederholt. Wenn keine Pixel
verbleiben, endet das Verfahren 250.
-
Um das Verfahren 250 weiter
zu erklären, wird
auf die 8A bis 11D Bezug genommen. Die 8A zeigt ein Pixel 300 der
Anzeige 104'.
Das Pixel 300 beinhaltet die Fragmente 372 und 374 für zwei Polygone.
Es ist ebenso der Hintergrund 270 dargestellt. Die Fragmente 372 und 374 teilen
sich die Kante 376.
-
Die 8B zeigt
das gleiche Pixel 300 bei dargestellten Subpixeln 301 bis 316.
In einem bevorzugten Ausführungsbeispiel
wird jedes Pixel 300 in ein 4 × 4 Array von Subpixel 301–316 aufgeteilt.
Es verhindert jedoch nicht die Verwendung von einer anderen Anzahl
von Subpixel. Ob die Fragmente 372 und 374 sich
an der Kante 376 schneiden oder überlappen und den gleichen
Platz an der Kante 376 belegen, verändert vorzugsweise im wesentlichen
nicht die vorliegende Erfindung. Zur Vereinfachung der Erklärung wird
jedoch angenommen, dass das Fragment 372 alle Subpixel 308, 311–312 und 314–316 sowie
die Hälfte
der Subpixel 304, 307, 310 und 313 beinhaltet.
Zur Vereinfachung der Erklärung
wird angenommen, dass das Fragment 374 alle Subpixel 305, 309–310 und 313–315 und
die Hälfte
der Subpixel 301, 306, 311 und 316 beinhaltet.
Die 8C und 8D zeigen die Bedeckungsmasken 318 und 319 für die Fragmente 372 bzw. 374.
-
Unter Bezugnahme auf die 7–8D sind die
Fragmente 372 und 374 zu rendern. Das Pixel 300 wird
mittels des Schritts 252 als aktuelles Pixel gesetzt. So
wird das Bitfeld für
den ersten aktiven Bereich als das gesamte Pixel 300 gesetzt.
Die 9 zeigt den ersten
aktiven Bereich 320. Weiterhin werden Daten für den ersten
aktiven Bereich als Hintergrunddaten angenommen. Dementsprechend
werden Hintergrunddaten für
jedes der Subpixel 301–316 gespeichert.
Das erste Fragment wird dann mittels des Schritts 255 als
aktuelles Fragment gesetzt. Zur Vereinfachung der Erklärung wird
das erste Fragment das Fragment 374 sein.
-
Das Fragment 372 bedeckt
nicht das gesamte Pixel 300, so dass der Schritt 258 anzeigen
wird, dass die Bedeckungsmaske für
das Fragment nicht dem ersten aktiven Bereich 320 bedeckt.
So wird unter Verwendung des Schritts 260 der erste aktive
Bereich 320 gespalten.
-
Es werden die Subpixel der erste
neue Bereich sein, die der Schnittmaske entsprechen, die unter Verwendung
des ersten aktiven Bereichs 320 und der Bedeckungsmaske 318 des
Fragments 372 erzeugt worden ist. Das Bilden des ersten
neuen Bereichs beinhaltet vorzugsweise das Setzen des zweiten aktiven
Eintrags 161 und das Anzeigen in dem zweiten Bitteldeintrag 181,
dass der erste neue Bereich der Schnittmaske für das Fragment 372 entspricht.
Da der erste aktive Bereich 320 das gesamte Pixel 300 bedeckt
hat, ist die Schnittmaske für
das Fragment 372 die gleiche wie die Bedeckungsmaske 318. 10B zeigt den ersten neuen
Bereich 322. Der zweite neue Bereich, der in Schritt 260 gebildet worden
ist, wird der verbleibende Teil des ersten aktiven Bereichs 320 sein.
So ist der zweite neue Bereich nur eine aktualisierte Version des
ersten aktuellen Bereichs. Die 10A zeigt
den ersten aktiven Bereich 320' nach der Aktualisierung unter
Verwendung des Komplements der Bedeckungsmaske. Es wird hervorgehoben,
dass wenn der Schritt 260 vervollständigt ist, die aktiven Bereiche
für das
nächste verarbeitete
Fragment den ersten aktiven Bereich 320' und einen zweiten aktiven Bereich 322 beinhalten,
der der erste neue Bereich 322 ist.
-
Eine Mischung wird dann mittels des
Schritts 264 für
jede Schnittmaske bereitgestellt. Der Schritt 264 beinhaltet
das Mischen der Daten von dem Fragment 372 mit den Hintergrunddaten
und das Liefern der Ergebnisse an die geeigneten Abschnitte des
Akkumulators 142'.
Die 10C zeigt die Subpixelpuffer 331 bis 345 für den Akkumulator 142'. Das „x" zeigt Hintergrunddaten
an. Das „a" zeigt Daten für das Fragment 372 an,
das mit den Hintergrunddaten gemischt worden ist. So beinhalten
die Subpixelpuffer 331–333, 335–336 und 339 Hintergrunddaten.
Die verbleibenden Subpixelpuffer 334, 336–338 und 340–346 beinhalten
gemischte Daten.
-
Da es keine weiteren zu mischenden
aktiven Bereiche gibt und da das Fragment 374 verarbeitet werden
soll, wird in Schritt 272 das Fragment 374 als aktuelles
Fragment gesetzt. Der erste aktive Bereich 322' wird mittels
des Schritts 254 als der aktuelle aktive Bereich gesetzt.
Der Schnitt zwischen dem Fragment 374 und dem ersten aktiven
Bereich 320' wird dann
ermittelt. Das Fragment 374 bedeckt nicht den gesamten
ersten aktiven Bereich. Daher wird der erste aktive Bereich 320' mittels des
Schritts 260 geteilt. Es werden die Subpixel der erste
neue Bereich sein, die der Schnittmaske entsprechen, die unter Verwendung
des ersten aktiven Bereichs 320 und der Bedeckungsmaske 319 des
Fragments 374 erzeugt worden ist. Das Ausbilden des ersten
neuen Bereichs beinhaltet vorzugsweise das Setzen des zweiten dritten
aktiven Bereichs 162 und das Anzeigen in dem dritten Bitfeldeintrag 182, dass
der erste neue Bereich der Schnittmaske für das Fragment 374 und dem
ersten aktiven Bereich 320' entspricht.
Die 11C zeigt den ersten
neuen Bereich 324 oder den dritten aktiven Bereich 324.
Der in Schritt 260 gebildete zweite neue Bereich wird Teil
des ersten aktiven Bereichs 320' bleiben. So ist der zweite neue
Bereich nur eine aktualisierte Version des ersten aktiven Bereichs 320'. Die 11A zeigt den ersten aktiven Bereich 320'', nachdem er unter Verwendung des Komplements
der Bedeckungsmaske aktualisiert worden ist.
-
Eine Mischung wird dann mittels des
Schritts 264 für
jede Schnittmaske zur Verfügung
gestellt. Der Schritt 264 beinhaltet das Mischen der Daten
von dem Fragment 374 mit den Hintergrunddaten und das Liefern
der Ergebnisse an die entsprechenden Abschnitte des Akkumulators 142'. Das Mischen
in Schritt 264 beansprucht einen Taktzyklus, um die Daten
in den Subpixeln entsprechend des dritten aktiven Bereichs 324 zu
mischen.
-
Mittels des Schritts 266 wird
dann ermittelt, dass der zweite aktive Bereich verarbeitet werden soll.
Der zweite aktive Bereich 322 wird mittels des Schritts 268 als
aktueller aktiver Bereich gesetzt. Der Schnitt zwischen dem Fragment 374 und
dem zweiten aktiven Bereich 322 wird dann ermittelt. Das Fragment 374 bedeckt
nicht den gesamten zweiten aktiven Bereich. Daher wird mittels des
Schritts 260 der zweite aktive Bereich 322 geteilt.
Der erste neue Bereich wird die Subpixel umfassen, die der Schnittmaske
entsprechen, die unter Verwendung des zweiten aktiven Bereichs 322 und
der Bedeckungsmaske 319 des Fragments 374 erzeugt
worden ist. Das Bilden des ersten neuen Bereichs beinhaltet vorzugsweise
das Setzen des vierten dritten aktiven Eintrags 163 und
das Anzeigen in dem vierten Bitfeldeintrag 183, das der
erste neue Bereich der Schnittmaske für das Fragment 374 und
den zweiten aktiven Bereich 322 entspricht. Die 11D zeigt den gebildeten
ersten neuen Bereich 326 oder den vierten aktiven Bereich 326.
Der in Schritt 260 gebildete zweite neue Bereich wird dann
Teil des zweiten aktiven Bereichs 322 bleiben. So ist der
zweite neue Bereich nur eine aktualisierte Version des zweiten aktiven
Bereichs 322. Die 11B zeigt
den zweiten aktiven Bereich 322', nachdem er unter Verwendung des
Komplements der Bedeckungsmaske aktualisiert worden ist.
-
Eine Mischung wird dann mittels des
Schritts 264 für
jede Schnittmaske bereitgestellt. Der Schritt 264 beinhaltet
das Mischen der Daten von dem Fragment 374 mit den Daten
für den
zweiten aktiven Bereich 322 und das Liefern der Ergebnisse
an die geeigneten Teile des Akkumulators 142'. Das Mischen in Schritt 264 beansprucht
einen Taktzyklus, um die Daten in den Subpixeln zu mischen, die
dem vierten aktiven Bereich 326 entsprechen. Die 11E zeigt die Subpixelpuffer 331 bis 345 für den Akkumulator 142' nach der Mischung.
Das „x" zeigt Hintergrunddaten
an. Das „a" zeigt Daten für das Fragment 374 an,
das nur mit Hintergrunddaten gemischt worden ist. Ein „b" zeigt Daten für das Fragment 374 an,
das nur mit Hintergrunddaten gemischt worden ist. Ein „c" zeigt Daten für das Fragment 374 an,
das mit den „a"-Daten gemischt worden
ist. So beinhalten die Subpixelpuffer 332–333 Hintergrunddaten,
beinhalten die Subpixelpuffer 334, 337 bis 338 und 342 Daten
für das
Fragment 372, das nur mit Hintergrunddaten gemischt worden
ist, und beinhalten die Subpixelpuffer 331, 335–336 und 339 Daten
für das
Fragment 374, das nur mit Hintergrunddaten gemischt worden ist.
Die Subpixelpuffer 340, 341 und 342 bis 346 beinhalten
Daten, die für
den Hintergrund, das Fragment 372 und das Fragment 374 gemischt
worden sind.
-
Unter Verwendung der Verfahren 200, 220 und 250 können weniger
Mischeinheiten 142' verwendet
werden. In einem bevorzugten Ausführungsbeispiel kann eine einzige
Mischeinheit 142' für alle Subpixel
verwendet werden. So wird ein großes Maß an Platz in dem System 100' gespart. Auch
wenn das Verfahren einen einzigen Taktzyklus für jede Mischung und daher für jede Schnittmaske
verwendet, verlangsamt dies im allgemeinen die Verarbeitungsleistung
nicht stark. Üblicherweise
ist die Anzahl von Fragmenten begrenzt, die eine Kante in einem
bestimmten Pixel aufweisen. Daher ist die in 8A dargestellte Situation sehr unüblich. Statt
dessen bedeckt in der überwiegenden
Mehrheit der Fälle
jedes Fragment ein gesamtes Pixel. Daher wird üblicherweise eine Mischung
pro Fragment durchgeführt.
Als Ergebnis wird die Verarbeitungsgeschwindigkeit nicht verlangsamt.
Der Grund dafür
ist, dass die Mischeinheiten, die einen Teil eines Fragments für einen
einzigen Subpixelpuffer verarbeiten, ebenso einen Taktzyklus verwden,
um eine Mischung bereitzustellen. So wird Platz gespart, ohne im
allgemeinen die Verarbeitungsgeschwindigkeit zu opfern.
-
Zusätzlich kann die vorliegende
Erfindung zusammen mit herkömmlichen
Antialiasing-Techniken
verwendet werden, wie beispielsweise Super-Sampling, adaptives Super-Sampling, die A-Puffer-Technik
und die konventionelle Technik, die Gewichtung verwendet. Die Verwendung
der vorliegenden Erfindung bei der Durchführung von Super-Sampling beispielsweise
würde es
erlauben, eine einzige Mischeinheit beim Super-Sampling zu verwenden,
wobei im allgemeinen die Verarbeitungsgeschwindigkeit aufrecht erhalten
wird. Auf ähnliche Weise
könnte
der Umriß,
der oben in Bezug auf das adaptive Super-Sampling diskutiert worden
ist, ähnlich
zu den Masken behandelt werden, die mit bezug auf das Antialiasing
und das Antialiasing von beinhalteten Kanten diskutiert worden ist.
So ist das adaptive Super-Sampling vereinbar mit der vorliegenden
Erfindung. Dementsprechend kann das Verfahren und das System gemäß der vorliegenden
Erfindung auch die Anzahl von Mischeinheiten verringern, die in
herkömmlichen
Antialiasing-Techniken verwendet werden, ohne üblicherweise die Verarbeitungsleistung zu
opfern.
-
Auch in der unüblichen Situation, in der mehrfache
Fragmente Kanten bei einem Pixel beinhalten, ist jede beliebige
Verschlechterung der Leistung im allgemeinen hinnehmbar. In anderen
Worten ausgedrückt
werden mehr aktive Bereiche erzeugt, je mehr Fragmente Kanten an
dem gleichen Pixel haben. Mehr Schnittmasken werden also für jedes Fragment
erzeugt. In einem bevorzugten Ausführungsbeispiel führt jede
Schnittmaske zu einer Mischung. Je mehr Schnittmasken existieren,
um so mehr Mischungen werden erzeugt. Im Allgemeinen gibt es eine
Mischung für
jeden geschnittenen aktiven Bereich (jede erzeugte Schnittmaske).
So kann das System verlangsamt werden. Jedoch wird das System weiterhin
funktionieren. Daher ist jeder Verlust an Leistung, dem man begegnet,
hinnehmbar.
-
Es wurde ein Verfahren und ein System
zur effizienten Bereitstellung eines Antialiasing unter Verwendung
von weniger Mischeinheiten offenbart. Ein gemäß der vorliegenden Erfindung
geschriebenes Programm kann in einer Form eines von einem Rechner
lesbaren Mediums gespeichert werden, wie beispielsweise ein Speicher
oder eine CD-ROM, oder kann über
ein Netzwerk übertragen
werden und von einem Prozessor ausgeführt werden.
-
Auch wenn die vorliegende Erfindung
gemäß dem gezeigten
Ausführungsbeispiel
beschrieben worden ist, wird ein Fachmann auf dem Gebiet schnell
erkennen, dass es Variationen für
die Ausführungsbeispiele
geben könnte
und diese Variationen innerhalb des Gedankens und des Umfangs der
vorliegenden Erfindung liegen. Dementsprechend können viele Modifikationen von
einem Fachmann auf dem Gebiet gemacht werden, ohne den Umfang der beigefügten Ansprüche zu verlassen.