-
Die vorliegende Erfindung betrifft das Texturieren und
Schattieren von dreidimensionalen Bildern zur Anzeige auf
einem Bildschirm.
Hintergrund der Erfindung
-
Das am häufigsten von kommerziellen Systemen
angewendete Verfahren zur Erzeugung texturierter und
schattierter dreidimensionaler Echtzeitbilder arbeitet mit
einem Z-Puffer-System. Dies ist einer der einfachsten, in
Software oder Hardware zu implementierender Sichtflächen-
Algorithmen, der von Unternehmen wie Silicon Graphics,
Evens & Sutherland und Hewlett Packard eingesetzt wird.
-
Er setzt nicht nur einen Rahmenpuffer voraus, in dem
Farbwerte gespeichert werden, sondern auch einen Z-Puffer
mit der gleichen Anzahl von Einträgen, in dem ein z-Wert zu
jedem Bildpunkt gespeichert wird. Polygone, normalerweise
Dreiecke, werden in willkürlicher Reihenfolge in den
Rahmenpuffer übertragen. Ist der Polygonpunkt während der
Scan-Konversion nicht weiter vom Betrachter entfernt als
der bereits im Puffer befindliche, dann wird die
texturierte und schattierte Farbe des neuen Punktes
ausgewertet und der z-Wert ersetzt den alten Wert. Es ist
keine Vorsortierung notwendig und es sind keine Objekt-
Objekt-Vergleiche erforderlich.
-
Der Begriff "Texturabbildung" bezieht sich auf den
Prozess der Umwandlung einer zweidimensionalen
Bildpunktanordnung in eine andere zweidimensionale
Bildpunktanordnung. Die Umwandlung kann in jeder beliebigen
Art und Weise erfolgen, in diesem Dokument wird jedoch die
perspektivische Abbildung betrachtet. Bei der
3 perspektivischen Abbildung wird effektiv eine
zweidimensionale Anordnung von Bildpunkten genommen,
rotiert und in 3D umgesetzt und anschließend zur Anzeige
auf eine z = n Ebene projiziert.
-
Die Texturabbildung kommt in Computergraphiken in dem
Versuch zum Einsatz, das Oberflächendetail wirklicher
Objekte zu simulieren. Mit der perspektivischen Abbildung
kann ein Bild (z. B. die Oberfläche von Holz) auf ein
dreidimensionales Objekt (z. B. einen Tisch) gelegt werden,
so dass der Tisch wie Holzoptik aussieht.
-
Die Gleichung zur perspektivischen Abbildung lautet
wie folgt:
-
'u' und 'v' sind die 2D-Koordinaten im Texturraum.
-
'x' und 'y' sind die 2D-Koordinaten im Bildschirmraum.
-
a', 'b', 'c', 'd', 'e' und 'f' sind die im
-
Abbildungsprozess verwendeten Koeffizienten.
-
Das Abtasten eines Signals mit Frequenzen über der
Hälfte der Abtastrate führt zum Alias-Effekt. Die
Texturabbildung ist ein Wiederabtastprozess, der leicht zum
Alias-Effekt führen kann. Zur Erzeugung eines
texturabgebildeten Bildes, das nicht zurückfaltet, müssen
bei dem Bild im Texturraum die niedrigen Frequenzanteile
auf die Hälfte der Abtastrate der Abbildung herausgefiltert
werden. Kompliziert wird die Situation dadurch, dass die
Abtastrate je nach Position im Bildschirmraum variieren
kann.
-
Zur korrekten Filterung des Bildes ist ein großer
Verarbeitungsaufwand erforderlich. Es gibt viele
Möglichkeiten einer Annäherung an die korrekte Filterung
mit mathematisch einfacheren Operationen. Das einfachste
Verfahren ist die MIP-Abbildung, wobei MIP für MULTUM IN
PARVO steht.
-
Die MIP-Abbildung setzt eine Vorverarbeitungsphase
voraus, bei der eine im Speicher gespeicherte
Texturabbildung gefiltert und auf die Hälfte der Auflösung
dezimiert wird. Dieser Vorgang wird so lange wiederholt,
bis das resultierende Bild eine Größe von 1 Bildpunkt hat
(dies setzt eine quadratische Textur und eine Zweierpotenz
voraus). Fig. 1 zeigt ein Beispiel einer Backsteintextur
mit einer Auflösung von 128 · 128 und die zugehörigen
niedrigeren MIP-Map-Ebenen.
-
Eine MIP-Map kann man sich als eine Pyramide von
Bildern vorstellen. Auf die MiP-Map wird über die 3
Variablen 'u', 'v' und 'D' zugegriffen. Die Variablen 'u'
und 'v' sind die Koordinaten des Bildpunktes im Texturraum,
der einem Antialiasing (Bildglättung) unterzogen werden
muss. Die Variable 'D' ist ein Maß für den Filterungsbedarf
des Bildpunktes, d. h. in welcher Höhe der Pyramide er sich
befinden muss. Der Wert D = 1 bedeutet, dass das
Vollauflösungsbild verwendet wird. Der Wert D = 2 bedeutet,
dass das Halbauflösungsbild verwendet wird, usw. Sind 'D'-
Werte keine Zweierpotenzen, dann wird eine Mischung der
beiden nächsten Mip-Map-Ebenen unter Verwendung von
linearer Interpolation auf gut bekannte Weise berechnet.
-
Im Idealfall ist 'D' die Quadratwurzel des Bereichs,
den der Bildschirmbildpunkt abdeckt, wenn er in Texturraum
umgewandelt wird. Leider ist eine Berechnung auf Pixel-für-
Pixel-Basis äußerst kostspielig.
-
Ein Ansatz auf der Basis einer solchen Bildpyramide
wird z. B. in der EP-A-0 438 194 und der EP-A-0 438 195
gezeigt, wonach Texturinformationen in einer
Pyramidenstruktur gespeichert werden, die die gleichen
Muster auf verschiedenen Auflösungsebenen repräsentiert.
-
Die EP-A-0 438 194 beschreibt insbesondere einen
Textur-Adresskonverter zur Kombination einer Grundadresse
und einer linearen Versatzadresse, wobei letztere von der
Breite (in U-Richtung) und der Pyramidenebene der
gespeicherten Texel-Abbildung abhängig ist. Der Textur-
Adresskonverter ermöglicht daher einen simultanen Zugriff
auf Texel-Werte für benachbarte Ebenen der
pyramidenförmigen Texturinformationen. Ferner ist eine
Mehrzahl von (n+1) parallel adressierten Speichern
vorgesehen, so dass, wenn eine Interpolation einer Mehrzahl
von Texel-Werten auf der gleichen Pyramidenebene für
Antialiasing-Zwecke erforderlich ist, auf die genannte
Mehrzahl von Texel-Werten simultan zugegriffen werden kann.
Die EP-A-0 438 195 befasst sich vor allem mit der Art und
Weise, in der Texturdaten von zwei verschiedenen Ebenen der
Pyramide linear interpoliert werden sollen.
-
Die EP-A-0 447 227 beschreibt ein Verfahren und eine
Vorrichtung zum Downsampling von Originaltexturabbildungen,
die in einem Rahmenpuffer gespeichert sind, mit Hilfe eines
asymmetrischen Filters, wodurch Alias-Effekt und Unschärfe
der Textur optimiert werden.
-
P. S. Heckbert (Comm ACM 18(6) Juni 1975) schlug die
Verwendung der folgenden Näherungsgleichung für 'D' vor:
-
D² = MAX = du²/dx + dv²/dy , du²/dy + dv²/dy
-
Obschon dieses Verfahren weitaus einfacher als das
Idealverfahren ist, setzt es noch immer eine Quadratwurzel
und zwei zusätzliche Abbildungen pro Bildpunkt voraus.
-
Schattierung ist ein Begriff, der in der
Computergraphik Anwendung findet und sich auf einen Teil
des Prozesses zur Auswertung der Farbe einer Oberfläche in
einer speziellen Bildschirmposition bezieht. Wenn eine
Oberfläche schattiert ist, dann werden die Position,
Orientierung und Charakteristiken der Oberfläche in der
Modellierung verwendet, wie eine Lichtquelle mit dieser
Oberfläche zusammenwirkt.
-
Der Realismus von computergenerierten Bildern ist
erheblich von der Qualität dieses Beleuchtungsmodells
abhängig. Leider ist ein genaues Beleuchtungsmodell für den
Gebrauch in einem Echtzeit-Bildaufbereitungssystem zu
kostspielig. Es ist daher notwendig, einen Kompromiss zu
schließen und Annäherungen in den Beleuchtungskalkulationen
zu verwenden.
-
Die geläufigste Form der Annäherung ist die diffuse
Schattierung bzw. Lambert-Schattierung, die das von matten
Materialkomponenten reflektierte Licht simuliert. Dies wird
in Fig. 2 und anhand der folgenden Gleichung illustriert:
-
LS(cosθ) wenn (cosθ)≤ 0
-
I(L, S, θ) = 0 wenn (cosθ)< 0
-
Fig. 2 zeigt einen vom Auge oder der Kamera
ausgehenden Lichtstrahl (der einen speziellen Bildschirm-
Bildpunkt passiert), der an einem bestimmten Punkt P auf
eine Fläche trifft. Sie zeigt außerdem den Vektor (die
Normale), der lotrecht zur Fläche (bei P) ist, sowie einen
Strahl von einer Lichtquelle zu P.
-
Die Gleichung gibt an, dass die Intensität (oder
Farbe) I der diffusen Beleuchtung bei P das Produkt der
Lichtintensität L, des diffusen Reflexionsvermögens der
Fläche S und des Kosinus des Winkels θ zwischen dem
Lichtstrahl und der Normalen ist.
-
Es kann davon ausgegangen werden, dass diese
Berechnung entweder für die gesamte Fläche konstant ist,
bekannt als Flachschattierung, oder auf unterschiedliche
Art und Weise über polygonale Facetten interpoliert werden
kann, um gekrümmte Flächen zu simulieren. Gouraud-
Schattierung (Comm ACM 18(60) S. 311-17, 1971) ist zum
Beispiel die lineare Interpolation der diffusen Farben über
die polygonalen Facetten.
-
Ein alternatives Interpolationsverfahren umfasst das
lineare Interpolieren der Flächennormalen in der obigen
Gleichung. Dieses Verfahren wurde von Bui Thuong Phong
(Comm ACM 18(6) Juni 1975) vorgeschlagen. Leider ist dieses
Rechenverfahren relativ kostspielig. Eine effektive
Annäherung wurde von Bishop und Weimer (Computer Graphics
20(4) S. 103-6, 1975) vorgeschlagen, die zweidimensionale
Taylorsche Reihenannäherungen verwendet. Diese Annäherungen
können mit Differenzgleichungen effizient ausgewertet
werden. Abgesehen von einem geringen Vorkalkulations-
Overhead kann der cos θ zum Preis von nur 2 Additionen pro
Bildpunkt genähert werden.
-
Das am nächstweitesten verbreitete Lichtmerkmal sind
Glanz- oder Spiegellichter. Hierbei handelt es sich um die
Reflexionen der Lichter in einer Szene. Spiegellichter
verleihen Oberflächen eine Spiegeloptik und werten den
Realismus von Bildern bedeutend auf. Sie werden zumeist
durch ein Verfahren genähert, dass ebenfalls von Bui Tuong
Phong beschrieben wurde und in Fig. 3 und anhand der
folgenden Gleichung illustriert wird.
-
LS(cosθ)n wenn (cosθ)≥ 0
-
I (L, S, θ, n) = 0 wenn (cosθ)< 0
-
Fig. 3 stellt einen vom Auge oder der Kamera
ausgehenden 'Lichtstrahl' dar, der einen bestimmten
Bildpunkt passiert und an einem bestimmten Punkt P auf eine
Fläche trifft. Anschließend wird er mit den üblichen
Spiegelwinkeln in die gezeigte Richtung reflektiert. Da
Flächen nicht vollkommen glatt sind, ist zu beachten, dass
davon ausgegangen wird, dass sich der reflektierte
Lichtstrahl etwas ausbreitet, was durch die Rauhigkeit der
Oberfläche bestimmt wird. Schließlich zeigt Fig. 3 auch
einen von einer Lichtquelle kommenden Strahl, der als
Spitzlicht erscheint. Je näher die Reflexionsrichtung zur
Lichtquelle liegt, desto heller erscheint das Spitzlicht.
-
Die Gleichung beschreibt die Intensität des
Spitzlichtes I in Abhängigkeit von der Intensität des
Lichtes L, dem Reflexionsvermögen der Fläche S, dem Winkel
θ zwischen der Reflexionsrichtung und dem Licht und der
Glätte n der Fläche. Diese Funktion bedeutet, dass mit dem
Annähern der Reflexionsrichtung an die Lichtrichtung (d. h.
θ wird klein) die Intensität des Spitzlichtes einen
Höchstwert erreicht und in anderen Bereichen zurückgeht. Je
größer der Wert n ist, desto schneller ist der Rückgang,
desto kleiner ist das Spitzlicht und desto glatter
erscheint somit die Fläche. Damit diese Berechnung am
effektivsten ist, sollte sie als Gütefunktion verwendet
werden. Typische Werte für n liegen zwischen 1 und 1000.
-
Bishop und Weimer schlagen wieder die Berechnung eines
Teils der obigen Gleichung mit zweidimensionalen
Taylorschen Reihenannäherungen (siehe diffuse Schattierung)
und dann die Verwendung einer Nachschlagtabelle zur
Berechnung der Gütefunktion vor.
-
DRAM ist ein Akronym für Dynamic Random Access Memory
(dynamischer Direktzugriffsspeicher). Die Struktur des
'seitenstrukturierten' DRAM kann in Bänke, Seiten und Orte
unterteilt werden. Ein Ort ist das elementare Element des
adressierbaren Speichers. Eine Reihe aneinandergrenzender
Orte bildet eine Seite, und eine Reihe von Seiten bildet
eine Bank.
-
Fordert ein Gerät den Inhalt eines Ortes an, dann wird
die Seite geöffnet, die diesen Ort enthält, und die Daten
werden abgerufen. Wenn der nächste angeforderte Ort auf der
gleichen Seite liegt, dann braucht die Seite vor dem Abruf
der Daten nicht neu geöffnet zu werden. Da der Zeitaufwand
zum Öffnen einer Seite erheblich ist, geht die Anforderung
von Zufallsorten innerhalb einer Seite weit schneller
vonstatten, als die Anforderung von Zufallsorten außerhalb
einer Seite. Der Begriff 'Seitenwechsel' bezieht sich auf
das Abrufen des Inhalts eines Ortes aus einer Seite, die
nicht offen ist.
-
In einer Speicherkonfiguration mit mehreren Bänken ist
es möglich, gleichzeitig mehrere Seiten geöffnet zu halten.
Die Beschränkung besteht darin, dass sich die offenen
Seiten in unterschiedlichen Bänken befinden müssen.
-
SRAM ist ein Akronym für Static Random Access Memory
(statischer Direktzugriffsspeicher). Die Struktur des SRAM
ist einfacher als die des DRAM. Jeder Ort innerhalb des
Geräts kann innerhalb eines einzigen Taktzyklus abgerufen
werden. Der Nachteil dieser Einfachheit besteht darin, dass
die Dichte der Speicherelemente auf dem Silizium weit
geringer ist als die des DRAM. Folglich ist der SRAM
wesentlich teurer als der DRAM.
-
Der atmosphärische Effekt von Schleierbildung verleiht
einer generierten 3D-Szene eine Dimension von Realismus.
Sie ist nicht nur für neblig aussehende Szenen von Nutzen;
alle Szenen im Freien erfordern einen Schleier. Bei einer
Außenszene haben Objekte in der Ferne weniger vibrierende
Farben. Dieser Effekt entspricht der Schleierbildung; die
Objekte "grauen" mit der Entfernung "aus".
-
Wenn man davon ausgeht, dass die Dichte des Schleiers
nicht variiert, dann wird Licht pro Meter prozentual
gedämpft. Wird das Licht zum Beispiel um 1% pro Meter
gedämpft, dann liegt das Licht nach einem Meter bei 0,99
vom Ausgangswert. Nach zwei Metern beträgt das Licht
0,99 · 0,99 = 0,99² = 0,98 des Ausgangswertes. Nach 'n' Metern
liegt das Licht bei 0,99n des Ausgangswertes.
-
Ein Problem der Texturierung und Schattierung in
Verbindung mit einem Z-Pufferungssystem besteht darin, dass
die Farbe jedes Bildschirmbildpunktes möglicherweise viele
Male ausgewertet wird. Das liegt daran, dass die
Oberflächen willkürlich verarbeitet werden und sich die dem
Auge am nächsten liegende Oberfläche während der
Szenenverarbeitung möglicherweise häufig ändert.
-
Eine verschobene Texturierungs- und
Schattierungsarchitektur gemäß einem Aspekt der
vorliegenden Erfindung schließt die überflüssige
Kalkulation aus, indem nur eine einzige Farbe für jeden
Bildschirmbildpunkt ausgewertet wird. Jede Oberfläche
innerhalb einer Szene weist ein damit verbundenes
einmaliges 'Tag' auf. Zur Verarbeitung eines Bildpunktes
wird die verdeckte Fläche entfernt, so dass das Tag der am
nächsten zu diesem Bildpunkt gelegenen Fläche berechnet
wird. Dieser Tag-Wert wird dazu verwendet, die Befehle für
eine korrekte Texturierung und Schattierung dieses
Bildpunktes abzurufen.
-
Die im vorliegenden Dokument beschriebene und in den
beiliegenden Ansprüchen dargelegte Ausgestaltung stellt
eine äußerst effiziente und optimierte Architektur bereit,
die sich vor allem für Systeme eignet, die eine verschobene
Texturierung und Schattierung erfordern. Für ein komplexes
System wie das hierin beschriebene ist es sehr wichtig
sicherzustellen, dass behutsam der bestmögliche Ausgleich
zwischen Komplexität (Hardwaregröße/Siliziumfläche) und
Funktionalität erreicht wird. Das bedeutet, dass die
Systemarchitektur insgesamt, einschließlich Interaktionen
zwischen Hauptblöcken, sowie Einzelheiten der in jedem
Block angewendeten detaillierten Methoden, sorgfältig
konzeptgemäß entworfen werden muss. Besonders wichtig sind:
-
1. Datenorganisations- und Speicherarchitekturen, die
eine Minimierung von Engpässen gewährleisten;
-
2. Aufteilung von Ressourcen hinsichtlich verschiedener
Funktionsblöcke, Cache-Speicher-Erfordernisse und deren
Interaktion;
-
3. Komplexitätsniveaus im Sinne nummerischer Präzision
und des in dem Verfahren zur Implementierung der in jedem
Block benötigten Funktionen verwendeten Annäherungsgrades;
-
4. Unterstützung von angemessenen Flexibilitätsniveaus
innerhalb des Hardware-/Silizium-Budgets.
-
Die hierin beschriebene Ausgestaltung setzt
sorgfältige Algorithmus- und Simulationsanalysen ein, um
den richtigen Ausgleich zwischen den obigen Punkten zu
finden.
-
Einer der geschwindigkeitsbestimmenden Schritte eines
Systems zur MIP-Abbildung ist das Abrufen der
Texturbildpunkte aus dem Speicher. Um die Bandbreite hoch
zu halten, setzen einige Ausführungen einen Schnell-SRAM
ein. Eine solche Lösung kann zwar die erforderliche
Leistung erbringen, doch sind ihre Kosten dafür zu hoch.
-
Die gemäß einer bevorzugten Ausgestaltung der
Erfindung vorgeschlagene Architektur speichert die MIP-MAP-
Daten in einem seitenstrukturierten DRAM. Für den höchsten
Datendurchsatz [*1] muss die Anzahl von Seitenwechsel auf
ein Minimum reduziert werden. Die einfachste Methode zur
Speicherung einer MIP-Map wäre es, die D-Ebenen
aneinandergrenzend anzuordnen und die Bildpunkte innerhalb
der Abbildungen in Scanfolge zu speichern. Aufgrund der
Zugriffsart auf die MIP-Maps würde diese Speichermethode
einen Seitenwechsel bei fast jedem Zugriff verursachen.
Eine angemessene Speicherstruktur optimiert die Anzahl von
Seitenwechseln.
-
Die Koeffizienten der oben beschriebenen
Texturierungsgleichung sind potentiell unbeschränkt. Selbst
wenn sinnvolle Beschränkungen auferlegt sind, ist ein
großer Wertebereich erforderlich. Eine Implementierung der
Gleichung mit reiner Festpunktarithmetik würde
Präzisionsmultiplikatoren und -divisoren erfordern. Eine
solche Hardware wäre zu umfangreich und langsam, was sich
auf den Preis und die Leistung des Systems auswirken würde.
Gemäß einem anderen Aspekt der Erfindung wird eine Mischung
aus Gleitpunkt- und Festpunktverfahren beschrieben, die
zwei Vorzüge hat. Zum einen kann die Größe der
Multiplikatoren und Divisoren verringert werden, und zum
zweiten wird die Komplexität der Implementierung einer
völligen Gleitpunktarithmetik vermieden.
-
Die Texturabbildungsgleichung setzt eine Division pro
Bildpunkt voraus. Die meisten Hardware-
Divisionsarchitekturen wenden ein schrittweises
Annäherungsverfahren an, das Iterationen bis zur benötigten
Genauigkeit erfordert. Diese Iteration muss zeitlich
(mehrere Taktzyklen) oder räumlich (Siliziumfläche)
erfolgen. Gemäß einem weiteren Aspekt der Erfindung werden
ein neues Verfahren und eine neue Architektur zur
Berechnung eines Kehrwertes auf die erforderliche
Genauigkeit ohne eine schrittweise Annäherung beschrieben.
-
Die Variable 'D' ist ein Maß für den Filterungsbedarf
eines Texturbildpunktes. Heckberts Annäherung an 'D' ist
rechnerisch recht aufwendig und erfordert eine
Quadratwurzel sowie zwei zusätzliche Abbildungen pro
Bildpunkt. Es wird ein neues, einfacheres Verfahren zur
Berechnung von 'D' beschrieben.
-
Das Abrufen von Parametern für den Texturierungs- und
Schattierungsprozess wirkt sich auf die Geschwindigkeit
aus, mit der die Bildpunkte verarbeitet werden können. Die
Reihenfolge, in der die Parameter benötigt werden, ist
nicht völlig willkürlich, und es kann ein Referenzort
genutzt werden. Die beschriebene Architektur beinhaltet
einen Parameter-Cachespeicher, der die Leistung der
Gesamtkonstruktion wesentlich erhöht.
-
Zur Steuerung der Größenintensität eines
Spiegellichtes wird im allgemeinen eine Gütefunktion
verwendet. Deren Implementation kann kostspielig sein -
zwei Möglichkeiten sind eine Annäherung durch eine große
ROM-Nachschlagtabelle oder eine explizite Implementierung
einer genauen Gütefunktion. Da die Spitzlichtgleichung nur
eine Näherungsgleichung ist, muss die Funktion keine
vollkommen akkurate Gütefunktion sein.
-
Wenn man davon ausgeht, dass ein Verfahren zum
Berechnen von oder Annähern an cos θ existiert, dann
besteht die Gütefunktion lediglich in der folgenden
Berechnung:
-
xn wobei 0 ≤ · ≤ 1
-
Es ist außerdem nicht notwendig, eine Feinkontrolle
über die Granularität von n zu haben, ein paar ganzzahlige
Werte reichen aus.
-
Unter der Voraussetzung, dass
-
(1-y)2n = (1-2y)2n-1
-
und y ist klein, wird die folgende Näherungsgleichung zum
Anheben von x auf eine Potenz n verwendet, wenn x innerhalb
des obigen Bereichs liegt.
-
xn = (1-max(1, (1-x) · 2k))²
-
wobei k der ganzzahlige Teil von (log&sub2;n)-1 ist. Der
Wert k ersetzt effektiv den Wert n als ein Teil der
Oberflächeneigenschaften.
-
Die Durchführung von zwei Substraktionen ist relativ
unaufwendig. Das Multiplizieren eines Wertes mit 2k in
Binärdarstellung ist lediglich eine Linksverschiebung um k
Stellen, und die Max.-Berechnung ist ebenfalls eine
belanglose Operation. Die Quadratoperation ist dann eine
Multiplikation eines Wertes mit sich selbst.
-
Das Verfahren ist für Hardware- und Firmware-
Implementierungen anwendbar.
-
Zum Kalkulieren des Dämpfungsfaktors beim Verschleiern
einer Szene muss die Dichte des Schleiers auf die Potenz
der Entfernung zwischen dem Objekt und dem Betrachter
erhöht werden. Es wird ein effizientes Verfahren zum Nähern
dieser Funktion beschrieben.
-
Die verschiedenen Aspekte der Erfindung werden in den
beiliegenden Ansprüchen definiert, auf die nachfolgend
Bezug genommen werden sollte.
-
Bevorzugte Ausgestaltungen der Erfindung werden
nachfolgend ausführlich beispielhaft unter Bezugnahme auf
die Begleitzeichnungen beschrieben. Dabei zeigt:
-
Fig. 1 verschiedene Auflösungen von Mip-Map-Daten;
-
Fig. 2 ein Diagramm einer diffusen Schattierung;
-
Fig. 3 ein Spiegellichterdiagramm;
-
Fig. 4 ein Blockdiagramm der zum Schattieren
eingesetzten Systemarchitektur;
-
Fig. 5a) und b) einen Vergleich zwischen dem
konventionellen Scannen von Speicheradressen und dem
Scannen mit verschachtelten Adressenbits;
-
Fig. 6 die Art und Weise, in der die Bits tatsächlich
verschachtelt sind;
-
Fig. 7 ausführlicher die Reihenfolge, in der
physikalische Speicherorte von den verschachtelten
Adressenbits adressiert werden;
-
Fig. 8 das Speichern von einem Satz Mip-Map-Daten in
zwei Speicherbänken;
-
Fig. 9 die Speicherung von zwei Sätzen von Mip-Map-
Daten in zwei Speicherbänken;
-
Fig. 10 ein Blockdiagramm zur Implementierung der
Verschleierungsgütefunktion;
-
Fig. 11 eine ausführliche Implementierung von Fig. 4;
-
und
-
Fig. 12 ein Blockdiagramm einer verbesserten Schaltung
zur Durchführung einer arithmetischen Division.
-
Fig. 4 zeigt eine schematische Darstellung des
Hauptdatenstroms durch das System.
-
Der Eingang in das System umfasst eine 'x, y'-
Koordinate, einen Tag und optionale 'bildpunktspezifische
Daten' des Typs, der mit dem in unserer britischen
Patentanmeldung Nr. 9414834.3 beschriebenen System
generiert werden kann. Die eingehenden Bildpunktdaten
werden in 'Scanfolge' oder 'Fliesenfolge' empfangen. Scan-
und Fliesenfolge sind in Fig. 5 dargestellt.
-
Ein Vorteil des Empfangs der Daten in 'Fliesenfolge'
besteht darin, dass lokale Bildpunkte in dem Bild enger
zusammen übertragen werden als bei der 'Scanfolget'. Der
Referenzort verbessert die Leistung des Parameter-Cache-
Speichers.
-
Das Tag ist, wie oben erläutert, ein eindeutiger
Kenner, der mit jeder potentiell sichtbaren Oberfläche in
der Szene verbunden ist.
-
Die 'bildpunktspezifischen Daten' sind Attribute des
Bildpunktes, die außerhalb des Systems ausgewertet wurden.
Diese Attribute werden in der Auswertung der Bildpunktfarbe
verwendet. In dem in der Patentanmeldung "Shading Three-
Dimensional Images" (Schattieren von dreidimensionalen
Bildern - Anmeldung Nr. 9414834.3) beschriebenen System
sind zum Beispiel jedem Bildpunkt Daten zugeordnet, die
beschreiben, ob ein Schatten auf ihn geworfen wird. Diese
Informationen können bei der Auswertung der Bildpunktfarbe
berücksichtigt werden.
-
Das Bildpunkt-Tag wird als Index für einen
Parameterspeicher 2 verwendet. Hier werden die Parameter
gespeichert, die die bei jedem Bildpunkt sichtbare Fläche
definieren. Die bei der indexierten Position gespeicherten
Daten werden in der Auswertung der Pixelfarbe verwendet
(z. B. die Koeffizienten der Texturabbildungsgleichung).
-
Tritt ein Tag an mehr als einer Bildpunktposition auf,
dann werden die mit diesem Tag verbundenen Daten
möglicherweise öfter benötigt, da mehrere Bildpunkte zur
Anzeige der gleichen sichtbaren Fläche verwendet werden. Es
ist daher möglich, die Parameterabrufleistung zu erhöhen,
indem ein Parameter-Cache-Speicher 4 in den Datenpfad
eingefügt wird. In Simulationen erbrachte ein
wechselseitiger satzadressierter Cache-Speicher das beste
Verhältnis zwischen Komplexität und Leistung.
-
Der Texturspeicher 6 besteht aus einer Reihe von DRAM-
Bänken, die Mip-Map-Daten enthalten. Wenn die 'u, v'-
Koordinate des Eingabebildpunkts ausgewertet ist, werden
die zugehörigen Texel (elementare Bereiche im
Texturspeicher) vom Texturspeicher abgerufen.
-
Die Texturabbildungsgleichung ist in zwei Stufen
unterteilt, eine Vorkalkulations- und eine Iterationsstufe
[*2]. In der Vorkalkulationseinheit 8 werden die Parameter
abgerufen; anschließend werden 'ax + by + c' 'dx + ey + f' und
'px + qy + r' ausgewertet. Außerdem zählt die Einheit, wie
viele aneinandergrenzende Bildpunkte denselben Tag-Wert
gemeinsam benutzen. Diese Zahl wird zusammen mit den obigen
Werten zur Texturiterationseinheit 10 übertragen.
-
Die Texturiterationseinheit 10 nimmt die Werte von der
Vorkalkulationseinheit 8 und führt die beiden Divisionen
durch, womit die 'u, v'-Auswertung abgeschlossen wird. Ist
der Zahlenwert aus der Vorkalkulation größer als 0, dann
werden die Differenzen zwischen dem aktuellen und dem
nächsten Bildpunkt (d. h. 'a', 'd' und 'p') zu den
vorkalkulierten Werten ('ax + by + c', 'dx + ey + f' und 'px + qy + r')
addiert und die beiden Divisionen werden wiederholt. Der
Schritt wird so oft wiederholt, wie es von dem 'Zahlenwert'
vorgegeben wird.
-
Wenn die Farbe von der Texturiterationseinheit
berechnet ist, wird sie zur Schattierungseinheit 12
geleitet. Die Parameter, auf die der Bildpunkt-Tag zeigt,
sind nicht nur Texturierungskoeffizienten, sie enthalten
auch Informationen zur Verwendung durch die
Schattierungseinheit in der Auswertung der endgültigen
Bildpunktfarbe.
-
Die einfachste Form von Schattierungskalkulationen ist
von der 'x, y'-Bildschirmposition abhängig, wie zum Beispiel
die lineare und quadratische Schattierung.
-
Die lineare Schattierungsberechnung umfasst die
folgende Gleichung:
-
I (x, y) - T&sub2;x + T&sub1;y + T&sub0;
-
wobei I die Intensität (oder Farbe) ist, x und y die
Bildschirmbildpunktkoordinaten und T&sub2;, T&sub1;, T&sub0; Konstanten
sind. Sie kann wie die Texturierung in Vorkalkulations- und
Iterationsteile unterteilt werden.
-
Die Ausgabe wird auf den Bereich zwischen 0 und 1
beschränkt.
-
Die quadratische Schattierung erbringt eine bessere
Annäherung von Funktionen, jedoch mit einem größeren
Implementationskostenaufwand. Sie wird durch die folgende
Funktion implementiert:
-
I (x, y) = T&sub5;x² + T&sub4;xy + T&sub3;y² + T&sub2;x + T&sub1;y + T&sub0;
-
wobei I die Intensität (oder Farbe) ist, x und y die
Bildschirmbildpunktkoordinaten und T&sub5;, T&sub4;, T&sub3;, T&sub2;, T&sub1;, T&sub0;
Konstanten sind. Sie kann wie die Texturierung in
Vorkalkulations- und Iterationsteile unterteilt werden.
-
Die Ausgabe wird auf den Bereich zwischen 0 und 1
beschränkt.
-
Die quadratische Funktion kann mit der zuvor
erörterten Gütefunktion zu einer Potenz erhoben werden.
-
Wenn ein Bildpunkt texturiert und schattiert ist, wird
er in einen Rahmenspeicher ausgegeben. Der Bildpunkt wird
wiederum von dem Rahmenspeicher abgerufen und zu einem
Sichtgerät geschickt.
-
Fig. 11 zeigt eine stark optimierte Architektur, die
eine bevorzugte Ausgestaltung der Erfindung ist.
-
In das System eingegebene Daten 20 können von einer
beliebigen Vorrichtung zur Entfernung verdeckter Flächen
und Tiefensortierung stammen, die eher Tags als
Bildpunktdaten als Ausgang speichert. Ein solches System
ist in der britischen Patentanmeldung 9414834.3
beschrieben. Eingangsdaten umfassen ein für jede Oberfläche
in einer Szene eindeutiges Oberflächen-Tag, eine Block-X, Y-
Adresse, die die Startadresse des aktuellen Blocks von
Bildpunkten ist, die in das System eingegeben werden, einen
Tiefen-(Z)-Wert, der die Tiefe des gerade eingegebenen
Bildpunktes angibt, und schließlich die Schatten-Flags, die
angeben, ob sich der aktuelle Bildpunkt im Schatten von
einem oder mehreren Schattenlichtern befindet.
-
Die Oberflächen-Tags für einen bestimmten Block werden
lauflängencodiert als < Oberflächen-Tag: Spannweite (Anzahl
von Bildpunkten, für die die Parameter gleich bleiben)> und
in einem Tag-Puffer 22 gespeichert. Die anderen
Eingangsparameter werden in einem Eingabeblockpuffer 24 auf
Bildpunktbasis gespeichert.
-
Spannweiten werden mit einem Parameter-Cache-Speicher
26 verglichen. Es ist wünschenswert, die Blöcke in einem
Fliesenformat einzugeben, so dass der Cache-Speicher sowohl
vertikale als auch horizontale Kohärenz einer bestimmten
Szene nutzen kann. Der Assoziativitätsgrad des Cache-
Speichers wird individuellen Systemkosten/Leistung-
Abwägungen überlassen. Bei einem Cache-Treffer wird die
entsprechende Oberflächenparameterliste direkt zur
Vorkalkulationseinheit 8 geleitet. Im Falle eines Cache-
Fehltreffers wird die Parameterliste vom Systemspeicher
abgerufen, gespeichert und zur Vorkalkulationseinheit
gesendet.
-
Da der Cache-Speicher auf eine hohe Trefferquote
ausgelegt ist, fallen nachfolgende Fehltreffereinbußen für
die Systemspeicherbusbandbreite gering aus, wodurch kein
Bedarf für einen separaten Parameterspeicher besteht.
-
Die Vorkalkulationseinheit nimmt die Blockstartadresse
(von der die Spannweiten-Startadresse stammt) sowie die
aktuelle Parameterliste und berechnet die Ausgangswerte für
beliebige oder alle Textur-/Schattierungsiteratoren 28, 30,
die in der Parameterliste angegeben sind. Dabei
implementiert sie die oben beschriebenen Algorithmen für
Scanzeilentexturadresse und Schattierungsintensität. Sie
würde typischerweise aus einer Anordnung von
Multiplikationsakkumulatoren bestehen, die von einem
Mikrosequenzer gesteuert werden.
-
Der Vorkalkulationspuffer 32 lässt es zu, dass Cache-
Fehltreffereinbußen und Vorkalkulations-Overheads den
Textur- und Schattierungsiterationsprozess überlappen,
wodurch der Systemdurchsatz erhöht wird.
-
Der Texturiterator führt die hyperbolische
Interpolation in u, v und die MIP-Map-'D'-Kalkulation wie
unten beschrieben durch. Die Ausgänge des Texturiterators
umfassen Paare von Texturspeicher-6-Adressen, so dass
Texturwerte von den beiden entsprechenden MIP-Maps
abgerufen und zur Bildpunktverarbeitungseinheit 34
geschickt werden.
-
Die Anzahl von Schattierungsiteratoren 28, 30 ist von
dem für die Schattierungsfunktionen erforderlichen
Parallelitätsgrad abhängig. Zwei Einheiten würden zum
Beispiel eine simultane Auswertung einer globalen
Beleuchtungsintensität und einer Schattenlichtintensität
für sanft schattierte Oberflächen ermöglichen. Alternativ
könnten die Einheiten dazu verwendet werden, parallel die
diffusen und spiegelnden Komponenten einer schattierten
Phong-Oberfläche zu berechnen. Die Iteratoren
implementieren den nachstehend beschriebenen Algorithmus.
Die Ausgänge der Schattierungspipelines umfassen einen Satz
Intensitätswerte, die zur Bildpunktverarbeitungseinheit
weitergeleitet werden.
-
Die Verschleierungseinheit 36 nimmt die gespeicherten
Tiefenwerte vom Eingabeblockpuffer und implementiert eine
pseudo-exponentielle Verschleierungsfunktion, wie unten
beschrieben. Diese Werte werden zur
Bildpunktverarbeitungseinheit weitergeleitet, wo sie zum
Interpolieren zwischen einer kalkulierten Bildpunktfarbe
und einer Schleierfarbe verwendet werden.
-
Die Bildpunktverarbeitungseinheit 32 führt die
endgültige RGB-Farbauswertung jedes Bildschirmbildpunktes
aus. Eine Grundfarbe oder Texturfarbe wird eingegeben und
mit der bedingten Summe aller relevanten
Lichtquellenintensitätswerte von den
Schattierungsiteratoren multipliziert, die von den
Schatten-Bits vorgegeben werden. Spitzlichtversätze werden
ebenfalls addiert. Die Bildpunkte werden dann verschleiert
und zu einem Blockakkumulationspuffer 38 übertragen.
-
Die hierin beschriebene Architektur lässt die
Unterstützung einer Reihe fortschrittlicher
Leistungsmerkmale zu. Es ist zu beachten, dass hierzu ein
kompatibles System zur Entfernung verdeckter Flächen und
Tiefensortierung vorausgesetzt wird, wie das in der
britischen Patentanmeldung 9414843.3 beschriebene.
1) Lichtdurchlässige Flächen: Lichtdurchlässige Objekte
können mit einer Mehrdurchgangstechnik wiedergegeben
werden. Zunächst werden die lichtundurchlässigen Flächen in
einem Block verarbeitet und in den Akkumulationspuffer wie
oben beschrieben übertragen. Die lichtdurchlässigen Flächen
werden dann auf ähnliche Weise verarbeitet, mit der
Ausnahme, dass alle lichtdurchlässigen Flächen eine
'Alpha'-Komponente in ihrer Parameterliste oder ihren
Texturdaten enthalten, die dazu verwendet wird, eine
Mischung zwischen dem aktuellen Bildpunkt und dem
entsprechenden Hintergrundbildpunkt, der im
Akkumulationspuffer gespeichert ist, herzustellen. Wenn
alle lichtdurchlässigen Bildpunkte verarbeitet sind, wird
der Inhalt des Akkumulationspuffers aus einem Rahmenpuffer
hinausgeführt.
-
2) Antialiasing: Dies kann mit einer Mehrdurchgangstechnik
erreicht werden. Bei diesem Verfahren wird jeder Block
mehrere Male in Subbildpunktinkrementen in X und Y
verarbeitet. Die resultierenden Bildpunktfarben werden im
Blockakkumulationspuffer akkumuliert. Nach Abschluss der
Durchgänge werden die Bildpunkte durch die Anzahl der
Durchgänge dividiert und zu einem Rahmenpuffer geleitet.
-
3) Bewegungsunschärfe: Diese wird durch rechtzeitiges
Supersampling des zu verwaschenden Objekts und
anschließendes Mitteln der Proben mit dem zuvor
beschriebenen Blockakkumulationspuffer erreicht.
-
4) Weiche Schatten: Dieser Effekt kann mit einer
Mehrdurchgangstechnik simuliert werden, wobei die
Schattenlichtquellen zwischen den Durchgängen zum Flackern
gebracht und die Proben anschließend mit dem
Blockakkumulationspuffer wie in 2) beschrieben gemittelt
werden.
-
5) Scheinwerfereffekte: Dies ist der Effekt eines
Taschenlampenstrahls oder eines Scheinwerfers, der einen
Lichtpool auf einen Szenenbereich projiziert. Dies kann
durch eine geeignete Einstellung der Schatten-Bits
implementiert werden, so dass sowohl Schattenvolumen als
auch Lichtvolumen dargestellt werden können. Weiche Kanten
können wie oben beschrieben simuliert werden.
-
Das Problem in Verbindung mit einer Speicherung von
Texturabbildungen in Scanfolge und die resultierenden
Seitenwechselprobleme wurde bereits zuvor erwähnt.
Nachfolgend wird eine ausführlichere Erläuterung gegeben.
-
Beim Texturieren eines bestimmten
Bildschirmbildpunktes muss auf eine Texturabbildung
zugegriffen werden, um den benötigten Texturbildpunkt oder
Texel oder, im Falle einer MIP-Abbildung, eine Reihe von
Texel zu erhalten, der/die auf dem Bildschirmbildpunkt
dargestellt wird/werden.
-
Für den Zugriff auf den korrekten Texel im Speicher
muss die folgende Funktion
-
Texel address=Texture base address+Offset Fung(u. v)
-
berechnet werden, um den Ort des Texels zu finden.
-
Texture base address ist der Ausgangsort der bestimmten
Textur der MIP Map-Ebene im Texturspeicher, und u, v sind
die berechneten ganzzahligen Texturkoordinaten. Offset func
bildet die u, v-Koordinaten auf einem Versatz in der
Texturabbildung ab.
-
Werden Texturen in Scanzeilenfolge gespeichert, dann
lautet die Versatzfunktion:
-
offset fuc (u. v) = u + size · v
-
wobei "size" das u-Maß der Texturabbildung ist. Da die
Abmessungen von Texturabbildungen Zweierpotenzen sind, ist
die obige Multiplikation lediglich eine
Linksverschiebungsoperation in binärer Darstellung, und die
Addition ist einfach eine Verkettung von Bits. Die für eine
128 · 128 Texturabbildung resultierende Funktion ist in Fig.
6 in Scanfolge dargestellt. (Hinweis: vx bezieht sich auf
das x. Bit von v, wobei das niedrigstwertige Bit mit 0
nummeriert ist).
-
Die Problematik besteht hier darin, dass sich, sobald
sich der v-Index um irgendeinen Betrag ändert, der
resultierende Versatz drastisch ändert. Diese drastischen
Änderungen führen zu einer hohen Zahl von Seitenwechseln,
was sich nachteilig auf die Texturierungsleistung auswirkt.
Im allgemeinen ändern sich Texturkoordinaten allmählich,
JEDOCH können sie mit gleicher Wahrscheinlichkeit in u-
und/oder v-Richtung variieren.
-
Ein effizienteres Verfahren zur Anordnung der
Texturabbildung besteht darin, die u- und v-Indexbits zu
verschachteln. Ein solches Verfahren mit v&sub6; im
niedrigstwertigen Bit wird in Fig. 6. unter der optimierten
Funktion gezeigt. (Es ist auch möglich, mit dem U zu
beginnen).
-
Bei dieser Anordnung werden viele
nebeneinanderliegende Bildpunkte (in u- und in v-Richtung
nebeneinanderliegend) im Texturspeicher relativ eng
beieinander gehalten, so dass Seitenwechsel reduziert
werden. Fig. 7 zeigt die obere linke Ecke einer
Texturabbildung. Die Zahlen in jedem Bildpunkt stellen den
Versatz dar, bei dem die Bildpunkte gespeichert sind.
-
Diese Struktur wird am besten als Fraktal beschrieben.
Das Muster ist ein selbstähnliches rotiertes 'Z', d. h. eine
Zickzacklinie beginnt auf Bildpunktebene und setzt sich mit
zunehmend größeren Gruppen von Bildpunkten fort.
-
Ein weiteres Problem tritt mit den Mip-
Abbildungsanforderungen auf. Der Mip-Map-Prozess setzt für
jede Bildschirmbildpunktkalkulation gewöhnlich einen
Zugriff auf zwei benachbarte Ebenen der Mip-Map voraus.
Werden die Mip-Map-Ebenen aneinandergrenzend gespeichert,
dann liegt ein Bildpunktabruf von zwei Ebenen zu weit
auseinander, um innerhalb einer DRAM-Seite zu bleiben, so
dass bei jedem Bildpunktzugriff ein Seitenwechsel auftreten
würde.
-
Um diesen Overhead zu vermeiden, müssen DRAM-Bänke
verwendet werden. In einer Speicherkonfiguration mit
mehreren Bänken ist es möglich, stets mehrere Seiten
geöffnet zu halten. Die Einschränkung besteht darin, dass
sich die offenen Seiten in verschiedenen Bänken befinden
müssen. Werden aufeinanderfolgende Mip-Map-Ebenen in
separaten Bänken gespeichert, dann kommt es nicht bei jedem
Bildpunktabruf zu einem Seitenwechsel.
-
Zur weiteren Erläuterung wird die folgende
Bezeichnungskonvention verwendet. Die Mip-Map-Ebenen-
Nummerierung von '0' bis 0 bezieht [*2] sich auf die 1 · 1
Auflösungsabbildung, 1 bezieht sich auf eine 2 · 2 Abbildung
usw. Fig. 8 zeigt alle ungeradzahligen Mip-Map-Ebenen als
zusammenhängenden Block in einer Bank und alle
geradzahligen in einer anderen.
-
Die Anordnung stellt ein Problem dar, wenn weitere
Mip-Abbildungstexturen in den Speicher gegeben werden. Der
Speicherplatzbedarf in Bank Y beträgt ungefähr das 4fache
von dem der Bank X. Da die Bänke die gleiche Größe haben,
wird Bank Y lange vor Bank X voll sein. Dieses Problem kann
dadurch umgangen werden, dass die Speicherung der
ungeradzahligen Mip-Map-Ebenen zwischen den Bänken hin- und
hergeschaltet wird. Leider würden diese Anordnungen
separate Grundadressen für die ungeradzahligen und
geradzahligen Datenblöcke erfordern.
-
Eine bessere Lösung ist es, Mip-Map-Paare wie in Fig.
9 dargestellt zu verschachteln. Textur A hat ihre Abbildung
mit geringster Auflösung (1 · 1) an der Grundadresse in Bank
X. Die nächste Abbildung (2 · 2) befindet sich an der darauf
folgenden Adresse in Bank Y. Die 1 · 1-Abbildung von Textur
B befindet sich an der Grundadresse in Bank Y und ihre 2 · 2-
Abbildung an der darauf folgenden Adresse in Bank X.
-
Die oben beschriebene Texturabbildungsgleichung
erfordert 6 Multiplikationen, 6 Additionen und 2 Divisionen
für jeden texturierten Bildschirmbildpunkt. Zur Reduzierung
des Rechenaufwands wird eine Differenzgleichung verwendet.
-
Da der Bildpunkteingangsstrom in Scanfolge gesendet
wird, sind horizontale Bildpunktspannweiten vorhanden, die
gemeinsam dieselbe Texturierungsfunktion benutzen. Eine
Differenzgleichung in der X-Dimension würde den
Rechenaufwand innerhalb der Spannweite reduzieren.
-
Der Spannweitenanfang setzt die komplette Berechnung
voraus, nachfolgende Bildpunkte erfordern jedoch nur 3
Additionen und 2 Divisionen.
-
Die Architektur der Texturabbildungsberechnung ist in
zwei Einheiten unterteilt, eine Vorkalkulationseinheit und
eine Iterationseinheit. Die Vorkalkulationseinheit wertet
ax + by + c, dx + ey + f und px + qy + r aus. Die
Iterationseinheit führt die Division und die Addition von
'a', 'd' und 'p' durch.
-
Nach einer ausführlichen Untersuchung der sichtbaren
Effekte arithmetischer Präzision in verschiedenen Bereichen
der Texturierung wurde eine Mischung aus Gleitpunkt- und
Festpunktvetfahren am geeignetesten befunden.
-
Die Koeffizienten 'p', 'q' und 'r' sind ganze Zahlen;
-
bei der Auswertung von 'px + qy + r' ist daher nur eine
Multiplikation und Addition von ganzen Zahlen notwendig.
-
Die Koeffizienten 'a', 'b', 'c', 'd', e' und 'f'
benutzen gemeinsam einen einzelnen Zweierpotenzexponenten,
der zusammen mit dem Rest der Texturierungskoeffizienten
gespeichert wird. Die Auswertung von 'ax + by + c' und 'dx
+ ey + f' ist mit der von 'px + qy + r' identisch, mit der
Ausnahme, dass der Exponentenkoeffizient auch zur
Divisionseinheit übertragen wird.
-
Die Division findet anhand des Gleitpunktverfahrens
statt. Die ausgewerteten Terme 'ax + by + c', 'dx + ey + f'
und 'px + qy + r' werden in Gleitpunktzahlen mit einer
Mantisse und einem Zweierpotenzexponenten umgewandelt. Das
Ergebniss der Division wird dann zur Verwendung in der
Adressengeneration in eine ganze Zahl umgewandelt.
-
Die aktuelle Ausführung verwendet 16-Bit-Koeffizienten
und eine 14-Bit-Kehrwertmantisse.
-
Die beiden Divisionen umfassen einen einzelnen
Kehrwert und zwei Multiplikationen. In die Kehrwerteinheit
wird eine Festpunktzahl in der Größenordnung von 0,5 bis
0,9999 eingegeben, der Ausgang liegt zwischen 2 und 1.
-
Das geeigneteste Verfahren zur Durchführung dieser
Funktion schließt eine komprimierte Nachschlagtabelle ein.
Die Funktion muss auf 14 Bits genau sein. Das heißt, dass
0,5 als 0 · 2000 (hex) und 0,9999 als 0 · 3fff dargestellt
wird. Für die Speicherung von völlig unkomprimierten Daten
würden 8192 Orte von jeweils 14 Bits (14KB) benötigt. Das
oberste Bit des Kehrwertes kann entfernt werden, weil es
stets 1 ist. Dadurch wird die Speicherung auf 8192 Orte von
jeweils 13 Bits (13 KB) reduziert.
-
Beim Datenkomprimierungsverfahren wird das
Differential des Kehrwertes gespeichert. Ist der Operand
größer als 0,707, dann weicht der Kehrwert um 1 oder 0 ab.
Diese Differenzen benötigen daher nur 1 Speicherbit. Unter
0,707 weicht der Kehrwert um 2 oder 1 ab, so dass ebenfalls
eine 1-Bit-Speicherung erfolgen kann. Dieses
Komprimierungsverfahren würde den Speicherbedarf auf 1.375
KB reduzieren. In der folgenden Tabelle sind einige
Kehrwerte sowie die Differenzen dazwischen aufgeführt.
Ogerand Kehrwert Differenz
-
Zum Entkomprimieren der Daten werden die Differenzen
addiert. Zum Berechnen des Kehrwertes von 0 · 3FFB werden zum
Beispiel die Differenzbits für 0 · 3FFF bis 0 · 3FFB summiert
und dann mit 0 · 2000 addiert (1 + 0 + 1 + 0 + 0 · 2000 = 0 · 2002). Fällt
der Operand unter 0,707, dann kann die Differenz 2 oder 1
betragen. Diese Differenzen werden als einzelnes Bit
gespeichert, be der Summierung der Differenzen jedoch als
2 und 1 interpretiert.
-
Dieses Komprimierungs-/Entkomprimierungsverfahren ist
zur Implementierung in einer geringen Anzahl von Taktzyklen
unpraktisch, da eine große Anzahl von Summierungen benötigt
wird. Ein etwas weniger effizientes Komprimierungsverfahren
kann die Anzahl von Summierungen wesentlich reduzieren.
Jeder 32. Kehrwert wird zusammen mit den Differenzen der
dazwischenliegenden 31 Zahlen vollständig gespeichert. In
der folgenden Tabelle sind die ersten Einträge dieser Daten
aufgeführt.
-
Zur Ermittlung des Kehrwertes von 0 · 3FDA wird der
Operand beispielsweise zuerst auf die nächste Zahl
aufgerundet, der ein ganzer Kehrwert zugeordnet ist
(0 · 3FDF). Die Differenz zwischen diesen Werten ist die
Anzahl von zu addierenden Differenzen
(0 · 2010 + 1 + 0 + 1 + 0 + 1 = 0 · 2013).
-
Im Rahmen des vorgeschlagenen Verfahrens wird eine
Reihe von Grundwerten und Versätzen gespeichert. Der
eingehende Operand von 'n' Bits wird in zwei Teilen
betrachtet, als zwei separate Nummern:
-
'a' höchstwertige Bits (als Nummer K bezeichnet)
-
'b' niedrigstwertige Bits (als Nummer L bezeichnet)
-
Die Grundwerte werden von einem Festwertspeicher
gelesen, wobei K als die Adresse des ROM verwendet wird,
und die Versätze werden von einem anderen ROM (mit der
Bezeichnung "Delta ROM") an der gleichen Adresse gelesen.
-
Anschließend wird die Anzahl der 1er gezählt, die in
den ersten L Bits der Daten vom Delta ROM auftreten, so
dass der Versatz von diesem Grundwert erhalten wird, der
zum Grundwert addiert werden muss, um den Kehrwert zu
erhalten. Entspricht der Versatzwert dem obigen ersten
Fall, dann gilt folgendes:
-
(i) Versatz = (Summe der Anzahl von 1ern in den ersten L
Bits des Delta ROM)
-
Entspricht er dem obigen zweiten Fall, dann gilt
folgendes:
-
(ii) Versatz = (Summe der Anzahl von lern in den ersten L
Bits des Delta ROM + L; dieser zweite Fall berichtigt
effektiv den Wert vom Delta Rom, der 1 oder 2 darstellt,
wohingegen sie in binärer Darstellung als '0' oder '1'
dargestellt werden.)
-
Die Hardware-Implementierung ist in Fig. 12
dargestellt.
-
Der Wert px + qy + r (als "pqr-Produkt" dargestellt) wird
auf einen Wert zwischen 1,0 und 2,0 normalisiert (40). Die
Mantisse wird wie oben beschrieben in zwei Teilen
betrachtet, einem höchstwertigen und einem
niedrigstwertigen Teil. Der höchstwertige Teil wird als
eine Adresse für den Zugriff auf die ROMs 42, 44 verwendet.
-
Der niedrigstwertige Teil wird zum Generieren einer
Maske 46 verwendet, die mit dem Wert vom Delta ROM 44
logisch UND-verknüpft (48) wird. Dadurch werden die ersten
L Bits vom Delta ROM isoliert, damit sie gezählt (50)
werden können. Die Anzahl der gezählten 1er (aus der
Einheit kommend, errechnet durch Hinzuaddieren von 52 L
[*3]. Der korrekte Versatz wird dann von einem Vergleicher
gewählt, um die Ausgangszahl mit 2 zu vergleichen und das
entsprechende Ergebnis von Gleichung (i) oder (ii) zu
wählen.
-
Dieser Versatzwert wird dann zum Grundwert vom "Haupt-
ROM" addiert (56), um den Kehrwert des "pqr-Produktes" zu
erhalten.
-
Das Diagramm zeigt dann, wie die Gleichung:
-
vervollständigt wird, indem der Kehrwert von ax + by + c
("abc-Produkt") multipliziert (58) und dann entnormiert
(60) wird.
-
V wird auf ähnliche Weise mit dx + ey + f ("def-Produkt")
berechnet.
-
Um den Rechenaufwand zur Berechnung von 'D' zu
umgehen, kann das folgende, weniger präzise, aber
effizientere Verfahren angewendet werden:
-
'pz + qy + r' ist die untere Hälfte der
Texturabbildungsgleichung.
-
'n' ist eine Konstante, die vor der Wiedergabe ausgewertet
und mit den anderen Texturierungsparametern gespeichert
wird. Es gibt eine Reihe von Möglichkeiten zur Berechnung
von 'n', z. B.:
-
'a', 'b', 'c', 'd', 'e', 'f', 'p', 'q und 'r' sind
Texturabbildungskoeffizienten.
-
Gleichung 2 wertet 'D' unter Verwendung von Heckberts
Annäherung an die Bildpunktkoordinate (0.0) aus und gleicht
dann die Gleichung 1 an diesen Wert an. Dies ist keine
ideale Lösung, da die beste Annäherung von 'D' dort sein
sollte, wo die texturierte Oberfläche sichtbar ist. Ein
besseres Verfahren wäre es daher, Gleichung 1 der Heckbert-
Annäherung bei einer Bildpunktkoordinate der sichtbaren
Fläche anzugleichen.
-
In diesem Abschnitt wird eine Hardware-Implementation
der Gütefunktionsannäherung beschrieben, die in Fig. 10
dargestellt ist. Als Eingang wird ein Wert X, der im
Bereich 0 ≤ · ≤2 liegt, ausgedrückt in einer
Festpunktdarstellung, und eine kleine positive ganze Zahl
k genommen; der Ausgang ist ein Festpunktergebnis,
ebenfalls im Bereich 0 ≤ · ≤ 2.
-
Die Anzahl von Bits X (d. h. beim Eingang zur Funktion
bei Punkt A in dem Diagramm) würde von der benötigten
Konzentration von Spitzlichtern abhängig sein, würde jedoch
typischerweise etwa 16 Bits betragen. In dieser Erörterung
ist dies m.
-
Die Anzahl von k-Bits liegt typischerweise bei 3 oder
4 und ist ebenfalls abhängig von der Konzentration der
benötigten Spitzlichter. Dies wird als n bezeichnet.
-
Die Anzahl von Ergebnis-Bits würde von der benötigten
Genauigkeit abhängig sein. Es wird davon ausgegangen, dass
genau p
Ausgangsebits benötigt werden.
Schritte
-
1. Der Festpunkt X wird zunächst von einem konstanten
Festpunktwert 1 subtrahiert. Die Anzahl von Ausgangsbits
bleibt die gleiche wie der Eingang, d. h. m Bits.
-
2. Der Wert wird dann um k Positionen nach links
verschoben. Die Breite an Punkt B würde m + (2π - 1) Bits
betragen und Festpunktzahlen im Bereich zwischen 0 und 2n
darstellen.
-
3. Der Wert wird dann mit der MAX.-Funktion auf 1
begrenzt. Dies ist mit einer Untersuchung der oberen 2π
Bits, sofern eingestellt, verbunden; anschließend muss der
Wert größer als oder gleich eins sein. In diesem Fall kann
die Ausgabe auf einen Festpunkt 1,0 eingestellt werden. Ist
keines der oberen 2π Bits eingestellt, dann entspricht der
Ausgangswert dem Eingang. Je nach der Qualität des
benötigten Ergebnisses ist die Anzahl der von der MAX.-
Funktion ausgegebenen Bits, d. h. bei Punkt C, auf p oder
p + 1 Bits begrenzt. Die gewählten Bits sind die oberen p
oder p + 1 Bits des unteren m. Das heißt, der Wertausgang ist
immer noch eine Festpunktzahl im Bereich 0 ≤ · ≤ 1, aber
nur mit einer Präzision von p oder p + 1.
-
4. Je nach der Qualität des benötigten Ergebnisses ist
die Anzahl der von der MAX.-Funktion ausgegebenen Bits,
d. h. bei Punkt C, auf p oder p + 1 Bits begrenzt. Die
gewählten Bits sind die oberen p oder p + 1 Bits des unteren
m. Das heißt, der Wertausgang ist noch immer eine
Festpunktzahl im Bereich 0 ≤ · ≤ 1, allerdings nur mit
einer Präzision von p oder p + 1.
-
5. Der Wert wird dann von 1 im Festpunkformat
subtrahiert. Die Anzahl der Präzisionsbits ist noch immer
p oder p + 1.
-
6. Der Wert wird dann quadriert, indem er mit sich selbst
multipliziert wird. Je nach der Größe des Operanden, d. h.
p oder p + 1 Bits, wird dadurch ein Wert von p² oder (p + 1)²
Bits erhalten. In jedem Fall werden die oberen p Bits
genommen und als Ergebnis ausgegeben, wodurch ein
Festpunktwert im Bereich 0 ≤ Ergebnis ≤ 1 erhalten wird.
-
Die Schattierungshardware-Einheit ist der
Texturierungseinheit hinsichtlich Vorkalkulations- und
Iterationseinheiten nicht unähnlich, die standardmäßige
Vorwärtsdifferenzbildungstechniken sind. Nachfolgend werden
die drei Schattierungsweisen, flach, linear und
quadratisch, erörtert.
-
Im Rahmen der folgenden Erörterung werden die
Schattierungsfunktionen hinsichtlich x- und y-
Bildpunktpositionen beschrieben. Zwar können diese absolute
Bildschirmbildpunktpositionen sein, doch ist es weitaus
effektiver, sie in Bezug zum Zentrum der schattierten
Fläche zu setzen. Dabei wird die Präzision, die zur
Darstellung der verschiedenen, nachfolgend erörterten Tn-
Parameter benötigt wird, stark verringert.
-
Bei der Flachschattierung muss keine Vorkalkulation
oder Iteration durchgeführt werden, wobei der konstante
Wert entweder direkt verwendet oder mit den Ergebnissen der
Texturierungspipeline multipliziert wird.
-
Die lineare Schattierung setzt die folgende
Vorkalkulation voraus:
-
I (x, y) = T&sub2;x + T&sub1;y + T&sub0;
-
Beim Iterationsteil braucht dann nur wiederholt T&sub2;
addiert zu werden, da:
-
I (x+1, y) = T&sub2; (x+1) + T&sub1;y + T&sub0;
-
= I (x, y) + T&sub2;
-
Die quadratische Schattierung wird ebenfalls unter
Verwendung von Differenzgleichungen durchgeführt. Lautet
die quadratische Schattierungsgleichung wie folgt:
-
I (x, y) = T&sub5;X² + T&sub4;xy + T&sub3;y² + T&sub2;x + T&sub1;y + T&sub0;
-
dann wird die Differenz zwischen I zwischen Bildpunkt
(x, y) und Bildpunkt (x+1, y) erhalten durch:
-
ΔI (x, y) = I (x+1, y) - (x, y)
-
= T&sub2; (x+1)² - T&sub5;x² + T&sub4;(x+1)y - T&sub4;xy + T&sub2; (x+1) - T&sub2;x
-
= T&sub2;(2x+I) +T&sub4;y + T&sub2;
-
und die Differenz zwischen Differenzen bei Bildpunkt
xy ist folglich:
-
ΔΔ (x, y) = ΔI (x+1, y) - ΔI(x, y)
-
= T&sub5; (2(x+1) + 1I) + T&sub4;y + T&sub2; - T&sub5; (2x+1) -T&sub4;y - T&sub2;
-
= T&sub5;(2x+3) - T&sub5;(2x+1)
-
= 2T&sub5;
-
Die Vorkalkulationseinheit muss daher die erste
Ausgangs-I und den ersten Delta-Wert berechnen, d. h.:
-
I (x, y) = T&sub5;x² + T&sub4;xy + T&sub3;yy + T&sub2;x + T&sub1;y + T&sub0;
-
ΔI (X, Y) = T&sub5;(2x+1) + T&sub4;y + T&sub2;
-
Zur Durchführung der Iterationen wird der nächste I-
Wert erhalten, indem der Delta-Wert addiert wird, und ein
neuer Delta-Wert wird durch Addieren der Delta-Differenzen
generiert, d. h.:
-
I (x+1, y) = I (x, y) + ΔI (x, y)
-
und
-
ΔI(x+1, y) = ΔI(x, y) + ΔΔI(x, y)
-
= ΔI(x, y) + 2T&sub5;
-
Pro Bildpunkt brauchen nur 2 Additionen durchgeführt
zu werden. Es wird davon ausgegangen, dass die
Ausgangswerte Festpunktwerte sind, die auf den Bereich 0
bis 1 begrenzt sind. Bei der Berechnung von Spitzlichtern
kann dieser Wert wie oben beschrieben in die Gütefunktion
eingefügt werden.
-
Wie zuvor erwähnt wurde, wird der
Verschleierungsdämpfungsfaktor mit der folgenden Gleichung
berechnet.
-
A = dn
-
Wobei 'A' der Dämpfungsfaktor, 'd' die
Verschleierungsdichte und 'n' die Entfernung zwischen dem
wiedergegebenen Objekt und dem Betrachter ist. Diese
Gleichung kann wie folgt umgeschrieben werden:
-
A = 2n · log&sub2;(d)
-
Dadurch werden die Operationen zu einer
Multiplikations- und einer 2-x Funktion vereinfacht. Eine
Implementierung dieser Funktion als Nachschlagtabelle wäre
für die benötigte Genauigkeit viel zu umfangreich, so dass
ein Verfahren zur Komprimierung der Informationen
vorgeschlagen wird.
-
Die Funktion 2-x ist günstigerweise jede Zweierpotenz
'selbstähnlich'. 2-x zwischen 0 und 1 entspricht 2-x · 2
zwischen 1 und 2 und 2-x · 4 zwischen 2 und 3. Die Funktion
kann folglich mit einer Nachschlagtabelle mit der
Bruchzweierpotenz und einem arithmetischen Verschieber am
Ausgang implementiert werden. Nachfolgend wird ein
Eingangsbeispiel für die vorgeschlagene Funktion gegeben.
-
Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
22 23 24 25........
-
Bits 0 bis 6 sind der Index der Potenztabelle.
-
Bits 7 bis 9 werden zum Abwärtsschieben der Antwort
des Suchlaufs verwendet.
-
Ist irgendeines der Bits über Bit 10 eingestellt, dann
lautet das Ergebnis 0.
-
Die in der Patentanmeldung "Schattieren von
dreidimensionalen Bildern" (Anmeldung Nr. 9414834.3)
beschriebene Architektur kann eine Zahl liefern, die
proportional zum Kehrwert der Entfernung zwischen dem
wiedergegebenen Objekt und dem Betrachter ist. Die
Verschleierungsfunktion müsste auf 2log&sub2;(d)/n abgeändert
werden. Leider gibt es keine einfache Möglichkeit zur
Auswertung dieser Funktion. Eine akzeptable Annäherung an
diese Funktion ist A = 1 - 2n · log&sub2;(d).