-
Implementierungen
der beanspruchten Erfindung betreffen allgemein die Verarbeitung
von Grafikbildern und insbesondere die Verarbeitung von Grafikbildern
unter Verwendung von Geometriebildern.
-
1 ist
ein Flußdiagramm
typischer Grafikverarbeitung 100. Grafische Bilder darstellende
Geometrie kann einer Grafik-Pipeline zugeführt werden (Schritt 110).
Solche Geometrie kann typischerweise Dreiecke, aber auch Vierecke
oder andere Arten von Geometrie umfassen. Vertexshader können dann
die Geometrie verarbeiten, wobei sie zum Beispiel ein Verarbeiten
wie Transformieren und Beleuchten jedes Polygons, Bestimmen von
Farben für
Vertices, gegebenenfalls Bestimmen von Normalen usw. durchführen (Schritt 120).
Vertexshader enthalten typischerweise Hardware, die einen Befehlssatz
zur Anwendung auf Daten, die Vertices zugeordnet sind, implementiert.
Solche Daten können
zum Beispiel die Vertexposition, die Vertexnormale und die Texturkoordinaten
je Vertex sein. Diese Werte können
auch später
von der Shadinghardware zum Interpolieren über ein Polygon zur Erzeugung
eines schattierten Bildes benutzt werden.
-
Als
nächstes
können
die Polygone an entsprechenden Positionen auf den Schirm abgeschnitten
werden (Schritt 130). Pixelshader können dann jedes Polygon schattieren
(Schritt 140). Pixelshader enthalten typischerweise Hardware,
die auf jedem Fragment, während
es die Grafik-Pipeline durchläuft, einen
Satz von Befehlen ausführt,
bevor es auf dem Schirm wiedergegeben wird. Pixel- und Vertexshader können identische
oder unterschiedliche Befehlssätze
aufweisen. Zusätzlich
können
die von ihnen ausgeführten
Befehlssätze
von den einem Programmierer offenstehenden Befehlen verschieden
sein.
-
Wenn
sich nach der Schattierung ein bestimmtes Pixel vor etwaigen zuvor
wiedergegebenen Pixeln befindet, kann es in den Bildpuffer (frame
buffer) geschrieben werden (Schritt 150). In bestimmten Grafik-Engines
kann es zu Alpha-Mischung (alpha blending) kommen. Alpha-Mischung ist ein
Mechanismus zum Ermöglichen
der Implementierung teilweise transpa renter Objekte und kann typischerweise
durch einen zusätzlichen
Kanal zu den in einer traditionellen dreidimensionalen (3D)-Grafik-Pipeline verwendeten
Farbkanälen
realisiert werden.
-
Vor
kurzem wurde eine Technik zum Darstellen der Oberflächengeometrie
grafischer Bilder vorgeschlagen, die bestimmte Vorteile haben kann.
Eine solche Technik kann eine beliebige grafische Oberfläche auf
eine völlig
reguläre
Struktur übertragen (remesh),
die als "Geometriebild" bezeichnet wird. Das
Geometriebild kann die Oberflächengeometrie eines
grafischen Bildes als ein zweidimensionales (2D-)Array quantisierter
Punkte erfassen. Oberflächensignale,
wie zum Beispiel Normalen und/oder Farben, können unter Verwendung derselben
Oberflächenparametrisierung
wie bei dem Geometriebild in ähnlichen
2D-Bildern gespeichert werden. Eine weitere Diskussion von Geometriebildern
findet sich zum Beispiel in Xianfeng Gu et al., "Geometry Images," SIGGRAPH 2002 Proceedings, Seiten 355–361; und
in F. Losasso et al., "Smooth
Geometry Images," Eurographics
2003, Seiten 138–145
und 273. Um besser zu verstehen, was ein Geometriebild ist und wie
es ein 3D-Grafikobjekt darstellen kann, wird eine kurze Erläuterung
gegeben.
-
2 zeigt
die Bildung eines Geometriebildes 250 aus einem 3D-Modell 210 (siehe
z.B. Hughes Hoppe, "Irregular
To Completely Regular Meshing In Computer Graphics", International Meshing
Roundtable 2002, September 2002). Das 3D-Modell 210 kann
als eine zweidimensionale (2D-) Form aufgefaßt werden, die im 3D-Raum gebogen (bent)
und deformiert (warped) wird, um ein 3D-Maschengitter zu bilden.
Das Modell 210 kann ein solches Maschengitter geometrischer
Formen (z.B. Dreiecke, Vierecke usw.) enthalten, die durch Vertices
und Kanten zwischen den Vertices definiert werden. Die Vertices
in dem Modell 210 können
zugeordnete räumliche
Koordinatenwerte in einem 3D-Koordinatensystem aufweisen (z.B. [x,y,z]-Koordinaten).
-
Das
3D-Modell 210 kann entlang seiner Kanten geschnitten werden,
um eine andere (z.B. nicht kaninchenförmige) 2D-Form zu bilden. Der
Schnitt 220 stellt einen solchen Schnitt dar. Diese andere Form
kann unter Verwendung bekannter Techniken deformiert (warped) oder
parametrisiert werden, um eine reguläre Form 230 zu bilden.
Die reguläre
Form 230 kann verbundene Vertices aus dem Modell 210 (z.B.
als Dreiecke dargestellt) enthalten, wobei sich der Schnitt 220 an
der äußeren Kante
bzw. den äußeren Kanten
der Form 230 befindet. Somit behält die reguläre Form 230 sowohl
die [x,y,z]-Positionswerte für
die Vertices in dem Modell 210 als auch die Verbindungsbeziehungen
zwischen diesen Vertices. Es ist zu beachten, daß, obwohl die reguläre Form 230 als
ein Quadrat dargestellt ist, auch andere Arien von regulären Formen
(z.B. Kreise usw.) verwendet werden können.
-
Die
Polygone in der regulären
Form 230 können
regulär
erfaßt
werden, um eine abgetastete Form 240 zu erzeugen. Jeder
erfaßte
Punkt in der erfaßten Form 240 kann
ein neuer Vertex sein, der sowohl einen Positionswert (z.B. eine
[x,y,z]-Koordinate) behält
als auch implizit mit anderen Vertices in dem erfaßten Bild 240 verbunden
ist. Das heißt,
Vertices in dem erfaßten
Bild 240 können
mittels der regulären Abtastung
der regulären
Form 230 durch Kanten mit anderen Vertices auf ihren oberen,
unteren, linken und rechten Seiten verbunden werden.
-
Das
abgetastete Bild 240 kann in ein Rot/Grün/Blau-Farbbild (RGB) (oder
einen beliebigen anderen Farbraum) umgesetzt werden, indem man die
Dreikanal-[x,y,z]-Koordinaten der Vertices in dem abgetasteten Bild 240 auf
die Koordinaten des Dreikanal-RGB-Raums [r,g,b] abbildet, um das
Geometriebild 250 zu erzeugen. Jedes Pixel in dem Geometriebild 250 kann
einen abgetasteten Vertex in dem Modell 210 darstellen,
wobei die Werte von Rot, Grün
und Blau des Pixels die räumliche
[x,y,z]-Position des abgetasteten Vertex darstellen. Die Nachbarvertices
des entsprechenden abgetasteten Vertex in dem Modell 210 werden
durch die zu einem gegebenen Pixel in dem Geometriebild 250 benachbarten
Pixel bestimmt. Anders ausgedrückt,
sind die Nachbarvertices des Modells 210 durch die Nachbarpixel
in dem Geometriebild 250 bekannt, und die Positionswerte
dieser Vertices sind durch die Farbwerte für Pixel in dem Geometriebild 250 bekannt.
-
Obwohl
das Geometriebild 250 in Bezug auf Positionsinformationen
erläutert
wurde, können
Geometriebilder 250 für
beliebige Informationen erzeugt werden, die den Vertices des Modells 210 zugeordnet
sind. Zum Beispiel können
auch Normalen, die [x,y,z]-Vektoren sind, die in den Raum zeigen,
durch ein Geometriebild 250 dargestellt werden. Außerdem können auch
Farbwerte und/oder Texturkoordinaten durch Geometriebilder 250 dargestellt
werden. Das Darstellen von Modellen als Bilder kann es einem erlauben,
existierende Bildverarbeitungsalgorithmen, wie zum Beispiel Bildkomprimierungsalgorithmen,
zu verwenden.
-
Obwohl
es möglich
ist, Geometriebilder zu komprimieren, können solche Geometriebilder,
auch wenn sie komprimiert sind, in bestimmten Fällen über einen Datenbus zu einem
Grafikprozessor gesendet werden. In bestimmten Fällen kann die Bandbreite des
Datenbusses die Auflösung
und/oder visuelle Wiedergabetreue begrenzen, die durch den Grafikprozessor
aus den Geometriebildern angezeigt werden kann.
-
Kurze Beschreibung
der Zeichnungen
-
Die
beigefügten
Zeichnungen, die in die vorliegende Beschreibung aufgenommen sind
und einen Teil davon bilden, zeigen eine oder mehrere mit den Prinzipien
der Erfindung übereinstimmende
Implementierungen und erläutern
zusammen mit der Beschreibung solche Implementierungen. Die Zeichnungen
sind nicht notwendigerweise maßstabsgetreu,
wobei stattdessen die Veranschaulichung der Prinzipien der Erfindung
betont wird. Es zeigen:
-
1 ein
Flußdiagramm
typischer Grafikverarbeitung;
-
2 die
Bildung eines Geometriebildes;
-
3 ein
beispielhaftes System; und
-
4 ein
Flußdiagramm
eines Prozesses zum Unterteilen von Grafikdaten.
-
Detaillierte
Beschreibung
-
Die
folgende ausführliche
Beschreibung bezieht sich auf die beigefügten Zeichnungen. In verschiedenen
Zeichnungen können
dieselben Bezugszeichen verwendet werden, um gleiche oder ähnliche Elemente
zu identifizieren. In der folgenden Beschreibung werden zum Zwecke
der Erläuterung
und nicht der Einschränkung
spezifische Einzelheiten dargelegt, wie zum Beispiel konkrete Strukturen,
Architekturen, Schnittstellen, Techniken usw., um ein eingehendes
Verständnis
der verschiedenen Aspekte der beanspruchten Erfindung zu gewährleisten. Für Fachleute
ist jedoch anhand der vorliegenden Offenlegung ersichtlich, daß die verschiedenen
Aspekte der beanspruchten Erfindung in anderen Beispielen ausgeübt werden
können,
die von diesen spezifischen Einzelheiten abweichen. In bestimmten
Fällen wurden
Beschreibungen wohlbekannter Einrichtungen, Schaltungen und Verfahren
weggelassen, um die Beschreibung der vorliegenden Erfindung nicht durch
unnötige
Einzelheiten undeutlich zu machen.
-
3 zeigt
ein beispielhaftes System 300. Das System 300 kann
einen Hauptspeicher 310, einen Prozessor 320,
einen Datenbus 330, einen Grafikspeicher 340,
einen oder mehrere Vertexshader 350, einen oder mehrere
Pixelshader 360 und einen Bildpuffer 370 enthalten.
Bei bestimmten Implementierungen können eines oder mehrere der
Elemente 340–370 in
einer physisch unterscheidbaren Grafikkarte enthalten sein, die über den
Datenbus 330 mit dem Prozessor 320 verbunden ist.
Bei bestimmten Implementierungen können sich die Elemente 340–370 auf
einer gemeinsamen Leiterplatte (z.B. einem Motherboard, einer Tochterkarte
usw.) mit den Elementen 310 und 320 befinden.
Bei bestimmten Implementierungen kann eines oder können mehrere der
Elemente 350 und 360 Teil eines Teils (z.B. eines Kerns)
einer Einrichtung sein, und der Prozessor 320 kann in einem
anderen Teil (z.B. einem anderen Kern) derselben Einrichtung enthalten
sein.
-
Der
Hauptspeicher 310 kann eine Speichereinrichtung zum Speichern
von Geometriebildern enthalten. Der Hauptspeicher 310 kann
eine Direktzugriffsspeichereinrichtung (RAM) enthalten, wie zum
Beispiel einen dynamischen RAM (DRAM), einem Doppeldatenraten-RAM
(DDR-RAM) usw.. Der Hauptspeicher 310 kann vorberechnete
Geometriebilder und/oder grafische Daten speichern, aus denen Geometriebilder
zu berechnen sind.
-
Der
Prozessor 320 kann einen General-Purpose-Prozessor, einen
Specific-Purpose-Prozessor und/oder für einen spezifischen Zweck
konfigurierte Logik enthalten. Der Prozessor 320 kann dafür eingerichtet
sein, Geometriebilder aus dem Hauptspeicher 310 über den
Datenbus 330 zu dem Grafikspeicher 340 zu verteilen.
Der Prozessor 320 kann die Geometriebilder über den
Datenbus 330 unter der Kontrolle eines Programms senden,
wie zum Beispiel eines Programms für grafische Wiedergabe (rendering),
Spiele, grafische Kreation oder eines anderen Typs grafikbezogener
Programme. Bei bestimmten Implementierungen kann der Prozessor 320 die
Geometriebilder aus anderen Informationen in dem Hauptspeicher 310 berechnen
und die Geometriebilder in dem Hauptspeicher 310 speichern.
Bei bestimmten Implementierungen kann der Prozessor 320 die
Geometriebilder vor der Übertragung über den
Datenbus 330 komprimieren (z.B. über JPEG 2000 oder ein anderes
verlustloses Verfahren).
-
Der
Datenbus 330 kann den Prozessor 320 mit dem Grafikspeicher 340 verbinden.
Der Datenbus 330 kann ein typisches Verbindungsprotokoll
oder ein angepaßtes
Kommunikationsprotokoll benutzen. Der Datenbus 330 kann
eine zugehörige
Bandbreite aufweisen, die eine maximale Datenmenge definiert, die
er zu einem gegebenen Zeitpunkt transferieren kann. Bei bestimmten
Implementierungen kann die Bandbreite des Datenbusses 330 die
Leistungsfähigkeit
anderer Teile des Systems 300 (z.B. der Schattierer 350 und/oder 360)
begrenzen. Bei einigen Implementierungen begrenzt die Bandbreite
des Datenbusses 330 möglicherweise
nicht die Gesamtleistungsfähigkeit
des Systems 300.
-
Der
Grafikspeicher 340 kann eine Speichereinrichtung zum Speichern
von Geometriebildern enthalten. Der Grafikspeicher 340 kann
eine Direktzugriffsspeichereinrichtung (RAM), wie zum Beispiel einen
dynamischen RAM (DRAM), einen Doppeldatenraten-RAM (DDR-RAM) usw., enthalten.
Der Grafikspeicher 340 kann Geometriebilder von dem Prozessor 320 und
den Vertexshadern 350 empfangen und speichern. Zusätzlich zu
dem Speichern von Geometriebildern über Schreiboperationen kann
der Grafikspeicher 340 solche Geometriebilder über Leseoperationen
den Vertexshadern 350 und den Pixeleshadern 360 zuführen. Zum
Beispiel kann der Grafikspeicher 340 verschiedene zu den
Geometriebildern gehörige "Pro-Vertex"-Daten speichern.
Solche Vertexdaten können
eine oder mehrere Vertexposition(en), Texturkoordinate(n), Farbkoordinate(n)
oder einen oder mehrere Normalenvektor(en) umfassen.
-
Die
Vertexshader 350 können
dazu eingerichtet sein, die Vertexdaten aus dem Grafikspeicher 340 zu
lesen und die Vertexdaten zu unterteilen, um höher auflösende Vertexdaten zu erzeugen.
Die Vertexshader 350 können
eine parallele Architektur aufweisen und können einen größeren Befehlssatz
als zum Beispiel die Pixelshader 360 aufweisen. Die Vertexshader 350 können verschiedene
Vertexerzeugungsprogramme und Unterteilungsverfahren verwenden,
um die Auflösung
der Vertexdaten zu vergrößern, wie
später
beschrieben werden wird. Die Vertexshader 350 können auch
die Vertexdaten mit höherer
Auflösung
in den Grafikspeicher 340 schreiben.
-
Aufgrund
eines Zugriffs mit relativ hoher Bandbreite auf den Grafikspeicher 340 können die Vertexshader 350 eine
relativ große
Menge an Vertexdaten mit höherer
Auflösung
in den Grafikspeicher 340 schreiben. Typische Unterteilungsverfahren
können
die Datenmenge in einem Geometriebild um einen Faktor vier vergrößern. Die
Vertexshader 350 können
dafür eingerichtet
sein, eine oder mehrere Ebene(n) der Unterteilung für ein gegebenes
Geometriebild durchzuführen,
und in dem Grafikspeicher 340 gespeicherte einmal unterteilte
Vertexdaten können
zum Beispiel von den Vertexshadern 350 benutzt werden,
um eine zweite Ebene unterteilter Daten (z.B. mit einer höheren/feineren
Auflösung)
zur Speicherung im Grafikspeicher 340 zu erzeugen.
-
Die
Pixelshader 360 können
dafür eingerichtet
sein, die unterteilten Vertexdaten aus dem Grafikspeicher 340 zu
lesen und zur Darstellung aufzubereiten. Die Pixelshader 360 können eine
Verbindung zu dem Grafikspeicher 340 mit einer höheren Bandbreite
als zum Beispiel die Vertexshader 350 aufweisen, und die
Pixelshader 360 können
in Bezug auf die Anzahl der Befehle und den Befehlssatz begrenzter
als die Vertexshader 350 sein. Zum Beispiel können die
Pixelshader 360 dafür
ausgelegt sein, die neuen Geometriebilder mit höherer Auflösung aus dem Grafikspeicher 340 zu
lesen, die Bilder zu rastern und die gerasterten Pixeldaten zu dem
Bildpuffer 370 zu senden. Bei bestimmten Implementierungen können die
Pixelshader 360 die neuen Geometriebilder unter Verwendung
der Geometriebilder mit geringerer Auflösung aus dem Prozessor 320 (die
in dem Grafikspeicher 340 bleiben können) als Darstellungsprimitiven
(display primitives) rastern.
-
Der
Bildpuffer 370 kann dafür
eingerichtet sein, Pixeldaten aus den Pixelshadern 360 zu
empfangen und sie gegebenenfalls vor der Anzeige zu puffern. Der
Bildpuffer 370 kann auch möglicherweise unter der Kontrolle
eines (nicht gezeigten) Grafikprozessors Daten an eine Anzeige oder
Anzeigenschnittstelle ausgeben.
-
4 ist
ein Flußdiagramm
eines Prozesses 400 zum Unterteilen von Grafikdaten. Obwohl
der Prozeß zur
leichteren Erläuterung
mit Bezug auf das System 300 beschrieben werden kann, ist
die beanspruchte Erfindung diesbezüglich nicht notwendigerweise
beschränkt.
-
Die
Verarbeitung kann damit beginnen, daß der Prozessor 320 Texturen,
Geometriebilder und etwaige andere zugeordnete Werte für Vertexpositionen
in einem Bild erhält
(Schritt 410). Bei bestimmten Implementierungen kann der
Prozessor 320 die Werte berechnen, und bei bestimmten Implementierungen
kann der Prozessor 320 die Werte aus dem Hauptspeicher 310 lesen.
Zusätzlich
zu dem Erhalten eines Geometriebildes kann der Prozessor 320 auch
eine Texturkoordinatenabbildung und/oder eine Farbkoordinatenabbildung
erzeugen. Ausführliche Prozeduren
zum Erzeugen von Geometriebildern (z.B. Schneiden eines Maschengitters
entlang Kantenwegen und Parametrisieren der resultierenden Karte
in ein Quadrat) finden sich zum Beispiel in Xianfeng Gu et al. "Geometry Images", SIGGRAPH 2002 Proceedings, Seiten
355–361.
Eine solche Texturabbildung, ein solches Geometriebild und/oder eine
solche Farbabbildung können
als Arrays mit spezifizierten Breiten und Höhen implementiert werden.
-
Textur-,
Farb- und/oder Normalenabbildungen können auf dieselbe Weise wie
die Vertexabbildung in 2 erzeugt werden. Für Texturen
können tu
und tv in dem Rot- bzw. dem Grün-Kanal
gespeichert werden. Ähnlich
können
für die
Farbe r, g und b Werte in den r-, g-, und b-Werten für die Texturabbildung
gespeichert werden. Da Texturen normalerweise nur Arrays von Farben
sind, verwenden sowohl Farb- als auch Texturabbildungen r, g und
b. Schließlich
können
x-, y- und z-Werte der Normalen in den Kanälen r, g und b der Texturabbildung
gespeichert werden. Es wird angemerkt, daß eine solche Abbildung nicht
auf eine 2D-Struktur, wie zum Beispiel ein Bild, beschränkt sein
muß. Stattdessen
können
die hier beschriebenen Techniken Texturen, Normalen und Farben unterstützen, indem
eine beliebige Anzahl von Kanälen
verarbeitet wird, die auf r, g, b und (gegebenenfalls) α abgebildet
werden. Wenn mehr als vier Kanäle
vertexbezogener Informationen oder Daten gewünscht werden, kann man für diese
Informationen zusätzliche
Texturabbildungen verwenden. Die mit Bezug auf 2 beschriebene
Technik kann somit mit relativ beliebigen und/oder komplexen Vertexdaten
verwendet werden.
-
Außerdem kann
der Prozessor 320 im Schritt 410 Platzhalterarrays
für die
Texturen, Geometriebilder und Farben erzeugen, wenn sie ein- oder
mehrmals unterteilt werden. Solche Platzhalterarrays können in
abgekürzter
(shorthand) Form unter Verwendung minimaler Bandbreite über den
Datenbus 330 gesendet werden, um Platz in dem Grafikspeicher 340 für die unterteilten
Texturen, Geometriebilder usw. zu reservieren. Bei bestimmten Implementierungen
können
die Platzhalterarrays lokal durch die Vertexshader 350 als
Reaktion auf eine Anweisung von dem Prozessor 320 erzeugt
werden. In jedem Fall können
die Platzhalterarrays auf null initialisiert und in dem Grafikspeicher 340 gespeichert
werden.
-
Die
Verarbeitung kann damit voranschreiten, daß der Prozessor 320 die
Texturen, Geometriebilder und etwaige andere Werte (z.B. Farbkoordinaten und/oder
Normalenvektoren) über
den Datenbus 330 zu dem Grafikspeicher 340 sendet
(Schritt 420). Bei bestimmten Implementierungen kann der
Prozessor 320 die Texturen, Geometriebilder und etwaigen
anderen Werte zu einer Grafik-Anwendungsprogrammschnittstelle (API)
leiten, die den Transport der Texturen und Geometriebilder zu dem
Grafikspeicher 340 abwickeln kann. Bei bestimmten Implemen tierungen können die
Texturen, Geometriebilder usw. (z.B. über ein verlustloses Verfahren
wie etwa JPEG 2000) vor der Übertragung über den
Datenbus 330 komprimiert werden.
-
Die
Vertexshader 350 können
die gespeicherten Texturen, Geometriedaten und etwaigen anderen
Werte (kollektiv "Vertexdaten") aus dem Grafikspeicher 340 lesen
und können
die Vertexdaten unterteilen (Schritt 430). Wie bereits
erwähnt,
kann die Unterteilung eines zweidimensionalen Bildes (z.B. eines
Geometriebildes) die Auflösung
des Bildes um etwa einen Faktor vier vergrößern. Bei bestimmten Implementierungen
können
die Vertexshader 350 die Unterteilung unter Verwendung
der Catmull-Clark-Technik implementieren, die in Ed Catmull und
Jim Clark, "Recursively
Generated B-Spline Surfaces on Arbitrary Topological Meshes", Computer Aided
Geometric Design, Band 10, Nr. 6, 1978, skizziert wird.
-
Die
Vertexshader 350 können
jedoch auch andere Unterteilungstechniken verwenden. Bei bestimmten
Implementierungen können
die Vertexshader 350 die Vertexdaten unter Verwendung der
Butterfly-Technik unterteilen, die in "Subdividing Reality: Employing Subdivision
Surfaces for Real Time Scalable Photorealism", Stephen Junkins, Game Developers Conference
proceedings, 2000, skizziert wird. Bei bestimmten Implementierungen
können
die Vertexshader 350 die Vertexdaten unter Verwendung der
Loop-Technik unterteilen, die in C.T. Loop "Smooth Subdivision Surfaces Based on
Triangles", M.S.
Arbeit, Fachbereich für
Mathematik, Universität von
Utah, August, 1987, skizziert wird. Bei bestimmten Implementierungen
können
die Vertexshader 350 die Vertexdaten unter Verwendung der
Doo-Sabin-Technik
unterteilen, die in D. Doo und M. Sabin, "Behavior of Recursive Division Surfaces
Near Extraordinary Points",
Computer Aided Design, Band 10, Nr. 6, 1978 skizziert wird.
-
Die
Vertexshader 350 können
die unterteilten ausgegebenen Vertexdaten in den Grafikspeicher 340 schreiben
(Schritt 440). Bei bestimmten Implementierungen überschreiben
die Vertexshader 350 ein oder mehrere Platzhalterarrays
in dem Grafikspeicher 340 mit den ausgegebenen Vertexdaten. Bei
bestimmten Implementierungen können
die Vertexshader 350 für
die ausgegebenen Vertexdaten je nach Bedarf neue Strukturen in dem
Grafikspeicher 340 erzeugen.
-
Abhängig von
einer Anzahl der Ebenen der gewünschten
Unterteilung können
die Vertexshader 350 die Schritte 430 und 440 ein-
oder mehrmals wiederholen, wie in 4 durch
den gestrichelten Pfeil gezeigt. Wenn zum Beispiel mehr als eine
Unterteilungsoperation ge wünscht
wird (z.B. um eine höhere Auflösung zu
produzieren), können
die Vertexshader 350 einmal unterteilte (oder bei Wiederholung
von Schritt 430 für
ein zweites Mal zweimal unterteilte) ausgegebene Vertexdaten (output
vertex data), die in einem vorigen Schritt 440 im Grafikspeicher 340 gespeichert
werden, lesen und weiter unterteilen. Da die Unterteilung von Vertexdaten
mit der unmittelbar vorausgehenden Auflösung (z.B. der Ausgabe der vorherigen
Unterteilung) abhängen
kann, können
die Vertexshader 350 in bestimmten Implementierungen Vertexdaten
einer höheren
Auflösung überschreiben und/oder
löschen,
um Platz in dem Grafikspeicher 340 zu schaffen. Zum Beispiel
können
bei der Durchführung
einer zweiten (oder höheren)
Ebene der Unterteilung die von dem Prozessor 320 gesendeten
ursprünglichen
Vertexdaten überschrieben
und/oder gelöscht
werden.
-
Man
kann auch andere Techniken beim Unterteilen verwenden, um Platz
in dem Grafikspeicher 340 und/oder anderen Betriebsmitteln
des Systems 300 zu sparen. Zum Beispiel kann man in dem
Grafikspeicher 340 Platz sparen, indem Textur-, Normalen-
und Farbkoordinaten nicht so vollständig wie zum Beispiel die zugehörigen Geometriebilder
unterteilt werden. In einem solchen Fall können sich die Pixelshader 360 lediglich
auf eine niedrigere Ebene der Unterteilung (z.B. nur einmal unterteilte
Daten für zwei-
oder mehrmals unterteilte Auflösung)
beziehen (reference) und für
jedes Nachschlagen (lookup) durch 4 dividieren. Wenn beispielsweise
das Erzeugen und/oder Speichern eine 256 × 256-Normalenabbildung zusammen
mit einem entsprechenden 256 × 256-Geometriebild
nicht erwünscht
ist, können die
Pixelshader 360 stattdessen eine Normalenabbildung aus
der 64 × 64-Auflösungsebene
verwenden. Für
einen Eintrag an dem Index (32, 32) in dem Positionsarray
können
sich die Pixelshader 360 während ihrer Verarbeitung auf
die Position (8, 8) in der 64 × 64-Normalenabbildung
beziehen. Somit können
die Pixelshader 360 eine oder mehrere Abbildungen einer
geringeren Auflösung
(z.B. eine Normalenabbildung) beim Formatieren anderer Vertexdaten
(z.B. eines Geometriebildes oder einer anderen Struktur) verwenden,
die durch die Vertexshader 350 auf eine höhere Auflösung unterteilt
wurden.
-
Bei
bestimmten Implementierungen kann man eine geeignete Normale berechnen,
und dann kann die nächstliegende
Normale in der alten Normalenabbildung nachgeschlagen werden. Die
resultierenden Normalendaten können
in einer Normalenabbildung beliebiger Größe gespeichert werden. Andere
Techniken können
verwendet werden, um für
eine gegebene Auflösung
ein volles Unterteilen aller Grafikdaten in dem Grafikspeicher 340 zu
vermeiden.
-
In
bestimmten Bereichen (z.B. Bereichen in einem Geometriebild) ist
möglicherweise
keine Unterteilung erwünscht.
Für diese
Bereiche können
das existierende Geometriebild, das Normalenbild und/oder Texturabbildungen
belassen werden. Für die
anderen Bereiche, deren Unterteilung erwünscht wird, kann man ein Unterteilungsverfahren
verwenden (z.B. Catmull-Clark).
Für Grenzen
zwischen zwei Regionen (z.B. unterteilt und nicht) können bestimmte
Vertexinformationen dupliziert werden.
-
Eine
andere Technik zum Sparen von Platz in dem Grafikspeicher 340 kann
darin bestehen, die darin gespeicherten Daten (z.B. die ursprünglichen Vertexdaten
und/oder die unterteilten Vertexdaten) über ein verlustloses Komprimierungsverfahren
zu komprimieren. Ein solches Verfahren, daß sich für das Komprimieren von zum
Beispiel unterteilten Geometriebildern eignen kann, kann JPEG 2000
sein, wodurch Kompressionsverhältnisse
von etwa 2,5 zu 1 erzielt werden können. Datenkomprimierung kann anstelle
von oder zusätzlich
zu anderen Techniken zum Reduzieren der in dem Grafikspeicher 340 gespeicherten
Datenmenge verwendet werden.
-
Die
Verarbeitung kann fortgesetzt werden, indem die Pixelshader 360 die
in dem Grafikspeicher 340 gespeicherten unterteilten Vertexdaten
zur Darstellung aufbereiten (Schritt 450). Die Pixelshader 360 können die
gespeicherten Vertexdaten (z.B. Geometriebilder, Farbabbildungen
usw.) zur Darstellung rastern und/oder anderweitig formatieren.
Bei bestimmten Implementierungen können die Pixelshader 360 die
unterteilten Vertexdaten unter Verwendung von einer oder mehreren
Gruppe(n) von Vertexdaten mit geringerer Auflösung (z.B. ursprünglichen Geometriebildern)
als Darstellungsprimitiven aufbereiten. Obwohl es in 4 nicht
explizit gezeigt ist, können
die formatierten Grafikbilder dann aus dem Bildpuffer 370 angezeigt
werden.
-
Das
oben beschriebene System und Verfahren zum Unterteilen von Vertexdaten
durch die Vertexshader 350 kann bei bestimmten Implementierungen
eine visuelle Wiedergabetreue/Auflösung angezeigter Daten für eine gegebene
Bandbreite von über den
Datenbus 330 übertragenen
Daten vergrößern. Zum
Beispiel können
die Vertexshader 350 Vertexdaten, die den größten Teil
oder im wesentlichen die gesamte Bandbreite des Datenbusses 330 benutzen, unterteilen,
um die Darstellungsauflösung
gegenüber der
ansonsten aufgrund der Bandbreite des Datenbusses 330 möglichen
zu vergrößern. Bei
bestimmten Implementierungen kann ein solches Unterteilungsverfahren
das Produzieren einer gegebenen visuellen Wiedergabetreue/ Auflösung unter
Verwendung von weniger Bandbreite des Datenbusses 330 ermöglichen,
als wenn keine Unterteilung durchgeführt wird. Zum Beispiel kann
die Darstellungsauflösung
die gleiche bleiben wie in dem Fall, in dem keine Unterteilung durchgeführt wird,
aber eine Unterteilung erlaubt es dem ersteren Fall, wesentlich
weniger Bandbreite des Datenbusses 330 für dieselbe
Auflösung
zu benutzen.
-
Um
das Verständnis
des oben beschriebenen Systems 300 und des Prozesses 400 weiter
zu erleichtern, wird ein Beispiel gegeben. In diesem Beispiel kann
der Prozessor 320 im Schritt 410 drei n × n-Arrays
(wobei n eine ganze Zahl wie etwa 8, 16, 32 usw. ist), G0, T0 und
C0 erzeugen oder aus dem Hauptspeicher 320 lesen. G0 kann
ein Geometriebild sein. T0 kann eine Texturkoordinatenabbildung
sein, wobei jede Position entsprechende Texturkoordinaten enthält. CO kann
eine Farbkoordinatenabbildung (color coordinate cap) sein, wobei
jede Position entsprechende Farbwerte für rot, grün und blau enthält. G0,
T0 und C0 können
eine ursprüngliche
Auflösung (z.B.
8 × 8,
16 × 16
usw.) aufweisen.
-
Außerdem können im
Schritt 410 für
jede gewünschte
Ebene der Unterteilung (z.B. zwei Ebenen) der Prozessor 320 und/oder
die Vertexshader 350 für jeweils
G0, T0 und C0 ein Platzhalterarray bzw. eine Platzhalterabbildung
mit einer jeweiligen unterteilten Auflösung erzeugen. Für eine erste
Unterteilungsebene können
G1, T1 und C1 mit einer Größe/Auflösung von
4·n × 4·n erzeugt
werden, weil die Unterteilung die Größe/Auflösung eines Arrays/Bildes um
einen Faktor 4 vergrößern kann.
Für eine
zweite Unterteilungsebene können
G2, T2 und C2 mit einer Größe/Auflösung von
4·4·n × 4·4·n (d.
h. 16n × 16n)
erzeugt werden. Der Zweckmäßigkeit
halber können G1,
T1, C1, G2, T2 und C2 auf null initialisiert werden.
-
In
Schritt 420 kann der Prozessor die Strukturen G0, T0, C0,
G1, T1, C1, G2, T2 und C2 über den
Datenbus 330 an den Grafikspeicher 340 senden.
Bei bestimmten Implementierungen kann eine solche Operation durch
Verwendung einer Grafik-API durchgeführt werden. Diese Operation
kann Platz in dem Grafikspeicher 340 zum späteren Auffüllen durch
den Vertexshader 350 initialisieren.
-
Die
Vertexshader 350 können
dann G0, T0 und C0 unterteilen, um in Schritt 430 erste
unterteilte Vertexdaten G1, T1 und C1 zu erzeugen. Wenn zum Beispiel
das konkrete verwendete Unterteilungsverfahren das Unterteilungsverfahren
von Catmull-Clark ist, können
für eine Fläche (face)
durch Mittelung von die Fläche
definierenden alten Punkten neue Flächenpunkte berechnet werden.
Neue Kantenpunkte kann man berechnen, indem man Mittelpunkte alter Kanten
mit dem Mittelwert der beiden neuen Flächenpunkte der sich eine Kante
teilenden Flächen mittelt.
Neue Vertexpunkte kann man berechnen, indem man Q/n + (2·R)/n +
(S·(n-3))/n mittelt, wobei
Q gleich dem Mittelwert neuer Flächenpunkte
aller an den alten Vertexpunkt angrenzenden Flächen, R gleich dem Mittelwert
von Mittelpunkten aller an den alten Vertexpunkt stoßenden alten
Kanten und S der alte Vertexpunkt ist. Bei bestimmten Implementierungen
können
andere Unterteilungsverfahren als Catmull-Clark verwendet werden.
-
Während jede
Gruppe von Punkten in G1, T1 und C1 erzeugt wird, können die
Vertexshader 350 im Schritt 440 die Werte in den
entsprechenden Platzhalterstrukturen in dem Grafikspeicher 340 speichern.
Wenn die erste Unterteilung ausreichend vollständig ist, können die Vertexshader 350 G1,
T1 und C1 weiter unterteilen, um im Schritt 430 zweite
unterteilte Vertexdaten G2, T2 und C2 zu erzeugen. Die Vertexshader 350 können die
weiter unterteilten Werte im Schritt 440 in entsprechenden
Platzhalterstrukturen G2, T2 und C2 in dem Grafikspeicher 340 speichern.
Wie bereits erläutert,
werden G1, T1 oder C1 möglicherweise
bei bestimmten Implementierungen keiner Unterteilung auf einem zweiten
Niveau unterzogen. Die Pixelshader 360 können die
final unterteilten Vertexdaten (z.B. G2, T2 und C2, wenn alle zweimal
unterteilt wurden) aus dem Grafikspeicher 340 lesen und
sie zur Darstellung über
den Bildpuffer 370 aufbereiten. Bei Implementierungen,
in denen G0, T0 und C0 nicht alle zweimal unterteilt werden, können die
Pixelshader 360 G2 und eine oder mehrere weniger unterteilte
Strukturen, wie etwa T1 und/oder C1, zur Darstellung aufbereiten.
-
Obwohl
das obige Anschauungsbeispiel eine spezifische Implementierung enthält, ist
die beanspruchte Erfindung nicht notwendigerweise darauf beschränkt. Zum
Beispiel können
die anfänglichen Vertexdaten
andere grafische Daten als G0, T0 und C0 enthalten, wie zum Beispiel
Normalendaten. Die Anzahl der durch die Vertexshader 350 durchgeführten Unterteilungen
kann kleiner oder größer als
zwei sein. Ähnlich
kann man bei bestimmten Implementierungen ein anderes Unterteilungsverfahren
als Catmull-Clark verwenden.
-
Die
obige Beschreibung einer oder mehrerer Implementierungen stellt
eine Veranschaulichung und Beschreibung bereit, beabsichtigt aber
nicht, erschöpfend
zu sein oder den Schutzumfang der Erfindung auf die genaue offengelegte
Form zu beschränken.
Angesichts der obi gen Lehren sind Modifikationen und Varianten möglich oder
können
aus einer Ausübung
verschiedener Implementierungen der Erfindung erzielt werden.
-
Obwohl
das Unterteilungsverfahren hier mit Bezug auf die Vertexshader 350 beschrieben
wurde, kann man zum Beispiel bei bestimmten Implementierungen andere
Grafikhardware zur Implementierung der Unterteilung verwenden. Solche
andere Hardware (z.B. andere Arten von Shadern usw.) kann geeignet
sein, wenn sie die Fähigkeit
aufweist, Vertexdaten aus dem Grafikspeicher 340 zu lesen
und unterteilte Vertexdaten in den Grafikspeicher 340 zu schreiben.
-
Ferner
kann das hier beschriebene Unterteilungsverfahren bei bestimmten
Implementierungen auf Bedarfsbasis (z.B. im wesentlichen in Echtzeit) von
dem Vertexshader 350 durchgeführt werden, und es kann bei
bestimmten Implementierungen durch die Vertexshader 350 vorberechnet
werden. Außerdem
können
bei bestimmten Implementierungen die Vertexshader 350 die
unterteilten Vertexdaten direkt an die Pixelshader 360 senden,
statt sie zuerst in den Grafikspeicher 340 zu schreiben.
-
Darüber hinaus
müssen
die Schritte in 4 nicht in der gezeigten Reihenfolge
implementiert werden; genauso müssen
auch nicht unbedingt alle Schritte durchgeführt werden. Außerdem können die Schritte,
die nicht von anderen Schritten abhängen, parallel mit den anderen
Schritten durchgeführt
werden. Ferner können
mindestens einige der Schritte in dieser Figur als in einem maschinenlesbaren
Medium implementierte Befehle oder Gruppen von Befehlen implementiert
werden.
-
Kein
Element, kein Schritt oder kein Befehl, die in der Beschreibung
der vorliegenden Anmeldung verwendet werden, sollten als kritisch
oder wesentlich für
die Erfindung aufgefaßt
werden, sofern es nicht ausdrücklich
dergestalt beschrieben wird. Außerdem
soll, wie hier verwendet, der Artikel "ein" ein oder
mehrere Elemente umfassen. An der oben beschriebenen Implementierung
bzw. den oben beschriebenen Implementierungen der beanspruchten Erfindung
können
Abwandlungen und Modifikationen vorgenommen werden, ohne wesentlich
von dem Gedanken und den Prinzipien der Erfindung abzuweichen. Alle
solchen Modifikationen oder Varianten sollen in den Schutzumfang
dieser Offenbarung aufgenommen und durch die folgenden Ansprüche geschützt sein.
-
Zusammenfassung
-
Ein
System kann einen Grafikspeicher, einen Datenbus, einen Prozessor
und einen Vertexshader umfassen. Der Datenbus kann wirksam mit dem
Grafikspeicher verbunden sein. Der Prozessor kann Vertexdaten über den
Datenbus an den Grafikspeicher senden. Der Vertexshader kann die
Daten aus dem Grafikspeicher lesen und kann die Vertexdaten in unterteilte
Vertexdaten unterteilen. Der Vertexshader kann auch die unterteilten
Vertexdaten in den Grafikspeicher schreiben.