-
GEBIET DER
ERFINDUNG
-
Diese
Erfindung betrifft allgemein das Gebiet der Computergrafik und insbesondere
ein Verfahren und eine Vorrichtung zum Erzeugen von zusammengesetzten
Farbbildern, die durch Unterbildpunktauflösung definiert sind.
-
ALLGEMEINER
STAND DER TECHNIK
-
Viele
Computergrafiksysteme verwenden Bildpunkte zum Definieren von Bildern.
Die Bildpunkte sind auf einem Anzeigebildschirm als eine rechteckige
Anordnung von Punkten angeordnet. Aufgrund der diskreten Eigenart
der Bildpunkte kommt es zu Aliasing. Artefakte können auftreten, wenn ein ganzer
Bildpunkt eine Lichtintensität
oder Farbe erhält, die
auf einem unzureichenden Abtastwert von Punkten innerhalb dieses
Bildpunkts beruht. Um Aliasingeffekte in Bildern zu verringern,
können
die Bildpunkte an Unterbildpunktpositionen innerhalb des Bildpunktes
abgetastet werden. Jede der Unterbildpunktpositionen trägt Farbdaten
bei, die zum Erzeugen der zusammengesetzten Farbe dieses Bildpunktes
verwendet werden können.
Jedoch können
einige Grafiksysteme die Speichermenge zum Speichern von Subsampling-Farbdaten
begrenzen. Darum müssen solche
Grafiksysteme sorgfältig
auswählen,
welche Farbdaten gespeichert werden, so dass diese Systeme trotzdem
noch akkurat eine zusammengesetzte Farbe für jeden Bildpunkt erzeugen
können.
-
Darum
besteht Bedarf an einem Verfahren und einer Vorrichtung, die für jeden
Bildpunkt Farbauswahlen und -ersetzun gen vornehmen kann, ohne unbefriedigende
Artefakte in ein angezeigtes Bild hineinzutragen.
-
Es
beispielhaftes Grafiksystem ist in
US 5,594,854 beschrieben,
das eine grobe Unterbildpunktkorrektur ausführt, um die allgemeine Qualität angezeigter
Bilder zu verbessern. Das Grafiksystem arbeitet mit einer Rasterizer-Einheit
innerhalb einer Pipeline-Architektur, um eine Grafikgrundform in
eine Reihe von Fragmenten zu zerlegen, wobei jedes Fragment nur
einen Teil eines Bildpunktes abdeckt und einen zugeordneten "Alpha-Wert" hat, der die prozentuale
Bildpunktabdeckung darstellt. Eine "Alpha-Testeinheit" vergleicht den Alpha-Wert eines Fragments
mit einem Referenz-Alpha-Wert und kann ein Fragment bedingt zurückweisen,
wenn davon ausgegangen wird, dass die endgültige Farbe des Bildpunktes
nicht korrekt wiedergegeben werden würde, wenn zum Beispiel eine
prozentuale Abdeckung eines Bildpunktes durch ein neues Fragment zu
gering ist.
-
KURZDARSTELLUNG
DER ERFINDUNG
-
Gemäß der vorliegenden
Erfindung, die durch die angehängten
Ansprüche
definiert ist, besteht eine Aufgabe darin, eine Vorrichtung und
ein Verfahren zum Bestimmen von Farben von Bildpunkten bereitzustellen.
Die Erfindung ermöglicht
es, effektiv im Rahmen von Speicherbeschränkungen zum Speichern von Bildpunktdaten
zu arbeiten, indem die Fragmentdaten ausgewählt werden, die zu der Farbe eines
bestimmten Bildpunktes beitragen, was anhand von Fragmenten verschiedener
Objekte oder Flächen
des Bildes erfolgen kann, während
merkliche Farbunterschiede für
den Bildpunkt minimiert werden und das Hineintragen unbefriedigender
Artefakte vermieden wird.
-
In
ihrer weitesten Form beruht die vorliegende Erfindung auf einem
Verfahren und einer Vorrichtung zum Bestimmen einer Farbe eines
Bildpunktes gemäß Ausführung in
Anspruch 1 bzw. Anspruch 11. In dem Verfahren speichert die Anordnung
bis zu einer vorgegebenen Anzahl von Fragmentwerten für den Bildpunkt.
Jeder gespeicherte Fragmentwert ist einem Fragment eines Bildes
zugeordnet, das in dem Bildpunkt sichtbar ist. Es wird ein neues
Fragment bestimmt, das in dem Bildpunkt sichtbar ist, wobei wenigstens
ein weiteres Fragment mit einem gespeicherten Fragmentwert immer
noch in dem Bildpunkt sichtbar ist. Der Fragmentwert eines der sichtbaren Fragmente
wird verworfen, um zu bestimmen, welche Fragmentwerte gespeichert
und anschließend zum
Erzeugen der Farbe des Bildpunktes verwendet werden.
-
Gemäß der vorliegenden
Erfindung ist der verworfene Fragmentwert einer der gespeicherten Fragmentwerte.
-
Vorzugsweise
ist das neue Fragment Teil einer anderen Fläche des Bildes als jedes der
Fragmente, die einem gespeicherten Fragmentwert zugeordnet sind.
-
Bei
einer Ausführungsform
wählt das
Verfahren das Verwerfen des gespeicherten Fragmentwertes mit dem
Z-Tiefenwert, der größer ist
als der Z-Tiefenwert jedes anderen gespeicherten Fragmentwertes,
und ersetzt diesen Fragmentwert durch den neuen Fragmentwert. Je
größer der
Z-Tiefenwert, desto weiter ist das zugehörige Fragment vom Betrachter des
Bildes entfernt.
-
Bei
einer weiteren Ausführungsform
wählt das
Verfahren das Verwerfen des gespeicherten Fragmentwertes mit dem
Farbwert, der einen numerisch kleineren Farbunterschied als der
Farbwert jedes anderen gespeicherten Fragmentwertes im Vergleich
zu dem Farbwert des neuen Fragmentwertes erzeugt. Das Verwerfen
des Fragmentwertes, der den kleinsten Farbunterschied erzeugt, minimiert merkliche
Farbveränderungen
für den
Bildpunkt.
-
Was
das Vorrichtung betrifft, umfasst die Anordnung einen Speicher und
eine Grafikvorrichtung auf. Der Speicher speichert bis zu einer
vorgegebenen Anzahl von Fragmentwerten für einen bestimmten Bildpunkt.
Jeder gespeicherte Fragmentwert ist einem Fragment eines Bildes
zugeordnet, der in dem Bildpunkt sichtbar ist. Die Grafikvorrichtung
bestimmt, dass ein neues Fragment in dem Bildpunkt sichtbar ist,
wobei wenigstens ein weiteres Fragment mit einem gespeicherten Fragmentwert
immer noch in dem Bildpunkt sichtbar ist. Die Grafikvorrichtung verwirft
den Fragmentwert eines der sichtbaren Fragmente, um zu bestimmen,
welche Fragmentwerte zum Erzeugen der Farbe des Bildpunktes verwendet werden
können.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
Es
wird eine beispielhafte Ausführungsform der
Erfindung anhand der begleitenden Zeichnungen beschrieben, in denen:
-
1 ein
Blockschaubild eines beispielhaften Computergrafiksystems ist, das
zum Ausführen der
Erfindung verwendet werden kann;
-
2A-2C verschiedene
Unterteilungen eines Bildpunkts in Unterbildpunkte darstellen und
beispielhafte Sparse-Supersampling-Muster darstellen, die zum Abtasten
der Unterbildpunkte verwendet werden können;
-
3 ein
beispielhaftes Verbinden von Unterbildpunktabtastwerten in einem
der Supersampling-Muster der 2A-2C mit
zwei Fragmenttripeln, die in einem Bildpunktspeicher gespeichert sind,
darstellt;
-
4 ein
anderes Verbinden von Unterbildpunktabtastwerten darstellt, wenn
ein drittes Fragment in einem Bildpunkt auftritt;
-
5A-5C alternative
Verbindungen von Unterbildpunktabtastwerten für den Fall darstellen, dass
ein drittes Fragment in einem Bildpunkt auftritt;
-
6A und 6B eine
logische Darstellung des Bildpunktspeichers darstellen, der Indizes zu
den gespeicherten Fragmenttripeln enthält,
-
6C und 6D eine
logische Darstellung des Bildpunktspeichers veranschaulichen, der Deckmasken
enthält,
die den gespeicherten Fragmenttripeln zugeordnet sind, und
-
7 ein
Flussdiagramm veranschaulicht, das ein beispielhaftes Verfahren
beschreibt, das die vorliegende Erfindung anwendet.
-
DETAILLIERTE
BESCHREIBUNG EINER BEVORZUGTEN AUSFÜHRUNGSFORM
-
Systemübersicht
-
1 zeigt
ein Computersystem 100, das einfarbige oder vielfarbige
2-dimensionale (2D) und 3-dimensionale (3D) Grafikbilder zum Anzeigen
gemäß den Prinzipien
der vorliegenden Erfindung erzeugen kann. Das Computersystem 100 kann
eines aus einer Vielfalt von Rastergrafiksystemen sein, wie zum
Beispiel ein Personalcomputer, ein Arbeitsplatzrechner oder ein
Großrechner.
-
In
dem Computersystem 100 stellt ein System-Chipset 104 eine
Schnittstelle zwischen einer Verarbeitungseinheit 102,
einem Hauptspeicher 106, einem Grafikbeschleuniger 108 und
(nicht gezeigten) Bauelementen auf einem E/A-Bus 110 dar.
Die Verarbeitungseinheit 102 ist mit dem System-Chipset 104 durch
den Host-Bus 102 gekoppelt und enthält eine zentrale Verarbeitungseinheit
(CPU) 118. Der Hauptspeicher 106 hat eine Schnittstelle
zu dem System-Chipset 104 über den Bus 114. Der
Grafikbeschleuniger 108 ist mit dem System-Chipset 104 durch
einen Bus 116 gekoppelt, über welchen der Grafikbeschleuniger 108 Grafikbefehle
empfangen kann, um grafische Bilder wiederzugeben. Ein Grafikspeicher 122 und
eine Anzeigevorrichtung 126 sind mit dem Grafikbeschleuniger 108 gekoppelt,
der Grafikspeicher 122 ist durch den Bus 124 gekoppelt,
und die Anzeigevorrichtung 126 durch den Bus 127.
Die Anzeigevorrichtung 126 weist einen Katodenstrahlröhren-(KSR)-Rasteranzeigebildschirm 128 mit
einer Anzeigefläche
oder einem Bildschirm 130 auf. Die KSR 128 erzeugt
Farbbilder, aber die Erfindung kann auch mit einem einfarbigen Monitor
angewandt werden, um Graustufenbilder anzuzeigen, oder mit einem
Drucker, der Schwarz-Weiß-
oder Farbbilder druckt.
-
Ein
Bild 132 erscheint auf dem Anzeigebildschirm 130,
indem ein bestimmtes Muster einzelner Punkte, die Bildpunkte 134 genannt
werden, beleuchtet wird. Das Bild 132 kann zum Beispiel
alphanumerische 2D-Zeichen oder eine 3D-Szene sein, die mit Objekten
gefüllt
ist. Der Anzeigebildschirm 130 enthält eine zwei-dimensionale Anordnung
solcher Bildpunkte 134. Die Anordnungsgröße von Anzeigebildschirmen 130 kann
stark variieren. Als Beispiele für
Größen von
Anzeigebildschirmen 130 seien 1024 × 768 und 1920 × 1200 Bildpunkte
genannt. Zum Zweck des Ausführens
der Erfindung kann die Anzeigevorrichtung 126 auch jede
beliebige andere auf Bildpunkten basierende Anzeige sein, wie zum Beispiel
eine Flüssigkristallanzeige
oder ein Punktmatrix-Drucker.
-
Der
Grafikspeicher 122 umfasst Speicherelemente zum Speichern
einer codierten Version des grafischen Bildes 132. Es besteht
eine direkte Entsprechung zwischen den Speicherelementen und jedem
Bildpunkt 134 auf dem Anzeigebildschirm 130. Die
Speicherelemente werden zum Speichern von Daten zugeordnet, die
jeden Bildpunkt 134 darstellen, im Weiteren Bildpunktdaten
genannt. Fünf
Byte können
zum Beispiel verwendet werden, um eine Farbdarstellung für jeden
Bildpunkt zu codieren.
-
Die
in den Speicherelementen für
einen bestimmten Bildpunkt gespeicherten Werte steuern die Farbe
des konkreten Bildpunkts 134 auf dem Bildschirm 130.
Unter "Farbe" ist zu verstehen,
dass auch die Helligkeit oder Intensität des Bildpunkts 134 gemeint
ist. Bildpunktdaten können
direkt in Farben oder in Indizes umgesetzt werden, um auf eine Farbnachschlagtabelle
zuzugreifen.
-
Während des
Betriebs kann das Computersystem 100 Grafikbefehle ausgeben,
die das Anzeigen eines Objekts fordern. Der Grafikbeschleuniger 108 führt die
Grafikbefehle aus, indem er das Objekt in Grundformen und dann in
Fragmente umwandelt. Eine Grundform ist eine grafische Struktur,
wie zum Beispiel eine Linie, ein Dreieck, ein Kreis oder ein Flächenfleck
einer soliden Form, die verwendet werden kann, um komplexere Strukturen
aufzubauen. Ein Fragment ist ein 2D-Vieleck, das durch Beschneiden
einer Grundformen des Bildes 132, wie zum Beispiel einer
Linie, eines Dreiecks oder eines Kreises, auf die Grenzen des Bildpunkts 124 geschaffen
wird. Eine detailliertere Beschreibung von Fragmenten wird von Loren
Carpenter in "The
A-buffer, an Antialiased Hidden Surface Method", Computer Graphics Band 18, Nr. 3,
1984, Seiten 103-107, gegeben. Dort vereinen Techniken Fragmente
zu einer Fragmentliste, wenn die Fragmente von demselben Objekt
oder derselben Fläche
des Bildes stammen. Hier können die
Fragmente, die kombiniert werden, um die Farbe eines Bildpunkts
zu ergeben, zueinander verschiedene Beziehung haben. Das heißt, dass
die Fragmente von verschiedenen Objekten oder Flächen des Bildes 132 sein
können.
-
Der
Grafikbeschleuniger 108 gibt die Fragmente wieder und lädt die Bilddatenpunkte,
die den Fragmenten entsprechen, in die entsprechenden Speicherelemente
des Grafikspeichers 122. Die Bildpunktdaten können von
dem Hauptspeicher 106 über die
Busse 112, 114, 116 und 124 in
den Grafikspeicher 122 übertragen
oder direkt durch den Grafikbeschleuniger 108 in den Grafikspeicher
geschrieben werden.
-
Zum
Anzeigen des Bildes 132 projiziert der KSR-Monitor 128 einen
Strahl auf den Bildschirm 130. Synchron dazu werden die
Bildpunktdaten aus dem Grafikspeicher 122 gelesen, während der
Strahl den Bildschirm 130 abtastet. Der KSR-Monitor 128 gibt
die Bildpunktdaten als beleuchtete Farbpunkte auf dem Anzeigebildschirm 130 wieder.
-
Die 2A-2C veranschaulichen
verschiedene beispielhafte Unterteilungen eines Bildpunkts 134. 2A zeigt
den Bildpunkt 134, aufgeteilt in eine Anordnung 200 aus
4 × 4
gleichmäßig verteilten
Punkten, die Unterbildpunkte 206 genannt werden; 2B zeigt
eine Anordnung 202 aus 8 × 8 Unterbildpunkten 206;
und 2C zeigt eine Anordnung 204 von 16 × 16. Das
Teilen eines Bildpunkts 134 in Unterbildpunkte 206 ergibt
mehrere Punkte, an welchen das Bild 132, das den Bildpunkt 134 bedeckt,
abgetastet werden kann. Als Referenz ist die Mitte 201 des
Bildpunkts 134 als ein X gezeigt.
-
Im
Allgemeinen ist die Auflösung
des Bildpunkts 134 umso größer, je mehr Unterbildpunkte 206 sich
in der Anordnung befinden. Daher beruht die angezeigte Farbe des
Bildpunkts 134 nicht vollständig auf einem einzigen Abtastpunkt,
sondern auf mehreren Unterbildpunktabtastwerten 206. Verfahren
zum Berechnen eines Bildpunktwerts aus mehreren Abtastpunkten sind
einschlägig
bekannt.
-
Bekannte
Implementierungen tasteten an jedem Unterbildpunkt 206 in
einem Bildpunkt 134 ab. Während ein solches Vollszenen-Supersampling
theoretisch die Möglichkeit
zum Erreichen einer hohen Auflösung
bot, nahm die Technik unnötig
Speicherressourcen in Anspruch. Jeder abgetastete Unterbild punkt 206 verbrauchte
Speicherressourcen, um die abgetasteten Daten zu speichern und zu
verwenden. Das volle Abtasten der 4 × 4-Anordnung 200 aus Unterbildpunkten 206 erforderte
somit Speicherplatz für
sechzehn Abtastwerte zusätzlich
zu den typischen Speicheranforderungen für jeden Bildpunkt 134.
Wenn jeder der sechzehn Abtastwerte zum Beispiel 8 Byte Speicher
erfordern würde,
so könnte
das Implementieren von Vollszenen-Supersampling für einen
Anzeigebildschirm 130 mit 1920 × 1200 Bildpunkten zusätzliche
295 MByte Speicher erfordern. Die 16 × 16-Anordnung 204,
die Speicher für 256 Abtastwerte
erfordert, braucht sechzehn Mal so viel Speicher.
-
Dementsprechend
tasten neuere moderne Implementierungen nicht an jedem Unterbildpunkt 206 ab.
Vielmehr sind die Unterbildpunkte 206, die abgetastet werden,
dünn in
der Unterbildpunktanordnung verteilt. Im Allgemeinen wurden bei
solchem Sparse-Supersampling fast ebenso effektive Antialiasing-Resultate
erzielt bei der die Vollszenen-Supersampling-Technik.
-
Die 2A-2C veranschaulichen
jeweils ein beispielhaftes Sparse-Supersampling-Muster 210, 220, 230,
das zum Abtasten der Unterbildpunkte 206 der entsprechenden
Unterbildpunktanordnung verwendet werden kann. Die veranschaulichten
beispielhaften Abtastmuster 210, 220, 230 haben
jeweils N Abtastwerte, die gleichmäßig über eine N × N-Unterbildpunktanordnung mit genau einem Unterbildpunktabtastwert
in jeder bestimmten Zeile und in jeder bestimmten Spalte verteilt
sind.
-
Das
Abtastmuster 210 hat vier Unterbildpunktabtastwerte S1-S4 (N ist gleich
4). Für
das Abtastmuster 220 ist N gleich 8, und die acht Unterbildpunktabtastwerte 222 sind
S1-S8. Für
das Abtastmuster 230 ist N gleich 16, und die sechzehn
Unterbildpunktabtastwerte 232 sind S1-S16. Das Abtastmuster 210, 220, 230 kann
für jeden
Bildpunkt 134 auf dem Anzeige bildschirm 130 wiederholt
werden. Verschiedene andere Abtastmuster können verwendet werden, um die
erfindungsgemäßen Prinzipien umzusetzen.
-
Obwohl
das Sparse-Supersampling weniger Speicher verwendet als das Vollszenen-Supersampling,
werden dennoch beträchtliche
Mengen an zusätzlichem
Speicher benötigt.
Wenn N zum Beispiel gleich 4 ist, braucht ein Bildschirm 130 mit
1920 × 1200
Bildpunkten immer noch acht Byte Speicher für jeden der vier Unterbildpunktabtastwerte.
Das erfordert zusätzliche
74 MByte Bildpunktdaten. Die Anforderungen verdoppeln und vervierfachen
sich, wenn N gleich 8 bzw. 16 ist.
-
Die
beschriebenen Anordnungen können
die Speicheranforderungen sogar noch weiter verringern als ein solches
Sparse-Supersampling,
ohne die Anzahl der Unterbildpunktabtastwerte für eine Anordnung aus N × N Unterbildpunkten
zu verringern. Das Verfahren und die Vorrichtung, die im vorliegenden Text
beschrieben sind, beruhen auf der Beobachtung, dass in der Regel
nur einige wenige Fragmente des Bildes 132 innerhalb eines
bestimmten Bildpunkts sichtbar sind.
-
Für Standbilder
und bewegte Bilder erscheinen die Antialiasing-Effekte, die durch
acht Sparse-Supersampling-Abtastwerte in der 8 × 8-Anordnung 202 erzielt
werden, deutlich besser als für
vier Abtastwerte in der 4 × 4-Anordnung 200.
Aber Unterschiede zwischen sechzehn Abtastwerten in der 16 × 16-Anordnung 204 und
acht Abtastwerten in der 8 × 8-Anordnung 202 sind
möglicherweise
nicht feststellbar.
-
3 zeigt
einen beispielhaften Bildpunkt 300, der zu dem Bild 132 gehört und in
eine 4 × 4-Unterbildpunktanordnung 200 unterteilt
ist. Der Bildpunkt 300 hat vier Abtastpositionen gemäß dem Abtastmuster 210 von 2A.
In dem Bildpunkt 300 befinden sich zwei Fragmente 301, 302.
Jedem Fragment 301, 302 ist ein Fragmentwert zugeordnet,
der ein Fragmenttripel 310, 312 genannt wird.
In 3 ist das Fragmenttripel 310 zum Beispiel
dem Fragment 302 zugeordnet, und das Fragmenttripel 312 dem Fragment 301.
-
Fragmentwerte
werden Fragmenttripel genannt, weil jedes Fragmenttripel 310, 312 drei
Werte enthält:
einen Farbwert 304, einen Z-Tiefenwert 306 und
einen Matrizenwert 308. Der Farbwert 304 stellt die
Farbe und die Opazität
des entsprechenden Fragments dar. Der Z-Tiefenwert 306 stellt
einen Z-Koordinatenwert des entsprechenden Fragments entlang einer
Z-Achse dar, die zu dem Bild 132 senkrecht ist, um eine
3D-Tiefe zu erzeugen. Der Matrizenwert 308 kann verwendet
werden, um Sätze
von Fragmenten des Bildes 132 zu gruppieren oder zu identifizieren
oder um logisch oder arithmetisch Operationen an Fragmenten zu verarbeiten
oder zu zählen,
oder für
andere Zwecke, die dem Fachmann bekannt sind.
-
Bei
der bevorzugten Ausführungsform
verwenden die beispielhaften Fragmenttripel 310, 312 jeweils
fünf Byte,
um die Farbe 304 darzustellen, drei Byte für die Z-Tiefe 306 und
ein Byte für
die Matrize 308. Die fünf
Bytes für
die Farbe 304 nehmen vier 10-Bit-Farbkanäle auf:
Rot, Grün,
Blau und Alpha.
-
Die
Farbe eines Fragments wird durch die Kombination der Werte ausgedrückt, die
in den Kanälen
Rot, Grün
und Blau (RGB) gespeichert sind. Der in jedem RGB-Kanal gespeicherte
Wert zeigt die Intensität
(oder Helligkeit) dieses Farbkanals an. Niedrige Werte entsprechen
dunklen Farben von geringer Intensität; hohe Werte entsprechen hellen
Farben von hoher Intensität.
Verschiedene Verfahren zum Erzeugen der Farbe durch Kombinieren
der RGB-Werte sind einschlägig
bekannt.
-
Die
Opazität
des Fragments wird durch den Wert ausgedrückt, der in dem Alphakanal
gespeichert ist. Ein 1,0-Wert (das heißt alle 10 Alphakanalbits sind
1) zeigt zum Beispiel an, dass das zugehörige Fragment opak ist; ein
Wert 0,0 zeigt an, dass das Fragment unsichtbar ist, das heißt vollständig transparent;
und Werte zwischen 0,0 und 1,0 zeigen Transparenzgrade an.
-
Jedem
Bildpunkt 134 wird Speicher zum Speichern einer vorgegebenen
Anzahl von Fragmenttripeln zugeordnet. Dieser Speicher kann entweder
Grafikspeicher 122, wie in 3 gezeigt,
oder Hauptspeicher 106 sein. In dem in 3 gezeigten Beispiel
wird der Bildpunktspeicher 314 für einen bestimmten Bildpunkt 300 zugeordnet.
Es ist denkbar, dass eine Gruppe von Bildpunkten, wie zum Beispiel eine
2 × 2-Anordnung von Bildpunkten 134,
einen bestimmten Bildpunktspeicher 314 gemeinsam nutzt. Jedes
Fragmenttripel, das in dem Bildpunktspeicher 314 gespeichert
ist, würde
von jedem Bildpunkt 134 in der Gruppe anstatt von nur einem
bestimmten Bildpunkt 300 verwendet werden. Das kann mehr
Speicher sparen als das Speichern einer vorgegebenen Anzahl von
Fragmenten für
jeden Bildpunkt 134, insbesondere für Teile des Bildes 132,
deren Farbe und Z-Tiefe sich allmählich ändern.
-
Alternativ
kann jedem Bildpunkt 134 dynamisch Speicher zum Speichern
von Fragmenttripeln zugeordnet werden, anstatt eine vorgegebene
Zahl festzulegen. Hier kann eine veränderliche Anzahl von Fragmenttripeln
für jeden
Bildpunkt 134 gespeichert werden, wobei der Grafikbeschleuniger 108 dem Bildpunkt 134 nach
Bedarf Speicher zuweist, vorausgesetzt, dass noch verfügbarer Bildpunktspeicher
in dem System 100 vorhanden ist. Ein weiteres Verfahren
kombiniert Aspekte der beiden oben beschriebenen Verfahren, indem
es jedem Bildpunkt 134 Speicher zum Speichern einer vorgegebenen
Anzahl von Fragmenttripeln zuweist und einem bestimmten Bildpunkt 134 dynamisch
zusätzlichen
Speicher bei Bedarf zuweist, um ein Fragmenttripel über die
vorgegebene Zahl hinaus zu speichern.
-
Die
in 3 gezeigte beispielhafte Ausführungsform speichert zwei Fragmenttripel 310, 312 in dem
Bildpunktspeicher 314. Diese Fragmenttripel 310, 312 sind
den Fragmenten 301, 302, die sich über den
Bildpunkt 300 erstrecken, zugeordnet. Bevor die Fragmente 301, 302 in
dem Bildpunkt 300 erscheinen, kann der Bildpunktspeicher 314 so
initialisiert werden, dass er einen Standardfragmentwert enthält. Der
Standardfragmentwert stellt ein Hintergrundfragment dar, das verwendet
werden kann, wenn keine Fragmente einen bestimmten Unterbildpunktabtastwert
abdecken oder wenn alle Fragmente, die den bestimmten Unterbildpunktabtastwert
abdecken, transparent sind. Alternativ kann dieser Standardfragmentwert
in dem Grafikspeicher 122 gespeichert werden, wobei der
Wert von mehreren Bildpunkten 134 gemeinsam genutzt werden
kann. Jeder Bildpunkt 134 könnte einen speziellen Indexwert speichern,
der auf das Standardfragment weist.
-
Andere
Ausführungsformen
können
mehr als zwei Tripel speichern, um die Qualität des Antialiasing zu verbessern.
Das Speichern weniger Tripel spart Speicher, kann jedoch ein Antialiasing
geringerer Qualität
als das Speichern vieler Tripel erzeugen. Es wird zum Beispiel beobachtet,
dass für
die 8 × 8-Unterbildpunkanordnung 202 und
das Abtastmuster 220 (N = 8) das Speichern von drei Tripeln
bessere Antialiasing-Ergebnisse ergibt als das Speichern von zwei
Tripeln.
-
Zeiger 320-326 verknüpfen die
Unterbildpunktabtastwerte S1-S4
mit den zugehörigen
Fragmenttripeln 310, 312, die in dem Bildpunktspeicher 314 gespeichert
sind. Unter "Verknüpfung" verstehen wir eine
logische Verbindung zwischen den Unterbildpunktabtastwerten S1-S4
und den Fragmenttripeln 310, 312. Zum Beispiel
verknüpft
der Zeiger 326 den Unterbildpunkt S1 mit dem Fragmenttripel 312, während die
Zeiger 320 bis 324 die Unterbildpunkte S2 bis
S4 mit dem Fragmenttripel 310 verknüpfen.
-
Bei
einer Ausführungsform,
die im Zusammenhang mit 6A weiter
beschrieben wird, wird das Verknüpfen
durch Speichern eines Indexwertes für jeden Unterbildpunktabtastwert
S1-S4 bewerkstelligt. Dementsprechend wird diese Ausführungsform "indexiertes Sparse-Supersampling" genannt. Bei einer
anderen Ausführungsform,
die im Zusammenhang mit 6C beschrieben
wird, erfolgt das Verknüpfen
durch Speichern einer Deckmaske oder eines Bitmusters für jeden
gespeicherten Fragmentwert. Diese Ausführungsform wird im Folgenden
als "verbesserte
A-Puffertechnik" bezeichnet.
Gemeinsam werden die Ausführungsformen
als "verbesserte Supersampling-Techniken" bezeichnet.
-
Zum
Bestimmen der Farbe des beispielhaften Bildpunkts 300 verwendet
der Grafikbeschleuniger 108 eine der Bildpunktunterteilungen 200, 202, 204 und
ein Abtastmuster 210, 220, 230, um den
Teil des Bildes 132 abzutasten, der den Bildpunkt 300 deckt.
In 3 verwendet der Grafikbeschleuniger 108 zum
Beispiel die 4 × 4-Anordnung 200 mit
den N = 4 Abtastmustern 210 zum Abtasten des Bildpunkts 300.
Wie gezeigt, bedeckt das Fragment 301 den Unterbildpunktabtastwert
S1, und das Fragment 302 bedeckt die drei Unterbildpunktabtastwerte
S2 bis S4. Ein Fragment bedeckt einen Unterbildpunkt, wenn sich
die Mitte des Unterbildpunktabtastwerts in einer Zone, die von dem
Fragment eingeschlossen wird, oder, in bestimmten Fällen, an
einem Rand des Fragments befindet.
-
Im
Allgemeinen bestimmt der Grafikbeschleuniger 108, welche
Fragmente 301, 302 an jedem Unterbildpunktabtastwert
S1-S4 sichtbar sind. Aus der Sicht eines Betrachters des Bildes 132,
das zum Zweck der Veranschaulichung der Erfindung ein 3D-Bild ist,
können
einige Fragmente näher
am Betrachter und vor anderen Fragmenten sein. Die näheren Fragmente werden "Vordergrundfragmente" genannt, die weiter
entfernten Fragmente werden "Hintergrundfragmente" genannt. Ein opakes
Vordergrundfragment kann ein Hintergrundfragment hinter diesem Vordergrundfragment
verdecken.
-
Dementsprechend
muss jedes Fragment einen Z-Tiefentest an einem der Unterbildpunktabtastwerte
S1-S4 bestehen; das heißt,
der Z-Wert 306 des Fragmenttripels, das dem Fragment zugeordnet
ist, muss kleiner – das
heißt
aus der Sicht des Betrachters näher – als der
Z-Wert 306 für
jedes andere opake Fragment sein. Wenn ein Fragment den Z-Tiefentest
besteht, so speichert der Grafikbeschleuniger 108 das dem
sichtbaren Fragment zugeordnete Fragmenttripel in den Bildpunktspeicher 314.
-
Wenn
zum Beispiel festgestellt wird, dass das Fragment 301 an
dem Unterbildpunktabtastwert S1 des Bildpunkts 300 sichtbar
ist, so wird der Zeiger 326 erzeugt, der diesen Unterbildpunkt
S1 mit dem entsprechenden gespeicherten Fragmenttripel 312 verknüpft. Bei
der bevorzugten Ausführungsform
ist der Zeiger 326 in dem Bildpunktspeicher 314 zusammen
mit den Fragmenttripeln 310, 312, die dem Bildpunkt 300 zugeordnet
sind, gespeichert.
-
Anstatt
vier Fragmenttripel in dem Bildpunktspeicher 314 zu speichern,
nämlich
eines für
jeden der vier Unterbildpunktabtastwerte S1-S4, was mittels typischer
Supersampling-Techniken
geschehen würde,
speichert die beispielhafte Ausführungsform in 3 nur
zwei Fragmenttripel 310, 312. Es ist dementsprechend
möglich,
das Speichern redundanter Daten für den Bildpunkt 300 zu
vermeiden, weil nur eine einzige Instanz des Fragmenttripels 310 für die drei
Unterbildpunktabtastwerte S2-S4 gespeichert wird. Dadurch werden
die Speicheranforderungen für
Fragmenttripel beträchtlich
verringert.
-
Wenn
jedes Fragmenttripel 310, 312 zum Beispiel neun
Byte Speicher braucht, so verwenden die verbesserten Supersampling-Techniken
etwa achtzehn Byte Speicher je Bildpunkt weniger als typische Supersampling-Verfahren.
Die verbesserten Supersampling-Verfahren verwenden zusätzlichen Speicher
zum Speichern der Zeiger 320-326, aber diese Menge
ist klein im Vergleich zu dem Speicher, der durch Speichern von
nur zwei Fragmenttripeln 310, 312 für die vier
Unterbildpunktabtastwerte S1-S4 gespart wird.
-
Die
Speichereinsparungen steigen, wenn der Bildpunkt 300 in
eine der größeren Unterbildpunktanordnungen 202, 204 unterteilt
wird. Mit der 8 × 8-Unterbildpunktanordnung 202 und
dem Abtastmuster 220 (N ist gleich 8) verwenden die verbesserten
Supersampling-Techniken je Bildpunkt vierundfünfzig Bytes weniger als das
typische Supersampling. Das ergibt sich aus der Tatsache, dass nur
zwei von acht abgetasteten Fragmenttripeln in dem Bildpunktspeicher 314 gespeichert
werden. Für
die 16 × 16-Unterbildpunktanordnung 204 und
das Abtastmuster 230 (N ist gleich 16) werden nur zwei
von sechzehn abgetasteten Fragmenttripeln in dem Bildpunktspeicher 314 gespeichert,
so dass je Bildpunkt 112 Byte gespart werden. Bei einem
Anzeigebildschirm 130 mit 1920 × 1200 Bildpunkten belaufen sich
diese Einsparungen auf etwa 258 MByte.
-
Die
angezeigte Farbe des Bildpunkts 300 hängt davon ab, welche Filterfunktion
zum Kombinieren der Fragmenttripel, die den vier Unterbildpunktabtastwerten
S1-S4 zugeordnet sind, verwendet wird. Eine Funktion besteht einfach
darin, die Farben der Fragmenttripel, die den vier Unterbildpunktabtastwerten
S1-S4 zugeordnet sind, zu mitteln.
-
4 veranschaulicht
einen beispielhaften Fall, bei dem ein drittes sichtbares Fragment 400 in dem
Bildpunkt 300 von 3 erscheint.
Wie durch einen Pfeil 402 angezeigt, ist das dritte Fragment 400 mit
einem neuen Fragmenttripel 410 verknüpft. Das neue Fragmenttripel 410 unterscheidet
sich von den gespeicherten Fragmenttripeln 310, 312.
-
Bei
diesem Beispiel verdeckt das dritte Fragment 400 einen
Teil des Fragments 302 und ist an dem Unterbildpunktabtastwert
S4 sichtbar. Das Fragment 301 ist an dem Unterbildpunkt
S1 noch immer sichtbar, wie auch das Fragment 302 an den
Unterbildpunkten S2 und S3. Dementsprechend bleibt der Unterbildpunktabtastwert
S1 mit dem Fragmenttripel 312 durch den Zeiger 326 verknüpft. Die
Unterbildpunkte S2 und S3 bleiben mit dem Fragmenttripel 310 durch
den Zeiger 324 bzw. den Zeiger 322 verknüpft. Um
zu veranschaulichen, dass das Fragment 302 an dem Bildpunktabtastwert
S4 nicht mehr sichtbar ist, wird die Verknüpfung 320 von dem
Unterbildpunktabtastwert S4 zu dem Fragmenttripel 310 als durchbrochen
gezeigt.
-
Wenn
das dritte Fragment 400 durch den Grafikbeschleuniger 108 verarbeitet
wird, so sind die Fragmenttripel 310, 312 bereits
in den Bildpunktspeicher 314 gespeichert, und das Fragmenttripel 410 ist als
noch nicht in dem Bildpunktspeicher 314 gespeichert gezeigt.
Im Weiteren werden verschiedene Arten zur Handhabung des dritten
Fragmenttripels 410 beschrieben.
-
5A zeigt
eine Technik zum Handhaben des dritten sichtbaren Fragments 400 in
dem Bildpunkt 300, das heißt, das Speichern des entsprechenden
Fragmenttripels 410 in dem Bildpunktspeicher 314 gemeinsam
mit den anderen Fragmenttripeln 310, 312. Diese
Technik setzt entweder voraus, dass der Speicher 314, der
für die
vorgegebene Anzahl von Fragmenttripeln zugeordnet ist, das zusätzliche
Fragmenttripel 410 aufnehmen kann oder dass der Speicher 314,
der zum Speichern des neuen Fragmenttripels 410 erforderlich
ist, dynamisch zugeordnet werden kann.
-
Ein
Nachteil des Speicherns zusätzlicher Fragmenttripel
in dem Bildpunktspeicher 314 besteht darin, dass sich die
Speichermenge, die für
die verbesserten Supersampling-Verfahren
erforderlich ist, der Speichermenge für das typische Sparse-Supersampling
nähert
oder diese sogar übersteigt.
Sollte ein viertes Fragment in dem Bildpunkt 300 sichtbar sein,
so würden
in dem Beispiel der 4 × 4-Unterbildpunktanordnung
die verbesserten Supersampling-Verfahren
und das Sparse-Supersampling jeweils vier Fragmenttripel speichern.
Aber für
die größeren Unterbildpunktanordnungen,
wie zum Beispiel die 8 × 8-Anordnung
und die 16 × 16-Anordnung,
besteht immer noch die hohe Wahrscheinlichkeit, dass es in dem Bildpunkt 300 weniger
sichtbare Fragmente als Unterbildpunktabtastwerte gibt und dass
daher eine entsprechende Einsparung an Speicher bleibt. Wenn der
Bildpunktspeicher 314 ferner dynamisch über die vorgegebene Anzahl
von Fragmenttripeln hinaus zugeordnet wird, so braucht im Allgemeinen
nur relativ wenigen Bildpunkten dynamisch Speicher zugeordnet zu
werden. Obwohl die verbesserten Supersampling-Verfahren dann mehr
Speicher für
einen bestimmten Bildpunkt 134 brauchen könnten als
typisches Sparse-Supersampling, könnten die verbesserten Verfahren
weniger Speicher für
das ganze Bild 132 insgesamt brauchen.
-
ANPASSUNGSVERFAHREN
-
Alternativ
kann ein Anpassungsverfahren die Anzahl der Unterbildpunktabtastwerte
verringern, an welchen der Bildpunkt 300 abzutasten ist,
wenn die Anzahl der sichtbaren Fragmente in dem Bildpunkt 300 den
verfügbaren
Speicher für
Fragmenttripel übersteigt,
wie zum Beispiel, wenn der Bildpunktspeicher 314, der für die vorgegebene
Anzahl von Fragmenttripeln zugeordnet ist, bereits voll ist oder
kein Bildpunktspeicher verfügbar
ist, um eine dynamische Zuordnung für das neue Fragmenttripel 410 vorzunehmen.
-
Wenn
zum Beispiel Speicher für
nur zwei Fragmenttripel vorhanden ist, es aber vier verschiedene
sichtbare Fragmente in dem Bildpunkt 300 gibt – ein unterschiedliches
Fragment für
jeden der vier Unterbildpunktabtastwerte S1-S4 -, so gewährleistet das
Zurückgehen
auf nur zwei Unterbildpunktabtastpunkte ausreichend Speicher für die Fragmente,
die diese zwei Abtastwerte abdecken.
-
Das
Verringern der Anzahl von Abtastwerten kann allmählich erfolgen. Wenn zum Beispiel
acht Unterbildpunktabtastwerte S1-S8 verwendet werden, so könnte das
Verfahren mit acht Abtastwerten beginnen, auf sechs, dann vier und
schließlich
auf zwei verringert werden, wenn die Anzahl der verschiedenen sichtbaren
Fragmente in dem Bildpunkt über
den verfügbaren
Speicher hinaus erscheint.
-
Das
Verfahren kann jeden Bildpunkt unabhängig verarbeiten. Das Verfahren
kann zum Beispiel alle vier Unterbildpunktabtastwerte S1-S4 für einen Bildpunkt
verwenden und dann auf nur zwei Unterbildpunktabtastwerte S1 und
S2 für
einen anderen Bildpunkt zurückgehen.
-
5B veranschaulicht
einen weiteren Ansatz zur Handhabung des dritten sichtbaren Fragments 400 in
dem Bildpunkt 300 dar, das heißt, um das entsprechende Fragmenttripel 410 mit
den anderen Fragmenttripeln 310, 312, die in dem
Bildpunktspeicher 314 gespeichert sind, zu vermischen.
Die eingekreisten Plus-Zeichen ("+") in 5 veranschaulichen
den Vermischungsprozess.
-
Ein
beispielhafter Vermischungsprozess gewichtet den Farbbeitrag jedes
Fragmenttripels 310, 312 und des neuen Fragmenttripels 410 zu
dem vermischten Fragmenttripel 530, 532.
-
Den
Farbbeitrag jedes gespeicherten Fragmenttripels 310, 312 bestimmt
man zum Beispiel durch Multiplizieren des Farbwerts 304 dieses
Fragmenttripels mit der Anzahl von Abtastwerten, die noch immer
von diesem Fragmenttripel bedeckt werden, und dann durch Teilen
des Ergebnisses durch die Anzahl von Abtastwerten S1-S4, die zuvor
von dem Fragmenttripel bedeckt wurden, bevor das neue Fragment 400 erschien.
Den Farbbeitrag des neuen Fragmenttripels 410 erhält man durch
Multiplizieren des Farbwerts 304 des neuen Fragmenttripels 410 mit
der Anzahl von Abtastwerten, die von dem gespeicherten Fragmenttripel
bedeckt wurden, nun aber durch das neue Fragment 400 bedeckt
werden, und dann durch Dividieren des Ergebnisses durch die Anzahl
von Abtastwerten S1-S4, die zuvor von dem gespeicherten Fragmenttripel 310, 312 bedeckt
wurden, bevor das neue Fragment 400 erschien.
-
Hier
würde das
Fragmenttripel 310 2/3 seines Farbwerts 304 zu
dem vermischten Fragmenttripel 530 beitragen, und das neue
Fragmenttripel 410 würde 1/3 seines Farbwerts 304 beitragen.
Für das
vermischte Fragmenttripel 532 trägt das Fragmenttripel 312 seinen
ganzen Farbwert (1/1)
bei, und das neue Fragmenttripel 410, das keine Abtastpunkte
bedeckt, die dem Fragmenttripel 312 zugeordnet sind, würde keinen
Farbwert (0/1) beitragen.
Dann werden diese gewichteten Farbwerte 304 addiert. Es
können
auch andere einschlägig
bekannte Farbvermischungstechniken verwendet werden.
-
In 5B ist
das Fragmenttripel 410 mit dem Fragmenttripel 310 zu
einem vermischten Fragmenttripel 530 vermischt, und die
Zeiger 322, 324, die die Unterbildpunkte S2 und
S3 mit dem Fragmenttripel 310 verknüpfen, zeigen nun auf das vermischte
Fragmenttripel 530. Ferner wird das Fragmenttripel 410 mit
dem Fragmenttripel 312 zu einem vermischten Fragmenttripel 532 vermischt,
und der Zeiger 326, der den Unterbildpunkt S1 mit dem Fragmenttripel 312 verknüpft, zeigt
nun auf das vermischte Fragmenttripel 532. Der Unterbildpunkt
S4 ist mit dem vermischten Fragmenttri pel 530 verknüpft. Alternativ kann
der Unterbildpunkt S4 mit dem anderen Fragmenttripel 532 verknüpft werden.
-
Die
vermischten Fragmenttripel 530, 532 werden in
dem Bildpunktspeicher 314 gespeichert. Das vermischte Fragmenttripel 530 belegt
die Speicheradressen, die zuvor von dem Fragmenttripel 310 belegt
wurden. Die Adressen des Bildpunktspeichers 314, die zuvor
das Fragmenttripel 312 speicherten, speichern nun das vermischte
Fragmenttripel 532.
-
Gemäß der vorliegenden
Erfindung zeigt 5C einen beispielhaften Ansatz
zum Berücksichtigen
des dritten sichtbaren Fragments 400 in dem Bildpunkt 300.
Dieser Ansatz ersetzt eines der Fragmenttripel 310, 312,
die zuvor in dem Bildpunktspeicher 314 gespeichert waren,
durch das dritte Fragmenttripel 410. Zum Beispiel wird
das Fragmenttripel 310 durch das neue Fragmenttripel 410 ersetzt.
Um diesen Ersatz durchzuführen,
würde der
Grafikbeschleuniger 108 die Daten des neuen Fragmenttripels 410 über die
Daten des zuvor gespeicherten Fragmenttripels 310 schreiben,
wodurch praktisch die Daten des Fragmenttripels 310 verworfen
werden. Alternativ kann Speicher für das Fragmenttripel 310 abgezogen
und für
das Fragmenttripel 410 zugeordnet werden.
-
In 5C belegen
die Daten des neuen Fragmenttripels 410 die spezifischen
Adressen des Bildpunktspeichers 314, die zuvor das Fragmenttripel 310 speicherten.
Die Zeiger 322, 324 zeigen auf diese spezifischen
Adressen des Bildpunktspeichers. Wo zuvor die Zeiger 322, 324 die
Unterbildpunkte S2 und S3 mit dem Fragmenttripel 310 verknüpften, verknüpfen diese
Zeiger 322, 324 nun die Unterbildpunkte S2 und
S3 mit dem neunen Fragmenttripel 410.
-
Im
Folgenden werden Techniken beschrieben, mit denen ausgewählt wird,
welches der Fragmenttripel 310, 312 oder 314 zu
verwerfen ist.
-
Auswahlregimes:
-
Z-Priorität
-
Gemäß der vorliegenden
Erfindung besteht eine Technik zum Auswählen des Fragmenttripels 310, 312,
das zu ersetzen ist, und die Z-Prioritätsverfahren genannt wird, darin
zu bestimmen, welches Fragmenttripel 310, 312,
das in dem Bildpunktspeicher 314 gespeichert ist, den größten Z-Tiefenwert 306 hat.
Aus der Sicht des Betrachters ist das entsprechende Fragment umso
weiter von dem Betrachter entfernt, je größer der Z-Tiefenwert 306 ist.
Wenn zum Beispiel der Z-Tiefenwert 306 des Fragmenttripels 310 4
beträgt
und der Z-Tiefenwert 306 des Fragmenttripels 312 2
beträgt,
so wird das Fragmenttripel 310 durch das neue Fragmenttripel 410 ersetzt. Die
Zeiger 322-324, die zuvor die Unterbildpunktabtastwerte
S2 und S3 mit dem Fragmenttripel 310 verknüpften, verknüpfen nun
die Unterbildpunktabtastwerte mit dem Fragmenttripel 410.
Sollte mehr als ein gespeichertes Fragmenttripel 310, 312 den
größten Z-Tiefenwert 306 haben,
so kann das Fragmenttripel 310, 312 mit der kleineren
Anzahl von Zeigern 320-326 ersetzt werden.
-
Grundfarbenunterschied
-
Bei
einer anderen Technik gemäß der vorliegenden
Erfindung zum Auswählen,
welches Fragmenttripel 310, 312 zu ersetzen ist,
und die man das Grundfarbenunterschiedsverfahren nennt, wird bestimmt,
welches Fragmenttripel 310, 312, das in dem Bildpunktspeicher 314 gespeichert
ist, einen Farbwert 304 hat, der dem Farbwert 304 des
neuen Fragmenttripels 410 am ähnlichsten ist, das heißt, der
den kleinsten Farbunterschied ergibt. Der Farbwert 304 des
neuen Fragmenttripels 410 wird mit dem Farbwert 304 jedes
gespeicherten Fragmenttripels 310, 312 verglichen.
Obwohl das Verfahren unten anhand des RGB-Farbmodells beschrieben
wird, kann auch auf andere Farbmodelle angewandt werden, wie zum Beispiel
das Farbton-Helligkeit-Sättigung (HLS)-Farbmodell
und das Farbton-Sättigung-Wert (HSV)-Farbmodell.
-
Genauer
genommen vergleicht das Grundfarbenunterschiedsverfahren den 10-Bitwert
für den ROT-Kanal
des neuen Fragmenttripels 410 mit dem 10-Bitwert für den ROT-Kanal
jedes gespeicherten Fragmenttripels 310, 312.
Vergleiche werden ebenfalls für
den GRÜN-
und den BLAU-Kanal angestellt. Werte in den Alphakanälen werden
nicht verglichen.
-
Die
Absolutwerte der Unterschiede zwischen den Werten der Kanäle des neuen
Fragmenttripels 410 und den Werten der Kanäle der gespeicherten Fragmenttripel 310, 312 werden
summiert. Dann wird die Summe mit der Anzahl von Unterbildpunktabtastwerten
multipliziert, die auf das gespeicherte Fragmenttripel 310, 312 zeigen.
Das ergibt einen Gesamtfarbunterschied, der sich ergäbe, wenn
das gespeicherte Fragmenttripel 310, 312 durch
das neue Fragmenttripel 410 ersetzt werden würde. Das
Fragmenttripel 310, 312, das den kleineren Farbunterschied ergibt,
wird durch das neue Fragmenttripel 410 ersetzt.
-
Bei
einem übertrieben
vereinfachten Beispiel unter Bezugnahme auf 5C hat
das Fragmenttripel 310 einen ROT-Wert von 0, einen GRÜN-Wert von
2 und einen BLAU-Wert von 4; das Fragmenttripel 312 hat
einen ROT-Wert von 2, einen GRÜN-Wert von 4 und einem
BLAU-Wert von 0, und das neue Fragmenttripel 410 hat einen
ROT-Wert von 0, einen GRÜN-Wert
von 3 und einen BLAU-Wert von 3. Des Weiteren gibt es, wie in 5C gezeigt,
zwei Unterbildpunkte, die auf das Fragmenttripel 310 zeigen – wenn bestimmt
wird, dass das neue Fragment 400 am Abtastpunkt S4 sichtbar
ist, so wird der Zeiger 320 (siehe 3) von S4
zu dem Fragmenttripel 310 ungültig gemacht -, und einen Unterbildpunkt,
der auf das Fragmenttripel 312 zeigt.
-
Der
Gesamtfarbunterschied zwischen dem Fragmenttripel 310 und
dem neuen Fragmenttripel 410 beträgt 4, zum Beispiel (|0 – 0| + |2 – 3| + |4 – 3|)·2, und
der Gesamtfarbunterschied zwischen dem Fragmenttripel 312 und
dem neuen Fragmenttripel 410 beträgt 6, zum Beispiel (|2 – 0| + |4 – 3| + |0 – 3|)·1. Dementsprechend
wird das Fragmenttripel 310 ersetzt.
-
Farbunterschied und transparente
Fragmente
-
Wenn
transparente Fragmente an dem Farbunterschied beteiligt sind, so
wird die Auswirkung jedes möglichen
Ersatzes auf die endgültige
Bildpunktfarbe mit der idealen endgültigen Bildpunktfarbe verglichen,
die sich ergäbe,
wenn das neue Fragmenttripel 410 in dem Bildpunktspeicher 314 gespeichert werden
könnte.
Dieses gespeicherte Fragmenttripel 310, 312, das
eine endgültige
Bildpunktfarbe mit dem kleinsten Farbunterschied im Vergleich mit
der idealen endgültigen
Bildpunktfarbe ergibt, wird zum Ersetzen ausgewählt. In einem Stapel transparenter Fragmente
tendiert diese Auswahl dazu, die weiter entfernten transparenten
Fragmente, die kaum zu sehen sind, zu ersetzen.
-
N-Quadrat-Farbunterschied
-
Zusätzlich zum
Vergleichen des neuen Fragmenttripels 410 mit jedem gespeicherten
Fragmenttripel 310, 312, wie es bei dem Farbunterschiedsverfahren
durchgeführt
wird, vergleicht das N-Quadrat-Farbunterschiedsverfahren jedes gespeicherte Fragmenttripel 310, 312 miteinander.
Dieses Verfahren ersetzt entweder eines der gespeicherten Fragmenttripel 310 durch
das neue Fragmenttripel 410 oder ersetzt eines der gespeicherten
Fragmenttripel 310, 312 durch ein anderes der
gespeicherten Fragmenttripel 310, 312, das heißt, indem
die Zeiger von dem einen gespeicherten Fragmenttripel zu dem anderen
gespeicherten Fragmenttripel ausgetauscht werden. Das neue Fragmenttripel 410 wird
in die Adressen des Bildpunktspeichers geschrieben, an welchen das
ersetzte Fragmenttripel zuvor gespeichert war. Der N-Quadrat-Farbunterschied
scheint kein signifikant besseres Ergebnis zu erbringen als das
Farbunterschiedsverfahren.
-
Farbunterschiedsverfahren
auf der Grundlage der visuellen Empfindlichkeit
-
Weitere
Techniken, die zufriedenstellende Ergebnisse erbringen können, beruhen
auf den Eigenschaften des menschlichen Sehapparates. Die Fähigkeit
eines menschlichen Auges, Helligkeitsunterschiede zu erkennen, kann
zum Beispiel geringer sein als die Fähigkeit, Farbtonunterschiede
zu erkennen. Dementsprechend kann ein beispielhaftes, auf der visuellen
Empfindlichkeit beruhendes Ersetzungsverfahren diese Eigenschaft
ausnutzen, indem das Fragmenttripel 310, 312,
das heller oder dunkler ist als das neue Fragmenttripel 410,
anstelle des Fragmenttripels 310, 312, das einen
anderen Farbton hat, ersetzt wird. Ein solches Verfahren würde es vorziehen,
das gespeicherte Fragmenttripel 310, 312 durch
einen Farbwert 304 zu ersetzen, der sich gleich oder fast
gleich in jedem der RGB-Farbkanäle
von dem Farbwert 304 des neuen Fragmenttripels 410 unterscheidet.
-
Eine
weitere beispielhafte Technik kann sich auf das logarithmische Verhalten
der Leuchtdichtewahrnehmung des Menschen stützen. Im Allgemeinen kann ein
menschliches Auge etwa eine 2-%ige Änderung in der Helligkeit einer
Farbe erkennen. Folglich können
große
numerische Unterschiede zwischen hohen Farbwerten 304 (das
heißt
Farben hoher Intensität)
weniger wahrnehmbar sein als kleine numerische Unterschiede zwischen
niedrigen Farbwerten (das heißt
Farben mit geringer Intensität). Dementsprechend
werden Leuchtdichteunterschiede als Verhältnisse der Farbwerte 304 und
nicht als numerische Unterschiede zwischen Farbwerten berechnet.
Das Fragmenttripel 310, 312, das die geringeren
Leuchtdichteunterschiede ergibt, das heißt, das kleinere Verhältnis der
Farben im Vergleich zu dem neuen Fragmenttripel 410, wird
ersetzt.
-
Z-Priorität-Farbunterschied
-
Als
Hintergrundinformation sei angemerkt, dass diese Technik das Z-Prioritätsverfahren
mit einem beliebigen der oben genannten Farbunterschiedsverfahren
zu einem Ersetzungsverfahren kombiniert, das bessere Ergebnisse
erbringt als jedes der Verfahren allein. Die oben beschriebenen Farbunterschiedsverfahren
ersetzen ein gespeichertes Fragmenttripel durch das neue Fragmenttripel. Das
Z-Priorität-Farbunterschiedsverfahren
zieht außerdem
in Betracht, ob eines der gespeicherten Fragmenttripel 310, 312 stattdessen
das neue Fragmenttripel 410 ersetzen sollte.
-
Hier
berechnet das Verfahren Farbunterschiede zwischen dem neuen Fragmenttripel 410 und
jedem gespeicherten Fragmenttripel 310, 312, das
das neue Fragmenttripel 410 ersetzen kann. Diese Farbunterschiede
werden für
jedes dieser gespeicherten Fragmenttripel berechnet, die vor einem
neuen Fragment liegen, das heißt
einen kleineren Z-Tiefenwert haben, aber nicht für jene gespeicherten Fragmenttripel,
die hinter dem neuen Fragment liegen.
-
Dementsprechend
kann ein gespeichertes Fragmenttripel 310, 312 ausgewählt werden,
um das neue Fragmenttripel 410 zu ersetzen, wenn dieses Fragmenttripel 310, 312 den
kleinsten Farbunterschied erzeugt und dieses Fragmenttripel 310, 312 einem
Fragment zugeordnet ist, das sich vor dem neuen Fragment befindet.
In diesem Fall bedeutet "Ersetzen", dass jeder Unterbildpunktabtastwert,
der von dem neuen Fragment bedeckt wird, mit dem ausgewählten gespeicherten
Fragmenttripel 310, 312 verknüpft wird und das neue Fragmenttripel 410 verworfen
wird.
-
Wenn
mehr als ein einziger Ersatz möglich ist,
so sollte im Allgemeinen jener Ersatz vorgenommen werden, der sich
auf die kleinere Anzahl von Unterbildpunktabtastwerten auswirkt.
Wenn zum Beispiel entweder das neue Fragmenttripel oder ein gespeichertes
Vordergrundfragmenttripel ersetzt werden kann, so ersetzt das gespeicherte
Fragmenttripel das neue Fragmenttripel, wenn das gespeicherte Vordergrundfrag menttripel
mehr Unterbildpunktabtastwerte bedeckt als das neue Fragmenttripel.
-
Zonendeckung
-
Ein
weiteres effizientes Verfahren gemäß der vorliegenden Erfindung
wählt das
Fragmenttripel aus, das bei der kleinsten Anzahl von Unterbildpunktabtastwerten
sichtbar ist, und ersetzt dieses Fragmenttripel durch das neue Fragmenttripel 410.
Danach zeigt jeder Zeiger zu dem ersetzten Fragmenttripel auf das
neue Fragmenttripel.
-
Semaphor-Verfahren
-
Das
Z-Priorität-Farbunterschiedsverfahren erlaubt
es bestehenden Vordergrundfragmenten, neue Hintergrundfragmente
zu ersetzen, doch erlaubt es existierenden Hintergrundfragmenten
nicht, neue Vordergrundfragmente zu ersetzen. Das geschieht, um
das Verlieren großer
Vordergrundflächen zu
vermeiden, die aus kleinen Vordergrundfragmenten bestehen. Die große Fläche könnte verloren
gehen, wenn es das Verfahren jedem der kleinen Vordergrundfragmente
erlauben würde,
durch ein größeres Hintergrundfragment
ersetzt zu werden. Das Semaphor-Verfahren vermeidet auch dieses
Problem.
-
Das
Semaphor-Verfahren weist jedem Bildpunkt ein Semaphorbit zu. Anfänglich ist
jedes Semaphorbit auf 0 gesetzt. Wenn bestimmt wird, dass das Ersetzen
eines neuen Vordergrundfragments durch ein existierendes Hintergrundfragment
einen kleinsten Farbunterschied ergibt, und das zugehörige Semaphorbit
0 ist, so erlaubt es das Semaphor-Verfahren dem existierenden Hintergrundfragment,
das neue Vordergrundfragment zu ersetzen. Das zugehörige Semaphorbit
wird auf 1 gesetzt. Dies gewährleistet,
dass nicht zwei solcher Ersetzungen hintereinander auftreten können. Wenn
das ersetzte neue Vordergrundfragment Teil einer größeren Vordergrundfläche war,
dann ersetzt das nächste
neue Vordergrundfragment für
diese größere Fläche das
existierende Hintergrund fragment, weil das Semaphorbit eine 1 ist.
Es wurde jedoch beobachtet, dass dieses grundlegende Semaphor-Verfahren
einige unbefriedigende Artefakte erzeugen kann.
-
Fragmentzentroidentfernungsverfahren
-
Als
Hintergrundinformation sei angemerkt, dass derartige Verfahren das
Farbersetzen auf die Entfernung zwischen dem neuen Fragment und
jedem möglichen
Fragment stützen,
das das neue Fragment ersetzen kann. Dementsprechend kann ein neues
Fragment so erweitert werden, dass es benachbarte Unterbildpunktabtastwerte
abdeckt, anstatt gespeicherte Fragmente zu ersetzen, die entfernte
Unterbildpunktabtastwerte abdecken. Es ist ferner wahrscheinlich,
dass Unterbildpunktabtastwerte in der Nähe der bedeckten Unterbildpunktabtastwerte
später
bedeckt werden.
-
Die 6A und 6B veranschaulichen eine
logische Darstellung des Bildpunktspeichers 314, der von
der indexierten Sparse-Supersampling-Technik verwendet wird. Der
Bildpunktspeicher 314 enthält Indizes 600 und
Fragmenttripel 310, 312. Der Bildpunktspeicher 314 stellt
Speicher für
eine bestimmte Anzahl von Fragmenttripeln bereit. Obwohl sie in
dem Grafikbeschleuniger 122 als benachbart gezeigt werden,
können
die Indizes 600 voneinander oder von den Fragmenttripeln 310, 312 getrennt
sein.
-
Die
Indizes 600 zeigen an, wo in dem Bildpunktspeicher 314 das
Fragmenttripel, das jedem Unterbildpunktabtastwert zugeordnet ist,
gefunden werden kann. Jeder Index 602-608 der
Indizes 600 ist einem der Unterbildpunktabtastwerte S1-S4 zugeordnet. Wie
zum Beispiel in 6B gezeigt, ist der Index 602 dem
Unterbildpunktabtastwert S1 zugeordnet, der Index 604 ist
dem Unterbildpunktabtastwert S2 zugeordnet usw. Für das Abtastmuster 220 gibt
es acht Indizes für
die acht Unterbildpunktabtastwerte S1-S8, und für das Abtastmuster 320,
bei dem N = 16 ist, gibt es sechzehn.
-
Der
in jedem Index 602-608 gespeicherte Wert zeigt
auf eines der Fragmenttripel 310, 312. Dementsprechend
verknüpft
jeder Index 602-608 den zugehörigen Unterbildpunktabtastwert
S1-S4 mit einem der Fragmenttripel 310, 312.
-
Wenn
zwei Fragmenttripel 310, 312 in dem Bildpunktspeicher 314 gespeichert
sind, so kann jeder Index 602-608 durch ein einzelnes
Datenbit dargestellt werden. Der in jedem Index 602-608 gespeicherte
Bitwert lenkt den Grafikbeschleuniger 108 zu dem Fragmenttripel 310, 312,
das jedem Unterbildpunktabtastwert S1-S4 zugeordnet ist. In dem
in 6B gezeigten Beispiel ist eine "1" in dem Index 602 gespeichert,
und eine "0" ist in jedem der
anderen Indizes 604-608 gespeichert.
Ein Null-Bit-Wert zeigt auf das erste Fragmenttripel 310 in
dem Bildpunktspeicher 314, und ein Ein-Bit-Wert zeigt auf
das zweite Fragmenttripel 312.
-
Wenn
alternativ drei Fragmenttripel in dem Bildpunktspeicher 314 gespeichert
sind, so braucht man zwei Bit je Index 602-608.
Zwei Bit je Index 602-608 können bis zu vier gespeicherte
Fragmenttripel, drei Bit bis zu acht Fragmenttripel und vier Bit bis
zu sechzehn aufnehmen.
-
Bei
einem einzelnen Bit je Index 602-608 braucht das
Abtastmuster 210 (N = 4) vier Bit Bildpunktspeicher 314,
um die Indizes 600 zu implementieren. Die Speichererfordernisse
für die
Indizes 600 größerer Abtastmuster 220, 230 sind
ebenfalls klein. Das Abtastmuster 230 (N = 16) würde zum
Beispiel sechzehn Bit je Bildpunkt 134 brauchen, um ein
Bit je Index umzusetzen. Das Implementieren von vier Bit je Index
verwendet 64 Bit je Bildpunkt, was immer noch beträchtliche
Speichereinsparungen im Vergleich zu typischen Sparse-Supersampling-Techniken
ermöglicht,
die für
die sechzehn Unterbildpunktabtastwerte S1-S16 sechzehn Fragmenttripel
speichern.
-
Um
eine Farbe für
den Bildpunkt 300 zu berechnen, wird der Farbwert 304 jedes
gespeicherten Fragmenttripels 310, 312 mit dem
Prozentsatz an Unterbildpunktabtastwerten, die durch einen Index mit
diesem Fragmenttripel verknüpft
sind, multipliziert. Danach werden diese gewichteten Farbwerte zu
der Bildpunktfarbe addiert.
-
Die 6C und 6D veranschaulichen eine
beispielhafte logische Darstellung des Bildpunktspeichers 314,
der von der verbesserten A-Puffertechnik verwendet wird. Der Bildpunktspeicher 314 enthält Abdeckmasken
(oder Bitmuster) 620, 622 und gespeicherte Fragmenttripel 310, 312.
Der Bildpunktspeicher 314 stellt Speicher für eine vorgegebene
Anzahl von Fragmenttripeln bereit. Obwohl sie in dem Grafikspeicher 122 als
benachbart gezeigt sind, können
die Abdeckmasken 620, 622 voneinander oder von
den Fragmenttripeln 310, 312 getrennt sein. Eine
alternative Ausführungsform,
die eine dritte Abdeckmaske 624 und das dritte gespeicherte Fragmenttripel 410 enthält, ist
in den 6C und 6D mit
Strichlinien veranschaulicht.
-
Die
Abdeckmasken 620, 622 verknüpfen die Unterbildpunktabtastwerte
S1-S4 mit den Fragmenttripeln 310, 312, die in
dem Bildpunktspeicher 314 gespeichert sind. Jedem gespeicherten
Fragmenttripel 310, 312 ist eine Abdeckmaske 620, 622 zugeordnet.
Wie in 6D dargestellt, ist die Abdeckmaske 620 zum
Beispiel dem Fragmenttripel 310 zugeordnet, wie durch einen
Pfeil 621 angezeigt, und die Abdeckmaske 622 ist
dem Fragmenttripel 312 zugeordnet, wie durch den Pfeil 623 angezeigt.
Bei der veranschaulichten alternativen Ausführungsform ist die Abdeckmaske 624 dem
dritten Fragmenttripel 410 durch den Pfeil 625 zugeordnet.
-
Jede
Abdeckmaske 620, 622, 624 enthält ein einzelnes
Bit für
jeden Unterbildpunktabtastwert S1-S4. In 6D sind
die Zuordnungen zwischen den Bits in den Abdeckmasken und den Unterbildpunktabtastwerten
S1-S4 durch Pfeile 634-640 dargestellt. Der Unterbildpunktabtastwert
S1 ist zum Beispiel den Bits 626 zugeordnet, der Unterbildpunktabtastwert
S2 ist den Bits 628 zugeordnet, der Abtastwert S3 ist den
Bits 630 zugeordnet, und der Abtastwert S4 ist den Bits 632 zugeordnet.
-
Mit
einem Bit je Abtastwert S1-S4 braucht das Abtastmuster 210 (N
= 4) vier Bit 626, 628, 630, 632 des
Bildpunktspeichers 314, um jede Abdeckmaske 620, 622, 624 zu
implementieren. Bei der gezeigten alternativen Ausführungsform,
bei der drei Fragmenttripel gespeichert sind, beträgt der kombinierte
Bedarf für
die drei zugeordneten Abdeckmasken 620, 622, 624 zwölf Bit.
-
Für das Abtastmuster 220 erfordert
jede Abdeckmaske 620, 622, 624 acht Bit,
eines für
jeden der acht Unterbildpunktabtastwerte S1-S8. Wie bei dem Abtastmuster 230,
das sechzehn Unterbildpunktabtastwerte S1-S16 hat, wären sechzehn
solcher Bits in jeder Abdeckmaske. Aber sogar mit sechzehn Bit je
Abdeckmaske sind die Speichereinsparungen im Vergleich zu bekannten
Sparse-Supersampling-Techniken, die sechzehn Fragmenttripel für die sechzehn
Unterbildpunktabtastwerte S1-S16 speichern, beträchtlich.
-
Der
in jedem Bit einer bestimmten Abdeckmaske gespeicherte Wert zeigt
an, ob der Bildpunktabtastwert, der diesem Bit zugeordnet ist, mit
dem Fragmenttripel verknüpft
ist, das der bestimmten Abdeckmaske zugeordnet ist. Wenn ein Abtastwert
mit einem Fragmenttripel verknüpft
ist, so bedeutet das, dass das diesem Fragmenttripel zugeordnete
Fragment an diesem Abtastwert sichtbar ist.
-
In
dem in 6D gezeigten Beispiel ist in
der Abdeckmaske 620 ein Bitmuster "0 1 1 1" gespeichert. Der Wert "1" in den Bits 628, 630 und 632 der Abdeckmaske 620 verknüpft die
Unterbildpunktabtastwerte S2-S4 mit dem gespeicherten Fragmenttripel 310,
was anzeigt, dass das Fragment 302 an diesen Abtastpunkten
S2-S4 sichtbar ist. Umgekehrt zeigt der Wert "0" in
dem Bit 626 der Abdeckmaske 620 an, dass das Fragment 302 an
dem Unterbildpunktabtastwert S1 nicht sichtbar ist. Es ist klar,
dass die Aufgabe jedes Bitwerts umgekehrt werden kann, so dass der
Bitwert "1" anzeigt, dass das
Fragment an einem bestimmten Abtastpunkt nicht sichtbar ist, und
dass der Bitwert "0" anzeigt, dass das
Fragment sichtbar ist.
-
Bei
der alternativen Ausführungsform,
die in 6D gezeigt ist, verknüpft eine
dritte Abdeckmaske 624 den Unterbildpunktabtastwert S4
mit dem dritten Fragmenttripel 410, das in dem Bildpunktspeicher 314 gespeichert
ist. Die Zuordnung zwischen der dritten Abdeckmaske 624 und
dem dritten Fragmenttripel 410 wird durch den Pfeil 625 angezeigt.
-
Das
beispielhafte Bitmuster, das in der Abdeckmaske 624 gespeichert
ist, lautet "0 0
0 1" und zeigt an,
dass das dritte Fragment 400 nur an dem Abtastwert S4 sichtbar
ist. Wie man aus 4 weiß, ist das neue Fragment 400 mit
dem Fragmenttripel 410 verknüpft. Für das folgende veranschaulichende Beispiel
wird das dritte Fragment 400 als transparent behandelt.
(Es ist zu beachten, dass, falls das dritte Fragment 400 opak
wäre, wie
in Verbindung mit 4 beschrieben, das Bitmuster
in der Abdeckmaske 620 von "0 1 1 1" zu "0
1 1 0" wechseln
würde,
um anzuzeigen, dass das Fragment 400 das Fragment 302 in
dem Unterbildpunktabtastwert S4 verdeckt.)
-
Da
das dritte Fragment 400 transparent ist, verknüpfen zwei
Abdeckmasken 620, 624 den Unterbildpunktabtastwert
S4 mit zwei gespeicherten Fragmenttripeln 310, 410.
Die Bitwerte "1" in den Bitpositionen 632 der
Abdeckmaske 620 und 624 zeigen an, dass beide
Fragmente 302 und 400 an dem Unterbildpunktabtastwert
S4 sichtbar sind. Im Allgemeinen kann jeder Unterbildpunktabtastwert
S1-S4 mit mehreren gespei cherten Fragmenttripeln verknüpft werden,
wobei ein Fragment opak und jedes andere Fragment transparent ist.
Im Grunde können
alle gespeicherten Fragmentwerte transparent sein, wenn ein Standardhintergrundfragmentwert
verwendet wird.
-
Dementsprechend
kann die hier beschriebene verbesserte A-Puffertechnik eine reihenfolgenunabhängige Transparenz
unterstützen,
das heißt, dass
das System 100 keine Grundformen des Bildes 132 zu
teilen braucht, um dem Grafikbeschleuniger 108 transparente
Fragmente zu präsentieren,
nachdem alle opaken Fragmente präsentiert
sind, und das System 100 braucht auch keine transparenten Grundformen
zu sortieren, um transparente Fragmente in Z-Tiefen-Reihenfolge
zu präsentieren.
-
Zum
Berechnen der Farbe des Bildpunkts 300 wird eine Farbe
zuerst für
jeden Unterbildpunktabtastwert S1-S4 berechnet, und dann werden
die berechneten Farben kombiniert. Wenn ein Unterbildpunktabtastwert
nur mit einem einzelnen opaken Fragment verknüpft ist, wie zum Beispiel der
Abtastwert S1, so ist die Farbe für diesen Unterbildpunktabtastwert
S1 die Farbe des zugeordneten gespeicherten Fragmentwerts 312.
-
Wenn
ein Unterbildpunktabtastwert, wie zum Beispiel der Abtastwert S4,
mit zwei gespeicherten Fragmenttripeln 310, 410 verknüpft ist,
eines transparent 400 und das andere opak 302,
so ist die Farbe für
den Unterbildpunktabtastwert S4 die Summe der Farbbeiträge dieser
zwei Fragmenttripel 310, 410. Der Farbbeitrag
des transparenten Fragments 400 ist die Opazität dieses
Fragments 400, wie durch den Wert angezeigt wird, der in
dem Alphakanal gespeichert ist, multipliziert mit der Farbe dieses
Fragments 400. Der Beitrag C des opaken Fragments 302 ist
die Farbe dieses Fragments f(c) 302, multipliziert mit
1 minus die Opazität
des transparenten Fragments f(o) 400, zum Beispiel C =
f(c) × (1 – f(o)).
-
Die
in den 6A-6D gezeigten
beispielhaften Ausführungsformen
können
zufriedenstellende Antialiasing-Ergebnisse erzielen, indem sie zwei
Fragmenttripel für
vier Unterbildpunktabtastwerte speichern. Acht Unterbildpunktabtastwerte
mit zwei gespeicherten Fragmenttripeln sehen gewöhnlich besser aus als vier
Unterbildpunktabtastwerte mit Fragmenttripeln, können jedoch schlechter aussehen,
wenn einer der zusätzlichen
vier Unterbildpunktabtastwerte erfordert, dass eines der gespeicherte Tripel
durch ein drittes Fragmenttripel ersetzt wird, und das dritte Fragmenttripel
in dem Bildpunktspeicher zuletzt erscheint. Das Zuordnen von Speicher für ein drittes
Fragmenttripel kann somit eine deutliche Verbesserung für acht Unterbildpunktabtastwerte
im Vergleich zum Speichern von zwei Fragmenttripeln erbringen. Natürlich können die
Antialiasing-Ergebnisse
um so mehr an die Ergebnisse des typischen Sparse-Supersampling
angenähert
werden, je mehr Fragmenttripel gespeichert werden, aber jedes zusätzliche
Fragmenttripel schmälert
die Speichereinsparungen, die durch die verbesserten Supersampling-Techniken
ermöglicht
werden.
-
7 veranschaulicht
ein Flussdiagramm 700, das das Verfahren des Erzeugens
eines Bildes 132 mittels der vorliegenden Erfindung beschreibt. Bei
den ersten Schritten der Verarbeitung des Bildes 132 wird
das Bild 132 in Fragmente aufgeteilt. Beim Verarbeiten
jedes neuen Fragments bestimmt der Grafikbeschleuniger 108,
ob das neue Fragment an einem der Unterbildpunktabtastwerte S1-S4,
die von dem neuen Fragment bedeckt werden, sichtbar ist. Der Grafikbeschleuniger 108 vergleicht
den Z-Tiefenwert des neuen Fragments mit dem Z-Tiefenwert des gespeicherten
Fragments, das jedem bedeckten Unterbildpunktabtastwert S1-S4 zugeordnet
ist (Schritt 702).
-
Wenn
das neue Fragment einen kleineren Z-Tiefenwert als der Z-Tiefenwert
eines gespeicherten Fragments für
einen be deckten Unterbildpunktabtastwert S1-S4 hat, so befindet
sich das neue Fragment vor dem gespeicherten Fragment und ist folglich
sichtbar. Es besteht jedoch eine Ausnahme, wenn das neue Fragment
einen Alphawert von 0,0 hat. In diesem Fall ist das neue Fragment
vollständig transparent.
Der Grafikbeschleuniger 108 braucht den Fragmentwert des
neuen Fragments nicht zu speichern, weil das neue Fragment praktisch
unsichtbar ist.
-
Wenn
stattdessen das neue Fragment einen größeren Z-Tiefenwert als die
Z-Tiefenwerte für
alle bedeckten Unterbildpunktabtastwerte S1-S4 hat, so liegt das
neue Fragment hinter einem oder mehreren der gespeicherten Fragmente
und kann unsichtbar sein. Wenn das neue Fragment hinter opaken Vordergrundfragmenten
liegt, so ist das neue Fragment unsichtbar, und das Verarbeiten
des neuen Fragments für
den Bildpunkt 134 ist abgeschlossen. Wenn jedoch das neue
Fragment unmittelbar hinter einem transparenten Vordergrundfragment
liegt, so ist das neue Fragment immer noch sichtbar.
-
Wenn
das neue Fragment an einem der bedeckten Unterbildpunktabtastwerte
sichtbar ist, so macht der Grafikbeschleuniger 108 die
Verknüpfung zwischen
jedem bedeckten Abtastwert und einem gespeicherten Fragment ungültig, wenn
das neue Fragment das gespeicherte Fragment für diesen bedeckten Unterbildpunktabtastwert
verdeckt. Bei der indexierten Sparse-Supersampling-Technik verwaltet der
Grafikbeschleuniger 108 Steuerbits, um die Gültigkeit
jedes Index' zu
verfolgen, und macht jeden Index ungültig, der einen bedeckten Unterbildpunktabtastwert
mit einem bedeckten Fragment verknüpft. Die Steuerbits können den
Grafikbeschleuniger 108 anweisen, die Standardhintergrundfarbe
zu verwenden, wenn keine Fragmente einen Unterbildpunktabtastwert
bedecken. Bei der verbesserten A-Puffertechnik bleiben die Bits
in der Abdeckmaske, die jedem bedeckten Unterbildpunktabtastwert
zugeordnet sind, unver ändert,
wenn das neue Fragment transparent ist, und werden auf "0" gesetzt, wenn das neue Fragment opak
ist.
-
Dann
wird in Schritt 708 die Anzahl der Verknüpfungen
gezählt,
die zu jedem Fragmenttripel zeigen. Bei der indexierten Sparse-Supersampling-Technik
zählt Schritt 708 die
Anzahl von Indizes, die mit diesem gespeicherten Fragmenttripel
verknüpft
sind. Bei der verbesserten A-Puffertechnik zählt Schritt 708 die
Anzahl der Bits in jeder Abdeckmaske, die einen Bitwert "1" haben.
-
Ein
Fragmenttripel ist frei und verfügbar, wenn
keine Verknüpfungen
auf das Fragmenttripel zeigen. In diesem Fall kann ein neues Fragmenttripel,
das dem neuen Fragment zugeordnet ist, das freie Fragmenttripel
ersetzen.
-
Wenn
Schritt 710 feststellt, dass ein Fragmenttripel frei ist,
so wird die neue Farbe, die dem neuen Fragment zugeordnet ist, in
dem freien Fragmenttripel gespeichert (Schritt 712). In
Schritt 714 werden die Verknüpfungen der Unterbildpunktabtastwerte,
die von dem neuen Fragment bedeckt werden, zu dem neuen Fragmenttripel
gesetzt.
-
Wenn
Schritt 710 feststellt, dass keine Fragmenttripel frei
sind, so wählt
ein Ersetzungsverfahren, wie zum Beispiel die oben beschriebene
Farbunterschiedtechnik eines der gespeicherten Fragmenttripel zum
Ersetzen aus (Schritt 716). "Ersetzen" meint das Ändern der Farbe, Z-Tiefe und
Matrizenwerte, die in dem ausgewählten
Fragmenttripel gespeichert sind, zu den Farb-, Z-Tiefen- und Matrizenwerten
des neuen Fragmenttripels.
-
In
Schritt 718 wird die neue Farbe in das ausgewählte Fragmenttripel
geschrieben. Die Verknüpfungen,
die ursprünglich
zu dem ausgewählten
Fragmenttripel zeigten, zeigen noch immer auf dieses Fragmenttripel.
Da das ausgewählte
Fragmenttripel nun einen Wert enthält, der die neue Farbe darstellt, werden
die Unterbildpunktabtastwerte, die solchen Verknüpfungen zugeordnet sind, dadurch
der neuen Farbe zugeordnet. Diese Verknüpfungen, die den Unterbildpunktabtastwerten
entsprechen, die durch das neue Fragment bedeckt werden, werden
so gesetzt, dass sie auf die neue Farbe zeigen (Schritt 714).
-
In
Schritt 720 wird die Bildpunktfarbe aus den Unterbildpunktabtastwerten
berechnet, wie oben im Zusammenhang mit den 6A-6D beschrieben.
Die Verknüpfungen,
die den Unterbildpunktabtastwerten S1-S4 zugeordnet sind, zeigen
auf die gespeicherten Farben, die verwendet werden, um die Farbe
des Bildpunkts 134 zu erzeugen. Dementsprechend kann sich
die Bildpunktfarbe mit dem Erscheinen jedes neuen Fragments in dem
Bildpunkt 134 ändern.
-
Wenn
der Grafikbeschleuniger 108 in Schritt 722 mit
der Verarbeitung aller Fragmente fertig ist, so sind die Bildpunkte
zur Anzeige bereit (Schritt 724).
-
In 7 berechnet
ein alternatives Verfahren zum Erzeugen eines Bildes die Farbe des
Bildpunkts in Schritt 720',
was in Strichlinie veranschaulicht ist, bevor es bestimmt, ob Fragmenttripel
verfügbar
sind, in denen der neue Fragmentwert gespeichert werden kann, der
dem neuen Fragment zugeordnet ist. Die existierenden Farben, die
in den Fragmenttripeln gespeichert sind, und der neue Farbwert vereinen
sich zu der Bildpunktfarbe. Der Effekt besteht darin, die Farbe
so zu berechnen, als ob ein zusätzliches
Tripel verfügbar
wäre.
-
Nach
dem Berechnen der Bildpunktfarbe in Schritt 720' kann das alternative
Verfahren dann eine existierende gespeicherte Farbe durch das neue Fragmenttripel
ersetzen, wie oben im Zusammenhang mit den Schritten 716-718 beschrieben.
Wenn jedes Fragment, das nach diesem neuen Fragment verarbeitet
wird, nicht zu einer neuen Berechnung der Bildpunkt farbe führt, so
gehen trotz des Ersetzens keine Farbdaten verloren.
-
Es
versteht sich, dass die oben beschriebenen Ausführungsformen lediglich Veranschaulichungen
der Prinzipien der Erfindung sind. Der Geltungsbereich der Erfindung
wird allein durch die angehängten
Ansprüche
begrenzt.