-
GEBIET DER
ERFINDUNG
-
Diese
Erfindung betrifft im Allgemeinen Computergrafiken und insbesondere
ein Verfahren und ein Gerät
zum Verringern von Aliasingartefakten in Bildern, die durch Bildpunkte
definiert sind.
-
ALLGEMEINER
STAND DER TECHNIK
-
Bei
Anzeigesystemen auf Bildpunktgrundlage sind visuelle Artefakte,
wie zum Beispiel zackige Linien auf einen als Aliasing bekannten
Effekt zurückzuführen. Aliasing
tritt aufgrund der getrennten Beschaffenheit von Bildpunkten, dem
kleinsten auf einem Anzeigebildschirm adressierbaren Bildelement auf.
Bildpunkte sind auf einem Anzeigebildschirm als eine rechteckige
Anordnung von Punkten angeordnet. Aliasingartefakte können auftreten,
wenn ein ganzer Bildpunkt eine Lichtstärke oder Farbe hat, die auf
einem unzureichenden Abtastwert von Punkten innerhalb dieses Bildpunkts
beruht. Techniken zum Minimieren der Aliasingartefakte werden Antialiasing genannt.
-
Eine
Antialiasing-Technik ist das Supersampling. Beim Supersampling werden
mehr Abtastwerte eines Bilds genommen als Bildpunkte anzuzeigen
sind. Solche Abtastwerte werden an Unterbildpunktpositionen innerhalb
jedes Bildpunkts genommen. Die Farbe und die Stärke, die für jeden Bildpunkt angezeigt
wird, ergibt sich aus dem Kombinieren der Unterbildpunktabtastwerte.
-
Die
Qualität
des Antialiasing, die man durch Supersampling erzielt, wird von
dem Grad beeinflusst, bis zu welchem Bildpunkte in Unterbildpunkte aufgeteilt
sind, und von einer Anzahl der Unterbildpunkte, die für jeden
Bildpunkt abgetastet werden. Je mehr Unterbildpunkte pro Bildpunkt
bestehen, desto feiner ist im Allgemeinen die Auflösung des
Bilds; und je mehr Unterbildpunkte pro Bildpunkt abgetastet werden,
desto besser ist der Antialiasing-Effekt. Ein Raster von 8 × 8 Unterbildpunkten
bietet vier Mal so viele mögliche
Abtastwertlagen wie ein Raster zu 4 × 4 Unterbildpunkten. Daher
liefert das Abtasten aller vierundsechzig Unterbildpunkte eines
Rasters zu 8 × 8
vierundsechzig Mal so viele Bildpunktdaten wie das Abtasten von
nur einer der vierundsechzig Unterbildpunktlagen.
-
Das
Abtasten an jeder Unterbildpunktposition, das Vollszenen-Supersampling
genannt wird, ist jedoch in der Umsetzung kostspielig. Jeder Unterbildpunktabtastwert
erfordert Speicher und verbraucht Speicherbandbreite. Die Menge
an Berechnung, die erforderlich ist, um den angezeigten Bildpunktwert
abzuleiten, steigt mit der Anzahl der genommenen Abtastwerte. Daher
haben die Probleme des Vollszenen-Supersamplings zum Sparse-Supersampling
geführt,
bei dem nur ein Teil der Unterbildpunktpositionen abgetastet wird.
In dem 8 × 8-Mal Raster
zum Beispiel, würden
nur acht der vierundsechzig Unterbildpunkte abgetastet, um einen
Anzeigewert für
einen Bildpunkt zu ergeben. Ein solches Verfahren ist aus EP-A2-0
463 700 bekannt.
-
Acht
Unterbildpunktabtastwerte pro Bildpunkt brauchen immer noch beträchtlichen
Speicherplatz. Wenn jeder Bildpunkt acht Byte pro Abtastwert braucht,
brauchen acht Abtastwerte vierundsechzig Byte. Für eine Anzeige zu 1600 × 1200 Bildpunkten wären 123
MByte Speicher erforderlich.
-
Es
besteht daher ein Bedarf für
ein Verfahren und ein Gerät,
die die Anforderungen an Speicherkapazität und Bandbreite verringern,
die mit den Antialiasing-Techniken des früheren Stands der Technik verbunden
sind und die gleichzeitig die Aliasingartefakte in Bildern effektiv
verringern.
-
KURZDARSTELLUNG
DER ERFINDUNG
-
Diese
Erfindung hat die Aufgabe, Aliasingartefakte in grafischen Bildern
zu verringern, indem verbesserte Supersampling-Techniken angewandt
werden. Die Erfindung erlaubt es, diese Artefakte effektiv zu minimieren,
während
die Anforderungen an Speicherkapazität und Bandbreite der Antialiasing-Techniken
des früheren
Stands der Technik verringert werden.
-
In
ihrer weitesten Form beruht die vorliegende Erfindung in einem Verfahren
und einem Gerät
gemäß Anspruch
1 und 11 jeweils zum Verringern der Aliasingartefakte in einem durch
Bildpunkte definierten Bild. Wie beschrieben, wählt das Verfahren Unterbildpunktpositionen
in einem Bildpunkt als Abtastpunkte aus. Ein Fragmentwert, der einem
Fragment des Bilds zugewiesen ist, wird gespeichert. Dieses Fragment
bedeckt einen oder mehrere der ausgewählten Abtastpunkte. Jeder bedeckte
Abtastpunkt wird mit dem gespeicherten Fragmentwert verbunden, um
das Erzeugen einer Farbe des Bildpunkts unter Verwenden des Fragmentwerts
zu ermöglichen.
Die erzeugte Farbe verbessert die empfundene Qualität des Bilds
durch Reduzieren von Aliasingartefakten.
-
Vorzugsweise
wird jedem bedeckten Abtastpunkt ein Index zugewiesen und ein Wert
wird in jedem Index gespeichert, um auf den gespeicherten Fragmentwert
zu zeigen.
-
Ferner
wird dem gespeicherten Fragmentwert ein Bitmuster zugewiesen. Jedes
Bit in dem Muster wird einem der Abtastpunkte zugewiesen. Ein Wert
wird in jedem Bit gespeichert und zeigt an, ob der diesem Bit zugewiesene
Abtastpunkt von dem Fragment bedeckt wird oder nicht.
-
Wie
unten beschrieben, wird ein neues sichtbares Fragment verarbeitet,
und der gespeicherte Fragmentwert wird mit dem Fragmentwert ersetzt, der
dem neuen Fragment zugewiesen ist.
-
Vorteilhafterweise
werden Adressen des Speichers dem Bildpunkt zum Speichern einer
vorausbestimmten Anzahl von Fragmentwerten zugewiesen, wobei die
vorausbestimmte Anzahl kleiner ist als die Anzahl der Abtastpunkte.
-
Was
das Gerät
betrifft, weist die Anordnung ein Grafikgerät auf, das Unterbildpunktpositionen
in einem Bildpunkt als Abtastpunkte auswählt, und einen Speicher, der
mit dem Grafikgerät
gekoppelt ist. Der Speicher speichert einen Fragmentwert, der einem
Fragment des Bilds zugewiesen ist. Dieses Fragment deckt einen oder
mehrere der Abtastpunkte in dem Bildpunkt. Das Grafikgerät verbindet
jeden bedeckten Abtastpunkt mit dem gespeicherten Fragmentwert,
um das Erzeugen einer Farbe des Bildpunkts unter Verwenden des Fragmentswerts
zu erlauben. Wenn der Bildpunkt wiedergegeben wird, verbessert die
erzeugte Farbe die empfundene Qualität des Bilds, indem Aliasingartefakte
verringert werden.
-
Was
einen Speicher zum Speichern der Daten betrifft, die verwendet werden,
um eine Farbe für einen
Bildpunkt, der in Unterbildpunkte partitioniert ist, zusammenzustellen,
weist die beschriebene Anordnung eine Mehrzahl von Adressen auf,
die jeweils einen Fragmentwert speichern. Jeder gespeicherte Fragmentwert
umfasst einen Farbwert und ist einem Fragment eines Bilds zugewiesen,
das einen der Unterbildpunkte deckt. Eine andere Adresse speichert eine
Vielzahl von Indexen. Jeder Index ist einem der Unterbildpunkte
zugewiesen und umfasst einen Indexwert, der auf eine der Mehrzahl
von Adressen zeigt, die einen bestimmten Fragmentwert speichern, um
den mit dem Index zugewiesenen Unterbildpunkt mit dem Farbwert des
bestimmten Fragmentwerts zu verbinden.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
Ein
detaillierteres Verstehen der Erfindung ergibt sich aus der folgenden
Beschreibung einer bevorzugten Ausführungsform, die beispielhaft
gegeben wird und unter Bezugnahme auf die anliegenden Zeichnungen
zu verstehen ist, in welchen:
-
1 ein
Blockschaltbild eines beispielhaften Computergrafiksystems ist,
das zum Ausführen der
Erfindung verwendet werden kann;
-
2A bis 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 bis 2C mit
zwei Fragmenttripeln darstellt, die in einem Bildpunktspeicher gespeichert
sind;
-
4 ein
anderes Verbinden von Unterbildpunktabtastwerten darstellt, wenn
ein drittes Fragment in einem Bildpunkt auftritt;
-
5A bis 5C alternative
Verbindungen von Unterbildpunktabtastwerten für den Fall darstellen, dass
ein drittes Fragment in einem Bildpunkt auftritt;
-
6A bis 6B eine
logische Darstellung des Bildpunktspeichers darstellen, der Indexe
zu den gespeicherten Fragmenttripeln enthält,
-
6C bis 6D eine
logische Darstellung des Bildpunktspeichers darstellen, der Deckmasken enthält, die
den gespeicherten Fragmenttripeln zugewiesen sind, und
-
7 ein
Flussdiagramm darstellt, 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) grafische Bilder zum
Anzeigen gemäß den Konzepten
der vorliegenden Erfindung erzeugen kann. Das Computersystem 100 kann
eines einer Mehrzahl von Rastergrafiksystemen sein, wie zum Beispiel
ein Arbeitsplatzrechner, eine Workstation, oder ein Mainframe-Computer.
-
In
dem Computersystem 100 stellt ein System-Chipset 104 eine
Schnittstelle zwischen einer Verarbeitungseinheit 102,
einem Hauptspeicher 106, einem Grafikbeschleuniger 108 und
Geräten
(nicht gezeigt) auf einem E/A-Bus 110 dar. Die Verarbeitungseinheit 102 ist
mit dem Systen-Chipset 104 durch den Host-Bus 102 gekoppelt
und weist eine zentrale Verarbeitungseinheit (CPU) 118 auf.
Der Hauptspeicher 106 hat eine Schnittstelle mit 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 Grafikbe schleuniger 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-(CRT)-Rasteranzeigebildschirm 128 mit
einer Anzeigefläche
oder Bildschirm 130 auf. Der CRT 128 erzeugt Farbbilder,
die Erfindung kann jedoch 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, erleuchtet werden. Das Bild 132 kann zum Beispiel
alphanumerische 2D-Zeichen oder eine 3D-Szene sein, die mit Objekten
gefüllt
ist. Der Anzeigebildschirm 130 weist eine zwei-dimensionale
Anordnung solcher Bildpunkte 134 auf. Die Anordnungsgröße von Anzeigebildschirmen 130 kann
stark variieren. Beispiele für
Größen von
Anzeigebildschirmen 130 umfassen 1024 × 768 und 1920 × 1200 Bildpunkte.
Für das
Umsetzen der Erfindung kann die Anzeigevorrichtung 126 auf
Bildpunktgrundlage sein, wie zum Beispiel eine Flüssigkristallanzeige
oder ein Dotmatrix-Drucker.
-
Der
Grafikspeicher 122 umfasst Speicherelemente zum Speichern
einer codierten Version des grafischen Bilds 132. Es besteht
eine direkte Entsprechung zwischen den Speicherelementen und jedem
Bildpunkt 134 auf dem Anzeigebildschirm 130. Die
Speicherelemente werden zum Speichern von Daten zugewiesen, die
jeden Bildpunkt 134 darstellen, nachstehend 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 bestimmten Bildpunkts 134 auf dem Bildschirm 130.
Unter „Farbe" versteht man, dass
die Helligkeit oder Stärke
des Bildpunkts 134 ebenfalls bestimmt ist, Bildpunktdaten
können
direkt in Farben oder in Indexe 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 Primitiven und dann in
Fragmente umwandelt. Eine Primitive 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
zu bauen. Ein Fragment ist ein 2D-Vieleck, das durch Trimmen einer Primitiven
des Bilds 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
S. 103–107
gegeben. Dort vereinen Techniken Fragmente in eine Fragmentliste,
wenn die Fragmente von dem gleichen Objekt oder der gleichen Fläche des
Bilds stammen. Hier können
die Fragmente, die kombiniert werden, um die Farbe eines Bildpunkts
zu ergeben, untereinander verschiedene Beziehung haben: das heißt, dass
die Fragmente von verschiedenen Objekten oder Flächen des Bilds 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 in
den Grafikspeicher 122 von dem Hauptspeicher 106 über die
Busse 112, 114, 116 und 124 übertragen
oder direkt von dem Grafikbeschleuniger 108 in den Grafikspeicher
geschrieben werden.
-
Zum
Anzeigen des Bilds 132 projiziert der CRT-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 CRT-Monitor 128 gibt
die Bildpunktdaten als angeleuchtete Farbpunkte auf dem Anzeigebildschirm 130 wieder.
-
Die 2A bis 2C stellen
verschiedene beispielhafte Unterteilungen eines Bildpunkts 134 dar. 2A zeigt
den Bildpunkt 134 aufgeteilt in eine Anordnung 200 zu
4 × 4
gleichmäßig verteilten
Punkten, die Unterbildpunkte 206 genannt werden; 2B zeigt
eine Anordnung 202 zu 8 × 8 von Unterbildpunkten 206,
und 2C zeigt eine Anordnung 204 zu 16 × 16. Das
Teilen eines Bildpunkts 134 in Unterbildpunkte 206 ergibt
mehrfache Punkte, an welchen das Bild 132, das den Bildpunkt 134 bedeckt,
abgetastet werden kann. Als Referenz wird die Mitte 201 des
Bildpunkts 134 als ein X gezeigt.
-
Im
Allgemeinen ist die Auflösung
des Bildpunkts 134 umso größer als sich mehr Unterbildpunkte 206 in
der Anordnung befinden. Daher beruht die angezeigte Farbe des Bildpunkts 134 nicht
ganz auf einem Abtastwertpunkt, sondern auf mehreren Unterbildpunktabtastwerten 206.
Verfahren zum Berechnen eines Bildpunktwerts aus mehrfachen Abtastwertpunkten
sind in der Technik gut bekannt.
-
Bekannte
Anwendungen tasten an jedem Unterbildpunkt 206 in einem
Bildpunkt 134 ab. Während
ein solches Vollszenen-Supersampling
theoretisch die Gelegenheiten zum Erreichen hoher Auflösung bot,
verbraucht die Technik unnötig
Speicherressourcen. Jeder abgetastete Unterbildpunkt 206 verbrauchte
Speicherressourcen, um die abgetasteten Daten zu speichern und zu
verwenden. Das volle Abtasten der 4 × 4-Anordnung 200 von
Unterbildpunkten 206 erforderte Speicherplatz für sechzehn Abtastwerte
zusätzlich
zu den typischen Speicheranforderungen für jeden Bildpunkt 134.
Wenn jeder der sechzehn Abtastwerte erforderlich ist, zum Beispiel
8 Byte Speicher, könnte
das Implementieren von Vollszenen-Supersampling zusätzliche
295 MByte Speicher für einen
Anzeigebildschirm 130 zu 1920 × 1200 Bildpunkten erfordern.
Die 16 × 16-Anordnung 204, die
Speicher für
260 Abtastwerte erfordert, braucht sechzehn Mal so viel Speicher.
-
Daher
tasten neuere moderne Umsetzungen nicht an jedem Unterbildpunkt 206 ab.
Stattdessen sind die Unterbildpunkte 206, die abgetastet
werden, dünn
in der Unterbildpunktanordnung verteilt. Im Allgemeinen werden bei
solchem Sparse-Supersampling
fast ebenso effektive Antialiasing-Resultate erzielt bei der die
Vollszenen-Supersampling-Technik.
-
Die 2A bis 2C stellen
jede ein beispielhaftes Sparse-Supersampling-Muster 210, 220, 230 dar,
das zum Abtasten der Unterbildpunkte 206 der entsprechenden
Unterbildpunktanordnung verwendet werden kann. Die dargestellten
beispielhaften Abtastmuster 210, 220, 230 haben
jeweils N Abtastwerte, die gleichförmig ü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
bis S4 (N ist gleich 4). Für
das Abtastmuster 220 ist N gleich 8, und die acht Unterbildpunktabtastwerte 222 lauten
S1 bis S8. Für
das Abtastmuster 230 ist N gleich 16, und die sechzehn Unterbildpunktabtastwerte 232 sind
S1 bis S16. Das Abtastmuster 210, 220, 230 kann
für jeden
Bildpunkt 134 auf dem Anzeigebildschirm 130 wiederholt
werden. Verschiedene andere Abtastmuster können verwendet werden, um die
erfindungsgemäßen Konzepte
umzusetzen.
-
Obwohl
das Sparse-Supersampling weniger Speicher verwendet als das Vollszenen-Supersampling,
sind dennoch noch beträchtliche
Mengen an zusätzlichem
Speicher erforderlich. Wenn N zum Beispiel gleich 4 ist, braucht
ein Bildschirm 130 zu 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 jeweils gleich 8 und 16 ist.
-
Die
beschriebene Anordnung kann die Speicheranforderungen sogar noch
weiter verringern als ein solches Sparse-Supersampling, ohne die
Anzahl der Unterbildpunktabtastwerte für eine Anordnung zu N × N Unterbildpunkten
zu verringern. Die hier beschriebene Anordnung beruht auf der Beobachtung, dass
typisch nur wenige Fragmente des Bilds 132 innerhalb eines
gegebenen Bildpunkts sichtbar sind.
-
Für Stehbilder
und animierte Bilder sind die Antialiasing-Effekte, die durch acht Sparse-Superabtastwerte
in der Anordnung 202 8 × 8 erzielt werden, signifikant
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 können nicht
unterscheidbar sein.
-
3 zeigt
einen beispielhaften Bildpunkt 300, der zu dem Bild 132 gehört und in
eine 4 × 4-Unterbildpunkt-Anordnung 200 unterteilt
ist. Der Bildpunkt 300 hat vier Abtastpositionen gemäß dem Abtastmuster 210 der 2A.
Zwei Fragmente 301, 302 sind im Bildpunkt 300.
Jedes Fragment 301, 302 ist einem Fragmentwert
zugewiesen, der ein Fragmenttripel 310, 312 genannt
wird. In 3 ist das Fragmenttripel 310 zum
Beispiel dem Fragment 302 zugewiesen, 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 ent lang einer
Z-Achse dar, die zu dem Bild 132 senkrecht ist, um 3D-Tiefe
bereitzustellen. Der Matrizenwert 308 kann verwendet werden,
um Sätze
von Fragmenten des Bilds 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
5 Byte, um die Farbe 304 darzustellen, 3 Byte für die Z-Tiefe 306 und
1 Byte für
die Matrize 308. Die fünf
Farbenbytes 304 nehmen vier 10-Bit-Farbkanäle auf: Rot, Grün, Blau
und Alpha.
-
Die
Farbe eines Fragments wird durch die Kombination von Werten ausgedrückt, die
in den Kanälen
Rot, Grün
und Blau (RGB) gespeichert sind. Der in jedem RGB-Kanal gespeicherte
Wert zeigt die Stärke
(oder Helligkeit) dieses Farbkanals an. Niedrige Werte entsprechen
niedriger Stärke,
dunklen Farben, hohe Werte entsprechen hoher Stärke, hellen Farben. Verschiedene
Verfahren zum Erzeugen der Farbe durch Kombinieren der RGB-Werte
sind in der Technik gut 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 komplett transparent,
und Werte zwischen 0,0 und 1,0 zeigen Grade an Transparenz an.
-
Speicher
wird jedem Bildpunkt 134 zum Speichern einer vorausbestimmten
Anzahl von Fragmenttripeln zugewiesen. Dieser Speicher kann entweder
der Grafikspeicher 122 wie in 3 gezeigt oder
der Hauptspeicher 106 sein. In dem in 3 gezeigten
Beispiel wird der Bildpunktspeicher 314 einem bestimmten
Bildpunkt 300 zugeordnet. Man kann sich vorstellen, dass
eine Gruppe von Bildpunkten, wie zum Beispiel eine 2 × 2-Anordnung
von Bildpunkten 134 einen bestimmten Bildpunktspeicher 314 gemeinsam
hat. Jedes Fragmenttripel, das in dem Bildpunktspeicher 314 gespeichert
ist, würde von
jedem Bildpunkt 134 in der Gruppe verwendet statt von nur
einem bestimmten Bildpunkt 300. Das kann mehr Speicher
sparen als das Speichern einer vorausbestimmten Anzahl von Fragmenten
für jeden Bildpunkt 134,
insbesondere für
Teile des Bilds 132, die sich allmählich in Farbe und Z-Tiefe ändern.
-
Alternativ
kann Speicher zum Speichern von Fragmenttripeln dynamisch für jeden
Bildpunkt 134 zugewiesen statt auf eine vorausbestimmte
Zahl festgelegt zu werden. Hier kann eine veränderliche Anzahl von Fragmenttripeln
für jeden
Bildpunkt 134 gespeichert werden, wobei der Grafikbeschleuniger 108 Speicher
dem Bildpunkt 134 nach Bedarf 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
vorausbestimmten Anzahl von Fragmenttripeln zuweist und dynamisch
zusätzlichen
Speicher einem bestimmten Bildpunkt 134 bei Bedarf zuweist,
um ein Fragmenttripel über
die vorausbestimmte Zahl hinaus zu speichern.
-
Die
beispielhafte Ausführungsform
in 3 speichert zwei Fragmenttripel 310, 312 in
dem Bildpunktspeicher 314. Diese Fragmenttripel 310, 312 sind
den Fragmenten 301, 302, die den Bildpunkt 300 decken,
zugewiesen. Bevor die Fragmente 301, 302 in dem
Bildpunkt 300 erscheinen, kann der Bildpunktspeicher 314 initialisiert
werden, um einen Standardfragmentwert zu enthalten. Der Standardfragmentwert
stellt ein Hintergrundfragment dar, das verwendet werden kann, wenn
keine Fragmente einen bestimmten Unterbildpunktabtastwert decken,
oder wenn alle Fragmente, die den bestimmten Unterbildpunktabtastwert
decken, durchsichtig sind. Alter nativ kann dieser Standardfragmentwert
in dem Grafikspeicher 122 gespeichert werden, wo der Wert
von mehrfachen Bildpunkten 134 geteilt werden kann. Jeder
Bildpunkt 134 könnte
einen speziellen Indexwert speichern, der auf das Standardfragment
zeigt.
-
Andere
Ausführungsform
können
mehr als zwei Fragmenttripel speichern, um die Qualität des Antialiasing
zu verbessern. Das Speichern weniger Fragmenttripel spart an Speicher,
kann jedoch ein Antialiasing geringerer Qualität als das Speichern vieler
Fragmenttripel erzeugen. Es wird zum Beispiel beobachtet, dass für die 8 × 8-Unterbildpunkanordnung 202 und
das Abtastmuster 220 (N = 8) das Speichern von drei Fragmenttripeln
bessere Antialiasing-Ergebnisse ergibt als das Speichern von zwei Fragmenttripeln.
-
Pointer 320–326 verbinden
die Unterbildpunktabtastwerte S1–S4 mit den zugehörigen Fragmenttripeln 310, 312,
die in dem Bildpunktspeicher 314 gespeichert sind. Unter
Link versteht man eine logische Verbindung zwischen den Unterbildpunktabtastwerten
S1–S4
und den Fragmenttripeln 310, 312. Beispielhaft
verbindet der Pointer 326 den Unterbildpunkt S1 mit dem
Fragmenttripel 312, während
die Pointer 320 bis 324 die Unterbildpunkte S2
bis S4 mit dem Fragmenttripel 310 verbinden.
-
Bei
einer Ausführungsform,
die weiter in Zusammenhang mit 6A beschrieben
wird, wird das Verbinden durch Speichern eines Indexwerts für jeden
Unterbildpunktabtastwert S1 bis S4 durchgeführt. Daher wird diese Ausführungsform
indexiertes Sparse-Supersampling genannt. Bei einer anderen Ausführungsform,
die in Zusammenhang mit 6C beschrieben
ist, erfolgt das Verbinden durch Speichern einer Deckmaske oder
eines Bitmusters für
jeden gespeicherten Fragmentwert. Diese Ausführungsform wird unten 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 Bilds 132 abzutasten, der den Bildpunkt 300 deckt.
In 3 verwendet der Grafikbeschleuniger 108 zum
Beispiel die 4 × 4-Anordnung 200 mit
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 befindet,
die von dem Fragment eingeschlossen wird, oder, in bestimmten Fällen, auf
einem Rand des Fragments.
-
Im
Allgemeinen bestimmt der Grafikbeschleuniger 108 welche
Fragmente 301, 302 an jedem Unterbildpunktabtastwert
S1 bis S4 sichtbar sind. Aus der Sicht eines Betrachters des Bilds 132, das
zum Zweck der Darstellung der Erfindung in 3D 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
Hintergrundfragmente. Ein opakes Vordergrundfragment kann ein Hintergrundfragment
hinter diesem Vordergrundfragment verdecken.
-
Daher
muss jedes Fragment einen Z-Tiefentest an einem der Unterbildpunktabtastwerte
S1 bis S4 bestehen, das heißt,
dass der Z-Wert 306 des Fragmenttripels, das dem Fragment
zugewiesen ist, kleiner sein muss, das heißt aus der Sicht des Betrachters,
näher als
der Z-Wert 306 für
jedes andere opake Fragment. Wenn ein Fragment den Z-Tiefentest
besteht, speichert der Grafikbeschleuniger 108 das dem
sichtbaren Fragment zugewiesene Fragmenttripel in den Bildpunktspeicher 314.
-
Wenn
das Fragment 301 zum Beispiel als an dem Unterbildpunktabtastwert
S1 des Bildpunkts 300 sichtbar bestimmt wird, wird der
Pointer 326 erzeugt, der diesen Unterbildpunkt S1 mit dem
entsprechenden gespeicherten Fragmenttripel 312 verbindet.
Bei der bevorzugten Ausführungsform
ist der Pointer 326 in dem Bildpunktspeicher 314 mit
den Fragmenttripeln 310, 312 gespeichert, die
mit dem Bildpunkt 300 verbunden sind.
-
Statt
vier Fragmenttripel in den Bildpunktspeicher 314 zu speichern,
nämlich
eines für
jeden der vier Unterbildpunktabtastwerte S1 bis S4, was typisch
bei Supersampling-Techniken
getan würde, speichert
die beispielhafte Ausführungsform
in 3 nur zwei Fragmenttripel 310, 312.
Es ist daher möglich,
das Speichern redundanter Daten für den Bildpunkt 300 zu
vermeiden, weil nur ein Auftreten des Fragmenttripels 310 für die drei
Unterbildpunktabtastwerte S2 bis S4 gespeichert wird. Dadurch werden
die Speicheranforderungen für
Fragmenttripel beträchtlich
verringert.
-
Wenn
jedes Fragmenttripel 310, 312 zum Beispiel neun
Byte Speicher braucht, verwenden die verbesserten Supersampling-Techniken etwa achtzehn
Byte Speicher pro Bildpunkt weniger als typische Supersampling-Verfahren.
Die verbesserten Supersampling-Verfahren verwenden zusätzlichen Speicher
zum Speichern der Pointer 320 bis 326, aber diese
Menge ist im Vergleich zu dem Speicher klein, der durch Speichern
von nur zwei Fragmenttripeln 310, 312 für die vier
Unterbildpunktabtastwerte S1 bis 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 ver besserten
Supersampling-Techniken pro Bildpunkt vierundfünfzig Bytes weniger als das
typische Supersampling. Das ergibt sich aus der Tatsache, dass nur
zwei von acht abgetasteten Fragmenttripeln in den 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 den Bildpunktspeicher 314 gespeichert,
so dass pro Bildpunkt 112 Byte gespart werden. Bei einem Anzeigebildschirm 130 zu
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 bis S4 zugewiesen sind, verwendet werden. Eine Funktion besteht
einfach darin, die Farben der Fragmenttripel, die den vier Unterbildpunktabtastwerten
S1 bis S4 zugeordnet sind, zu mitteln.
-
4 stellt
einen beispielhaften Fall dar, bei dem ein drittes sichtbares Fragment 400 in
dem Bildpunkt 300 der 3 erscheint.
Wie durch einen Pfeil 402 angezeigt, ist das dritte Fragment 400 mit
einem neuen Fragmenttripel 410 verbunden. Das neue Fragmenttripel 410 ist
anders als die gespeicherten Fragmenttripel 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 bis S3. Daher bleibt der Unterbildpunktabtastwert
S1 mit dem Fragmenttripel 312 durch den Pointer 326 verbunden.
Die Unterbildpunkte S2 und S3 bleiben mit dem Fragmenttripel 310 jeweils
durch den Pointer 324 und den Pointer 322 verbunden.
Um darzustellen, dass das Fragment 302 an dem Bildpunktabtastwert
S4 nicht mehr sichtbar ist, wird die Verbindung 320 von
dem Unterbildpunktabtastwert S4 zu dem Fragmenttripel 310 als gebrochen
gezeigt.
-
Wenn
das dritte Fragment 400 von dem Grafikbeschleuniger 108 verarbeitet
wird, sind die Fragmenttripel 30, 312 bereits
in den Bildpunktspeicher 314 gespeichert, und das Fragmenttripel 410 wird
als noch nicht in den Bildpunktspeicher 314 gespeichert gezeigt.
Unten 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
vorausbestimmte Anzahl von Fragmenttripeln zugewiesen ist, das zusätzliche
Fragmenttripel 410 unterbringen kann, oder dass der Speicher 314,
der zum Speichern des neuen Fragmenttripels 410 erforderlich
ist, dynamisch zugewiesen 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, dem typischen Sparse-Supersampling nähert oder dieses
sogar überschreitet.
Sollte ein viertes Fragment in dem Bildpunkt 300 sichtbar
sein, 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 große
Wahrscheinlichkeit, dass in dem Bildpunkt weniger sichtbare Fragmente
sind als Unterbildpunktabtastwerte, und dass daher entsprechende
Einsparungen an Speicher verbleiben. Wenn der Bildpunktspeicher 314 ferner
dynamisch über
die vorausbestimmte Anzahl von Fragmenttripeln hinaus zugewiesen
wird, braucht im Allgemeinen relativ wenigen Bildpunkten dynamisch
Speicher zugewiesen zu werden. Obwohl die verbesserten Supersampling-Verfahren
dann mehr Speicher für
einen gegebenen Bildpunkt 134 brauchen 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 den verfügbaren Speicher
für Fragmenttripel überschreitet,
wie wenn zum Beispiel der Bildpunktspeicher 340, der für die vorausbestimmte
Anzahl von Fragmenttripeln zugewiesen ist, bereits voll, oder kein
Bildpunktspeicher verfügbar
ist, um dynamisch neuen Fragmenttripeln 410 zugewiesen
zu werden.
-
Wenn
zum Beispiel nur Speicher für
zwei Fragmenttripel besteht, es aber vier verschiedene sichtbare
Fragmente in dem Bildpunkt 300 gibt, ein unterschiedliches
Fragment für
jeden der vier Unterbildpunktabtastwerte S1 bis S4, gewährleistet
das Zurückgehen
auf nur zwei Unterbildpunktabtastpunkte ausreichend Speicher für die Fragmente,
die diese zwei Abtastwerte decken.
-
Das
Zurückgehen
auf die Anzahl von Abtastwerten kann allmählich erfolgen. Wenn zum Beispiel acht
Unterbildpunktabtastwerte S1 bis S8 verwendet werden, könnte das
Verfahren mit acht Abtastwerten beginnen, auf sechs verringern,
dann auf vier und eventuell auf zwei, wenn die Anzahl der verschiedenen
sichtbaren Fragmente in dem Bildpunkt über dem verfügbaren Speicher
zu sein scheint.
-
Das
Verfahren kann unabhängig
auf jedem Bildpunkt funktionieren. Das Verfahren kann zum Beispiel
alle vier Unterbildpunktabtastwerte S1 bis S4 für einen Bildpunkt verwenden
und dann auf nur zwei Unterbildpunktabtastwerte S1 und S2 für einen anderen
Bildpunkt zurückgehen.
-
5B stellt
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, anzugleichen. Das
eingekreiste Pluszeichen („+") in 5 stellt
den Angleichprozess dar.
-
Ein
beispielhafter Angleichprozess gewichtet die Farbverteilung jedes
Fragmenttripels 310, 312 und das neue Fragmenttripel 410 mit
dem angeglichenen Fragmenttripel 530, 532.
-
Der
Farbbeitrag jedes gespeicherten Fragmenttripels 310, 312 wird
zum Beispiel durch Multiplizieren des Farbwerts 304 dieses
Fragmenttripels mit der Anzahl von Abtastwerten, die von diesem Fragmenttripel
bedeckt werden, bestimmt; dann durch Teilen des Ergebnisses durch
die Anzahl von Abtastwerten S1 bis S4, die zuvor von dem Fragmenttripel
bedeckt wurde, bevor das neue Fragment 400 erschien. Der
Farbbeitrag des neuen Fragmenttripels 410 wird durch Multiplizieren
des Farbwerts 304 des neuen Fragmenttripels 410 durch
die Anzahl von Abtastwerten erzielt, die von dem gespeicherten Fragmenttripel
bedeckt werden, jedoch von dem neuen Fragment 400 nicht
bedeckt werden; dann durch Dividieren des Ergebnisses durch die
Anzahl von Abtastwerten S1 bis S4, die zuerst 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 angeglichenen Fragmenttripel 530 beitragen, und das
neue Fragmenttripel 410 würde 1/3 seines Farbwerts 304 beitragen.
Für das
angeglichene Fragmenttripel 532 trägt das Fragmenttripel 312 seinen
ganzen Farbwert (1/1) bei, und das neue Fragmenttripel 410,
das keine Abtastpunkte bedeckt, die mit dem Fragmenttripel 312 verbunden
sind, würde
keinen Farbwert (0/1) beitragen. Dann werden diese gewichteten Farbewerte 304 addiert.
Andere Farbangleichtechniken gemäß dem Stand
der Technik können
verwendet werden.
-
In 5B ist
das Fragmenttripel 410 mit dem Fragmenttripel 310 angeglichen,
um ein angeglichenes Fragmenttripel 530 zu erzeugen, und
die Pointer 322, 324, die die Unterbildpunkte
S2 bis S3 mit dem Fragmenttripel 310 verbinden, zeigen
nun auf das angeglichene Fragmenttripel 530. Ferner wird
das Fragmenttripel 410 mit dem Fragmenttripel 312 so angeglichen,
dass sich ein angeglichenes Fragmenttripel 532 ergibt,
und der Pointer 326, der den Unterbildpunkt S1 mit dem
Fragmenttripel 312 verbindet, zeigt nun auf das angeglichene
Fragmenttripel 532. Der Unterbildpunkt S4 ist mit dem angeglichenen Fragmenttripel 530 verbunden.
Alternativ kann der Unterbildpunkt S4 mit dem anderen Fragmenttripel 532 verbunden
werden.
-
Die
angeglichenen Fragmenttripel 530, 532 werden in
dem Bildpunktspeicher 314 gespeichert. Das angepasste 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 angeglichene
Fragmenttripel 532.
-
5C zeigt
einen beispielhaften Ansatz zum Unterbringen des dritten sichtbaren
Fragments 400 in dem Bildpunkt 300. Dieser Ansatz
ersetzt eines der Fragmenttripel 310, 312, die
zuvor in dem Bildpunktspeicher 314 mit dem dritten Fragmenttripel 410 gespeichert
waren. Das Fragmenttripel 310 wird zum Beispiel 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 speichern und in der Tat die Daten
des Fragmenttripels 310 eliminieren. Alternativ kann für das Fragmenttripel 310 Speicherzuordnung
aufgehoben und dem Fragmenttripel 410 zugewiesen werden.
-
In 5C belegen
die Daten des neuen Fragmenttripels 410 die spezifische
Adresse des Bildpunktspeichers 314, die zuvor das Fragmenttripel 310 speicherte.
Die Pointer 322, 324 zeigen auf diese besonderen
Adressen des Bildpunktspeichers. Während die Pointer 322, 324 zuvor
die Unterbildpunkte S2 bis S3 mit dem Fragmenttripel 310 verbanden, verbinden
diese Pointer 322, 324 nun die Unterbildpunkte
S2 bis S3 mit dem neunen Fragmenttripel 410.
-
Techniken
zum Auswählen
des Fragmenttripels 310, 312 oder 314,
das zu eliminieren ist, werden unten beschrieben.
-
Auswahlsysteme
-
Z-Priorität
-
Eine
Technik zum Auswählen
des Fragmenttripels 310, 312, das zu ersetzen
ist, Z-Prioritätsverfahren
genannt, besteht darin, festzulegen, 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 als der Z-Tiefenwert 306 groß ist. Wenn der
Z-Tiefenwert 306 des
Fragmenttripels 310 zum Fragmenttripel 310 zum
Beispiel 4 beträgt
und der Z-Tiefenwert 306 des Fragmenttripels 312 2
beträgt, wird
das Fragmenttripel 310 durch das neue Fragmenttripel 410 ersetzt.
Die Pointer 322 bis 324, die zuvor die Unterbildpunktabtastwerte
S2 bis S3 mit dem Fragmenttripel verbanden, verbinden nun die Unterbildpunktabtastwerte
mit dem Fragmenttripel 410. Sollte mehr als ein gespeichertes
Fragmenttripel 310, 312 den größten Z-Tiefenwert 306 haben, kann
das Fragmenttripel 310, 312 mit der kleineren Anzahl
von Pointern 320 bis 326 ersetzt werden.
-
Grundlegender Farbunterschied
-
Bei
einer anderen Technik zum Auswählen, welches
Fragmenttripel 310, 312 zu ersetzen ist, Verfahren
des grundlegenden Farbunterschied genannt, 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 Fragmenttripel 310, 312 verglichen.
Obwohl das Verfahren unten anhand des RGB-Farbmodells beschrieben
wird, kann es an andere Farbmodelle angewandt werden, wie zum Beispiel
Farbton, Helligkeit und Sättigung (HLS)
und Farbton, Sättigung
und Wert (HSV) Farbmodelle.
-
Genauer
genommen vergleicht das Verfahren des grundlegenden Farbunterschieds
den 10-Bitwert des ROT-Kanals des neuen Fragmenttripels 410 mit
dem 10-Bitwert des ROT-Kanals jedes gespeicherten Fragmenttripels 310, 312.
Ferner werden Vergleiche für
den GREEN- und den BLUE-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 diese Summe mit der Anzahl von Unterbildpunktabtastwerten
multipliziert, die auf das gespeicherte Fragmenttripel 310, 312 zeigen.
Das ergibt einen Gesamtfarbunterschied, der sich ergäbe, sollte
das gespeicherte Fragmenttripel 310, 312 durch
das neue Fragmenttripel 410 ersetzt werden. Das Fragmenttripel 310, 312,
das den kleineren Farbunterschied ergibt, wird durch das neue Fragmenttripel 410 ersetzt.
-
Bei
einem übermäßig 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. Ferner sind in 5C zwei
Unterbildpunkte gezeigt, die auf das Fragmenttripel 310 zeigen – wenn das
neue Fragment 400 als im Abtastpunkt S4 sichtbar bestimmt
wird, wird der Pointer 320 (siehe 3) von S4
zu dem Fragmenttripel 310 ungültig gemacht – und ein
Unterbildpunkt, der auf das Fragmenttripel 312 zeigt.
-
Der
Gesamtfarbunterschied zwischen dem Fragmenttripel 310 und
dem neuen Fragmenttripel 410 beträgt 4, das heißt (|0 – 0| + |2 – 3| + |4 – 3|)·2, und
der Gesamtfarbunterschied zwischen dem Fragmenttripel 312 und
dem neuen Fragmenttripel 410 beträgt 6, das heißt (|2 – 0| + |4 – 3| + |0 – 3|)·1. Daher wird
das Fragmenttripel 310 ersetzt.
-
Farbunterschied und durchsichtige
Fragmente
-
Wenn
durchsichtige Fragmente an dem Farbunterschied beteiligt sind, wird
die Auswirkung jedes möglichen
Ersetzens an der endgültigen
Bildpunktfarbe mit der idealen endgültigen Bildpunktfarbe verglichen,
die sich ergäbe,
falls das neue Fragmenttripel 410 in dem Bildpunktspeicher 314 gespeichert
werden kann. Das gespeicherte Fragmenttripel 310, 312,
das eine endgültige
Bildpunktfarbe mit dem kleinsten Farbunterschied beim Vergleich
mit der idealen endgültigen
Bildpunktfarbe ergibt, wird zum Ersetzen ausgewählt. In einem Stapel durchsichtiger Fragmente
tendiert diese Auswahl dazu, die weiter entfernten durchsichtigen
Fragmente, die schwer 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 Farbunterschiedverfahren
durchgeführt
wird, vergleicht das N-Quadrat Farbunterschiedverfahren jedes gespeicherten
Fragmenttripels 310, 312 gegeneinander. Dieses
Verfahren ersetzt entweder eines der gespeicherten Fragmenttripel 310 mit
dem Fragmenttripel 410, oder ersetzt eines der gespeicherten
Fragmenttripel 310, 312 mit einem anderen der
gespeicherten Fragmenttripel 310, 312, das heißt, indem
die Pointer von dem einen gespeicherten Fragmenttripel zu dem anderen gespeicherten
Fragmenttripel ausgetauscht werden. Das neue Fragmenttripel 420 wird
an die Adressen des Bildpunktspeichers geschrieben, an welchen das ersetzte
Fragmenttripel zuvor gespeichert war. Der N-Quadrat Farbunterschied
scheint keine signifikant bessere Leistung zu erbringen als das
Farbunterschiedverfahren.
-
Farbunterschiedverfahren
der visuellen Empfindlichkeit
-
Weitere
Techniken, die zufriedenstellende Ergebnisse bringen können, beruhen
auf den Merkmalen des menschlichen Sehsystems. Die Fähigkeit eines
menschlichen Auges, Helligkeitsunterschiede zu erkennen, kann zum
Beispiel geringer sein als die Fähigkeit,
Farbtonunterschiede zu erkennen. Daher kann eine beispielhafte visuelle
Empfindlichkeitsersatzmethode dieses Merkmals nutzen, indem das Fragmenttripel 310, 312 ersetzt
wird, das heller oder dunkler ist als das neue Fragmenttripel 410,
an Stelle des Fragmenttripels 310, 312, das einen
anderen Farbton hat. Ein solches Verfahren würde es vorziehen, das gespeicherte
Fragmenttripel 310, 312 mit einem 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
des Luminanzempfindens des Menschen stützen. Im Allgemeinen kann ein
menschliches Auge etwa eine 2-%ige Änderung in der Helligkeit einer
Farbe erkennen. Daher können große numerische
Unterschiede zwischen hohen Farbwerten 304 (das heißt Farben
hoher Stärke)
weniger merklich sein als kleine numerische Unterschiede zwischen
niedrigen Farbwerten (das heißt
Farben mit geringer Stärke).
Daher werden Luminanzunterschiede als Verhältnisse der Farbwerte 304 an
Stelle numerischer Unterschiede zwischen Farbwerten berechnet. Das
Fragmenttripel 310, 312, das den kleineren Luminanzunterschied
ergibt, das heißt,
das kleinere Verhältnis
der Farben im Vergleich zu dem neuen Fragmenttripel 410 wird
ersetzt.
-
Z-Priorität-Farbunterschied
-
Diese
Technik kombiniert das Z-Prioritätsverfahren
mit einem beliebigen der oben genannten Farbunterschiedverfahren,
um eine Ersatzmethode zu ergeben, die bessere Leistung erbringt
als eines der Verfahren allein. Die oben beschriebenen Farbunterschiedverfahren
funktionieren mit Ersetzen eines gespeicherten Fragmenttripels durch
ein neues Fragmenttripel. Das Verfahren des Z-Prioritäts-Farbunterschieds
betrachtet zusätzlich,
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 der gespeicherten Fragmenttripel berechnet, die vor einem
neuen Fragment liegen, das heißt
mit kleinerem Z-Tiefenwert, aber nicht für die gespeicherten Fragmenttripel,
die hinter dem neuen Fragment liegen.
-
Daher
kann ein gespeichertes Fragmenttripel 310, 312 ausgewählt werden,
und das neue Fragmenttripel 420 zu ersetzen, wenn dieses
Fragmenttripel 310, 312 den kleinsten Farbunterschied
erzeugt und das Fragmenttripel 310, 312 einem
Fragment zugewiesen 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 verbunden wird, und dass
das neue Fragmenttripel 410 eliminiert wird.
-
Wenn
mehr als ein Ersetzen möglich
ist, sollte im Allgemeinen das Ersetzen, das die kleinere Anzahl
von Unterbildpunktabtastwerten betrifft, eintreten. Wenn zum Beispiel
entweder das neue Fragmenttripel oder ein gespeichertes Vordergrundfragmenttripel
ersetzt werden kann, ersetzt das gespeicherte Fragmenttripel das
neue Fragmenttripel, wenn das gespeicherte Vordergrundfragmenttripel
mehr Unterbildpunktabtastwerte bedeckt als das neue Fragmenttripel.
-
Zonendeckung
-
Ein
weiteres effizientes Verfahren wählt
das Fragmenttripel aus, das an der kleinsten Anzahl von Unterbildpunktabtastwerten
sichtbar ist, und ersetzt dieses Fragmenttripel mit dem neuen Fragmenttripel 410.
Danach zeigt jeder Pointer zu dem ersetzten Fragmenttripel auf das
neue Fragmenttripel.
-
Semaphor-Verfahren
-
Das
Z-Prioritätsfarbunterschiedverfahren
erlaubt es bestehenden Vordergrundfragmenten, neue Hintergrundfragmente
zu ersetzen, erlaubt es jedoch existierenden Hintergrundfragmenten
nicht, neue Vordergrundfragmente zu ersetzen. Das erfolgt, 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
erlaubt, durch ein größeres Hintergrundfragment
ersetzt zu werden. Das Semaphorverfahren vermeidet dieses Problem.
-
Das
Semaphorverfahren verbindet ein Semaphorbit mit jedem Bildpunkt.
Ursprünglich
ist jedes Semaphorbit auf 0 gesetzt. Wenn bestimmt wird, dass das
Ersetzen eines neuen Vordergrundfragments durch ein existierendes
Hintergrundfragment den kleinsten Farbunterschied ergibt, und das
zugehörige
Semaphorbit 0 ist, erlaubt es das Semaphorverfahren dem existierenden
Hintergrundfragment, das neue Vordergrundfragment zu ersetzen. Das
zugehörige
Semaphorbit wird auf 1 gesetzt. Das stellt sicher, dass zwei solche
Ersetzungen nicht nacheinander auftreten können. Wenn das ersetzte neue Vordergrundfragment
Teil einer größeren Vordergrundfläche war,
ersetzt das nächste
neue Vordergrundfragment für
diese größere Fläche das
existierende Hintergrundfragment, weil das Semaphorbit auf 1 gesetzt
ist. Es wurde jedoch beobachtet, dass dieses grundlegende Semaphorverfahren
einige nicht zufriedenstellende Artefakte erzeugen kann.
-
Fragmentzentroid-Entfernungsverfahren
-
Derartige
Verfahren basieren das Farbersetzen auf die Entfernung zwischen
dem neuen Fragment und jedem möglichen
Fragment, das das neue Fragment ersetzen kann. Daher kann ein neues Fragment
erweitert werden, um benachbarte Unterbildpunktabtastwerte zu decken,
statt gespeicherte Fragmente zu ersetzen, die entfernte Unterbildpunktabtastwerte
decken. Es ist ferner wahrscheinlich, dass Unterbildpunktabtastwerte
in der Nähe
der bedeckten Unterbildpunktabtastwerte später bedeckt werden.
-
Die 6A und 6B stellen
eine beispielhafte logische Darstellung des Bildpunktspeichers 314 dar,
der von der indexierten Sparse-Supersampling-Technik verwendet wird.
Der Bildpunktspeicher 314 umfasst Indexe 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 Indexe 600 voneinander oder von den Fragmenttripeln 310, 312 getrennt
sein.
-
Die
Indexe 600 zeigen an, wo in dem Bildpunktspeicher 314 das
Fragmenttripel, das mit jedem Unterbildpunktabtastwert verbunden
ist, gefunden werden kann. Jeder Index 602 bis 608 der
Indexe 600 ist mit einem der Unterbildpunktabtastwerte
S1 bis S4 verbunden. Wie in 6B gezeigt,
ist der Index 602 mit dem Unterbildpunktabtastwert S1 verbunden,
der Index 604 ist mit dem Unterbildpunktabtastwert S2 verbunden
usw. Für
das Abtastmuster 220 gibt es acht Indexe für die acht
Unterbildpunktabtastwerte S1 bis S8 und für das Abtastmuster 320, bei
dem N = 16, gibt es sechzehn. Der in jedem Index 602 bis 608 gespeicherte
Wert zeigt auf eines der Fragmenttripel 310, 312.
Daher verbindet jeder Index 602 bis 608 den zugehörigen Unterbildpunktabtastwert
S1 bis S4 mit einem der Fragmenttripel 310, 312.
-
Wenn
zwei Fragmenttripel 310, 312 in dem Bildpunktspeicher 314 gespeichert
sind, kann jeder Index 602 bis 608 durch ein Datenbit
dargestellt werden. Der in jedem Index 602 bis 608 gespeicherte
Bitwert lenkt den Grafikbeschleuniger 108 zu dem Fragmenttripel 310, 312,
das mit jedem Unterbildpunktabtastwert S1 bis S4 verbunden ist.
In dem in 6B gezeigten Beispiel ist eine „1" in dem Index 602 gespeichert
und eine „0" in jedem der anderen
Indexe 604–608.
Ein Nullbitwert zeigt auf das erste Fragmenttripel 310 in
dem Bildpunktspeicher 314, und ein Einbitwert zeigt auf
das zweite Fragmenttripel 312.
-
Wenn
alternativ drei Fragmenttripel in dem Bildpunktspeicher 314 gespeichert
sind, braucht man zwei Bit pro Index 602 bis 608.
Zwei Bit pro Index 602 bis 608 können maximal
vier gespeicherte Fragmenttripel, drei Bit maximal acht Fragmenttripel
und vier Bit maximal sechzehn unterbringen.
-
Bei
einem Bit pro Index 602 bis 608 braucht das Abtastmuster 210 (N
= 4) vier Bit Bildpunktspeicher 314, um die Indexe 600 umzusetzen.
Die Speichererfordernisse für
die Indexe 600 größerer Abtastmuster 220, 230 sind
ebenfalls klein. Das Abtastmuster 230 (N = 16) würde zum
Beispiel sechzehn Bit pro Bildpunkt 134 brauchen, um ein
Bit pro Index umzusetzen. Das Umsetzen von vier Bit pro Index verwendet
vierundsechzig Bit pro Bildpunkt, was immer noch beträchtliche
Speichereinsparungen im Vergleich zu typischen Sparse-Supersampling-Techniken
bereitstellt, die für
die sechzehn Unterbildpunktabtastwerte S1 bis S6 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 verbunden sind, multipliziert. Danach werden
diese gewichteten Farbwerte addiert, um die Bildpunktfarbe zu ergeben.
-
Die 6C und 6D zeigen
eine beispielhafte logische Darstellung des Bildpunktspeichers 314,
der von der verbesserten A-Puffertechnik verwendet wird. Der Bildpunktspeicher 314 umfasst
Abdeckmasken (oder Bitmuster) 620, 622 und gespeicherte
Fragmenttripel 310, 312. Der Bildpunktspeicher 314 stellt
Speicher für
eine vorausbestimmte 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 umfasst, ist in den 6C und 6D gestrichelt
dargestellt.
-
Die
Abdeckmasken 620, 622 verbinden die Unterbildpunktabtastwerte
S1 bis S4 mit den Fragmenttripeln 310, 312, die
in dem Bildpunktspeicher 314 gespeichert sind. Mit jedem
gespeicherten Fragmenttripel 310, 312 ist eine
Abdeckmaske 620, 622 verbunden. Unter Bezugnahme
auf 6D ist die Abdeckmaske 620 zum Beispiel
dem Fragmenttripel 310 zugewiesen, wie durch einen Pfeil 621 angezeigt,
und die Abdeckmaske 622 ist dem Fragmenttripel 312 zugewiesen,
wie durch den Pfeil 623 angezeigt. Bei der dargestellten
alternativen Ausführungsform
ist die Abdeckmaske 624 dem dritten Fragmenttripel 410 durch
den Pfeil 625 zugewiesen.
-
Jede
Abdeckmaske 620, 622, 624 umfasst ein
Bit für
jeden Unterbildpunktabtastwert S1 bis S4. In 6D sind
die Zuweisungen zwischen den Bits in den Abdeckmasken und den Unterbildpunktabtastwerten
S1 bis S4 durch Pfeile 634 bis 640 dargestellt. Der
Unterbildpunktabtastwert S1 ist zum Beispiel den Bits 626 zugewiesen,
der Unterbildpunktabtastwert S2 den Bits 628, der Abtastwert
S3 den Bits 630 und der Abtastwert S4 den Bits 632 zugewiesen.
-
Mit
einem Bit pro Abtastwert S1 bis S4 braucht das Abtastmuster 210 (N
= 4) vier Bit 626, 628, 630, 632 des
Bildpunktspeichers 314, um jede Abdeckmaske 620, 622, 624 umzusetzen.
Bei der gezeigten alternativen Ausführungsform, bei der drei Fragmenttripel
gespeichert sind, beträgt
der kombinierte Bedarf für
drei zugewiesene 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 bis S8. Wie bei dem
Abtastmuster 230, das sechzehn Unterbildpunktabtastwerte
S1 bis S16 hat, wären
sechzehn solche Bit in jeder Abdeckmaske. Aber sogar mit sechzehn
Bit pro Abdeckmaske sind die Speichereinsparungen im Vergleich zu
bekannten Sparse-Supersampling-Techniken, die sechzehn Fragmenttripel für die sechzehn
Unterbildpunktabtastwerte S1 bis S16 speichern, beträchtlich.
-
Der
in jedem Bit einer gegebenen Abdeckmaske gespeicherte Wert zeigt
an, ob der Bildpunktabtastwert, der diesem Bit zugewiesen ist, mit
dem Fragmenttripel verbunden ist, das der gegebenen Abdeckmaske
zugewiesen ist. Wenn ein Abtastwert mit einem Fragmenttripel verbunden
ist, bedeutet das, dass das diesem Fragmenttripel zugewiesene 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 verbindet
die Unterbildpunktabtastwerte S2 bis S4 mit dem gespeicherten Fragmenttripel 310,
das anzeigt, dass das Fragment 302 an diesen Abtastpunkten
S2 bis 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 gegebenen 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, verbindet eine
dritte Abdeckmaske 624 den Unterbildpunktabtastwert S4
mit dem dritten Fragmenttripel 410, das in dem Bildpunktspeicher 314 gespeichert
ist. Die Zuweisung 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 verbunden.
Für das
folgende Darstellungsbeispiel wird das dritte Fragment 400 als
durchsichtig behandelt. (Man beachte, 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" auf „0 1 1 0" übergehen
würde,
um anzuzeigen, dass das Fragment 400 das Fragment 302 in
dem Unterbildpunktabtastwert S4 verdeckt.)
-
Da
das dritte Fragment 400 transparent ist, verbinden 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 bis S4 mit einer Mehrzahl gespeicherter Fragmenttripel verbunden
werden, wobei ein Fragment opak und jedes andere Fragment durchsichtig
ist. In der Tat können
alle gespeicherten Fragmentwerte durchsichtig sein, wenn ein Standardhintergrundfragmentwert
verwendet wird.
-
Daher
kann die hier beschriebene verbesserte A-Puffertechnik von der Reihenfolge
unabhängige
Transparenz unterstützen,
das heißt,
dass das System 100 Primitiven des Bilds 132 nicht
zu partitionieren braucht, um dem Grafikbeschleuniger 108 transparente
Fragmente zu präsentieren,
nachdem alle opaken Fragmente präsentiert
sind, und das System 100 braucht auch nicht transparente
Primitiven zu sortieren, um transparente Fragmente in Z-Tiefenreihenfolge
zu präsentieren.
-
Zum
Berechnen der Farbe des Bildpunkts 300 wird eine Farbe
zuerst für
jeden Unterbildpunktabtastwert S1 bis S4 berechnet, und dann werden die
berechneten Farben kombiniert. Wenn ein Unterbildpunktabtastwert
nur mit einem opaken Fragment verbunden ist, wie zum Beispiel der
Abtastwert S1, ist die Farbe für
diesen Unterbildpunktabtastwert S1 die Farbe des zugewiesenen gespeicherten
Fragmentwerts 312.
-
Wenn
ein Unterbildpunktabtastwert, wie zum Beispiel der Abtastwert S4
mit zwei gespeicherten Fragmenttripeln 310, 410 verbunden
ist, eines 400 durchsichtig und das andere 302 opak,
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 sie von dem 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 bis 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 vier zusätzlichen
Unterbildpunktabtastwerte erfordert, dass eines der gespeicherte Fragmenttripel
mit einem dritten Fragmenttripel ersetzt wird, und dass das dritte
Fragmenttripel in dem Bildpunktspeicher zuletzt erscheint. Das Zuweisen von
Speicher für
ein drittes Fragmenttripel kann eine markante Verbesserung für acht Unterbildpunktabtastwerte
im Vergleich zum Speichern von zwei Fragmenttripeln ausmachen. Es
ist klar, dass man bewirken kann, dass sich die Antialiasing-Ergebnisse
den Ergebnissen des typischen Sparse-Supersampling nähern, wenn
mehr Fragmenttripel gespeichert werden, aber jedes zusätzliche
Fragmenttripel schmälert die
Speichereinsparungen, die durch die verbesserten Supersampling-Techniken
bereitgestellt werden.
-
7 stellt
ein Flussdiagramm 700 dar, das das Verfahren des Erzeugens
eines Bilds 132 anhand der vorliegenden Erfindung beschreibt.
Bei den ersten Schritten der Verarbeitung des Bilds 132 wird das
Bild 132 in Fragmente partitioniert. Beim Verarbeiten jedes
neuen Fragments bestimmt der Grafikbeschleuniger 108, ob
das neue Fragment an irgendeinem der Unterbildpunktabtastwerte S1
bis 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 bis S4 zugewiesen
ist (Schritt 702).
-
Hat
das neue Fragment für
einen beliebigen bedeckten Unterbildpunktabtastwert S1 bis S4 einen kleineren
Z-Tiefenwert als der Z-Tiefenwert eines gespeicherten Fragments,
befindet sich das neue Fragment vor dem gespeicherten Fragment und
ist daher sichtbar. Es besteht jedoch eine Ausnahme, wenn das neue
Fragment einen Alphawert von 0,0 hat. In diesem Fall ist das neue
Fragment komplett transparent. Der Grafikbeschleuniger 108 braucht
den Fragmentwert des neuen Fragments nicht zu speichern, denn das
neue Fragment ist in der Tat unsichtbar.
-
Hat
das neue Fragment stattdessen für
alle der bedeckten Unterbildpunktabtastwerte S1 bis S4 einen größeren Z-Tiefenwert als die
Z-Tiefenwerte, liegt das neue Fragment hinter einem oder mehreren der
gespeicherten Fragmente und kann unsichtbar sein. Liegt das neue
Fragment hinter opaken Vordergrundfragmenten, ist das neue Fragment
unsichtbar, und das Verarbeiten des neuen Fragments für den Bildpunkt 134 ist
abgeschlossen. Liegt das neue Fragment jedoch unmittelbar hinter
einem durchsichtigen Vordergrundfragment, kann das neue Fragment noch
gesehen werden.
-
Wenn
das neue Fragment an einem der bedeckten Unterbildpunktabtastwerte
sichtbar ist, macht der Grafikbeschleuniger 108 den Link
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 erhält
der Grafikbeschleuniger 108 Steuerbits aufrecht, um die Gültigkeit
jedes Index mitzuverfolgen, und macht jeden Index, der einen bedeckten
Unterbildpunktabtastwert mit einem bedeckten Fragment verbindet, ungültig. Die
Steuerbits können
den Grafikbeschleuniger 108 dazu führen, die Standardhintergrundfarbe zu
verwenden, wenn keine Fragmente einen Unterbildpunktabtastwert decken.
Bei der verbesserten A-Puffertechnik
bleiben die Bits in der Abdeckmaske, die jedem bedeckten Unterbildpunktabtastwert
zugewiesen ist, unverändert,
wenn das neue Fragment durchsichtig ist, und werden auf „0" gesetzt, wenn das
neue Fragment opak ist.
-
Dann
wird in Schritt 708 die Anzahl der Links gezählt, die
zu jedem Fragmenttripel zeigen. Bei der indexierten Sparse-Supersampling-Technik
zählt Schritt 708 die
Anzahl von Indexen, die mit diesem gespeicherten Fragmenttripel
verbunden 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 Links auf das Fragmenttripel zeigen. In diesem Fall kann ein
neues Fragmenttripel, das dem neuen Fragment zugewiesen ist, das
freie Fragmenttripel ersetzen.
-
Wenn
Schritt 714 feststellt, dass ein Fragmenttripel frei ist,
wird die neue Farbe, die dem neuen Fragment zugewiesen ist, in dem
freien Fragmenttripel gespeichert (Schritt 712). In Schritt 714 werden die
Links der Unterbildpunktab tastwerte, die von dem neuen Fragment
bedeckt werden, zu dem neuen Fragmenttripel gesetzt.
-
Stellt
Schritt 710 fest, dass keine Fragmenttripel frei sind,
wählt eine
Ersetzungsmethode, wie zum Beispiel die oben beschriebene Farbunterschiedtechnik
eines der gespeicherten Fragmenttripel zum Ersetzen aus (Schritt 716).
Das Ersetzen bedeutet das Ändern
der Farbe, Z-Tiefe und Matrizenwerte, die in dem ausgewählten Fragmenttripel
gespeichert sind, auf die Farb-, Z-Tiefen- und Matrizenwerte des
neuen Fragmenttripels.
-
In
Schritt 718 wird die neue Farbe zu dem ausgewählten Fragmenttripel
geschrieben. Die Links, 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 Links zugewiesen sind, dadurch der neuen Farbe zugewiesen.
Diese Links, die den Unterbildpunktabtastwerten entsprechen, die
durch das neue Fragment bedeckt werden, werden gesetzt, um auf die
neue Farbe zu zeigen (Schritt 714).
-
In
Schritt 720 wird Bildpunktfarbe aus den Unterbildpunktabtastwerten
wie oben in Zusammenhang mit den 6A bis 6D beschrieben
berechnet. Die Links, die den Unterbildpunktabtastwerten S1 bis
S4 zugewiesen sind, zeigen auf die gespeicherten Farben, die erzeugt
werden, um die Farbe des Bildpunkts 134 zu erzeugen. Die
Bildpunktfarbe kann sich daher 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, sind die Bildpunkte
zur Anzeige bereit (Schritt 724).
-
In 7 berechnet
ein alternatives Verfahren zum Erzeugen eines Bilds die Farbe des
Bildpunkts in Schritt 720',
gestrichelt dargestellt, bevor es bestimmt, ob es neue Fragmenttripel
gibt, die verfügbar
sind, um in ihnen den neuen Fragmentwert zu speichern, der dem neuen
Fragment zugewiesen ist. Die existierenden Farben, die in den Fragmenttripeln gespeichert
sind, und der neue Fragmentfarbwert kombinieren sich und ergeben
die Bildpunktfarbe. Der Effekt besteht darin, die Farbe zu berechnen,
als wäre
ein zusätzliches
Tripel verfügbar.
-
Nach
dem Berechnen der Bildpunktfarbe in Schritt 720 kann das
alternative Verfahren dann eine existierende gespeicherte Farbe
mit dem neuen Fragmenttripel wie oben in Zusammenhang mit den Schritten 716 bis 718 beschrieben
ersetzen. Wenn jedes Fragment, das nach diesem neuen Fragment verarbeitet
wird, nicht zu einer neuen Berechnung der Bildpunktfarbe führt, gehen
trotz des Ersetzens keine Farbdaten verloren.
-
Natürlich sind
die oben beschriebenen Ausführungsformen
Darstellungen von Konzepten der Erfindung. Verschiedene andere Änderungen
und Modifikationen können
vom Fachmann innerhalb des Geltungsbereichs der anliegenden Patentansprüche durchgeführt werden.