PatentDe  


Dokumentenidentifikation DE112005002076T5 19.07.2007
Titel Unterteilung von Geometriebildern in Grafikhardware
Anmelder Intel Corp., Santa Clara, Calif., US
Erfinder Lake, Adam, Portland, Oreg., US;
Marshall, Carl, Portland, Oreg., US
Vertreter BOEHMERT & BOEHMERT, 80336 München
DE-Aktenzeichen 112005002076
Vertragsstaaten AE, AG, AL, AM, AT, AU, AZ, BA, BB, BG, BR, BW, BY, BZ, CA, CH, CN, CO, CR, CU, CZ, DE, DK, DM, DZ, EC, EE, EG, ES, FI, GB, GD, GE, GH, GM, HR, HU, ID, IL, IN, IS, JP, KE, KG, KM, KP, KR, KZ, LC, LK, LR, LS, LT, LU, LV, MA, MD, MG, MK, MN, MW, MX, MZ, NA, NG, NI, NO, NZ, OM, PG, PH, PL, PT, RO, RU, SC, SD, SE, SG, SK, SL, SM, SY, TJ, TM, TN, TR, TT, TZ, UA, UG, US, UZ, VC, VN, YU, ZA, ZM, ZW, EP, AT, BE, BG, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HU, IE, IS, IT, LT, LU, LV, MC, NL, PL, PT, RO, SE, SI, SK, TR, OA, BF, BJ, CF, CG, CI, CM, GA, GN, GQ, GW, ML, MR, NE, SN, TD, TG, AP, BW, GH, GM, KE, LS, MW, MZ, NA, SD, SL, SZ, TZ, UG, ZM, ZW, EA, AM, AZ, BY, KG, KZ, MD, RU, TJ, TM
WO-Anmeldetag 12.08.2005
PCT-Aktenzeichen PCT/US2005/028696
WO-Veröffentlichungsnummer 2006026118
WO-Veröffentlichungsdatum 09.03.2006
Date of publication of WO application in German translation 19.07.2007
Veröffentlichungstag im Patentblatt 19.07.2007
IPC-Hauptklasse G06T 17/20(2006.01)A, F, I, 20070425, B, H, DE
IPC-Nebenklasse G06T 15/00(2006.01)A, L, I, 20070425, B, H, DE   

Beschreibung[de]

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 transparenter 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 340370 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 340370 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) &agr; 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 Implementierungen 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 gewü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 obigen 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.


Anspruch[de]
System, umfassend:

einen Grafikspeicher;

einen wirksam mit dem Grafikspeicher zusammenwirkend verbundenen Datenbus;

einen Prozessor zum Senden von Vertexdaten zu dem Grafikspeicher über den Datenbus; und

einen Vertexshader zum Lesen der Vertexdaten aus dem Grafikspeicher, zum Unterteilen der Vertexdaten in unterteilte Vertexdaten und zum Schreiben der unterteilten Vertexdaten in den Grafikspeicher.
System nach Anspruch 1, wobei die Vertexdaten ein Geometriebild umfassen. System nach Anspruch 2, wobei die Vertexdaten ferner Farbdaten, Texturdaten oder Normalendaten umfassen. System nach Anspruch 1, wobei der Prozessor dafür ausgelegt ist, die Vertexdaten unter Verwendung einer Anwendungsprogrammschnittstelle (API) zu senden. System nach Anspruch 1, wobei der Datenbus eine zugehörige Bandbreite aufweist und wobei die von dem Prozessor gesendeten Vertexdaten den größten Teil der Bandbreite des Datenbusses benutzen. System nach Anspruch 1, ferner umfassend:

einen Pixelshader zum Lesen der unterteilten Vertexdaten aus dem Grafikspeicher und zum Aufbereiten der unterteilten Vertexdaten zur Darstellung.
System nach Anspruch 6, wobei der Pixelshader die unterteilten Vertexdaten rastert. System nach Anspruch 6, ferner umfassend:

einen Bildpuffer zum Puffern und Ausgeben aufbereiteter unterteilter Vertexdaten von dem Pixelshader.
System nach Anspruch 1, ferner umfassend:

einen Hauptspeicher zum Speichern der Vertexdaten, bevor der Prozessor die Vertexdaten zu dem Grafikspeicher sendet.
System, umfassend:

einen Speicher zum Speichern erster Geometriebilder mit einer ersten Auflösung;

Vertexshader zum Unterteilen der ersten Geometriebilder in zweite Geometriebilder mit einer zweiten Auflösung, die höher als die erste Auflösung ist, und zum Speichern der zweiten Geometriebilder in dem Speicher; und

Pixelshader zum Aufbereiten der zweiten Geometriebilder zur Darstellung.
System nach Anspruch 10, ferner umfassend:

einen Bildpuffer zum Puffern und Ausgeben von Daten von den Pixelshadern.
System nach Anspruch 10, ferner umfassend:

einen Prozessor zum Erhalten der ersten Geometriebilder und zum Senden der ersten Geometriebilder zu dem Speicher.
System nach Anspruch 12, ferner umfassend:

einen weiteren Speicher zum Speichern der ersten Geometriebilder für einen Zugriff durch den Prozessor.
System nach Anspruch 10, wobei die Pixelshader die zweiten Geometriebilder rastern. System nach Anspruch 10, wobei die zweite Auflösung etwa viermal so groß wie die erste Auflösung ist. Verfahren, welches die folgenden Schritte umfaßt:

Erhalten erster Geometriebilder einer ersten Größe;

Speichern der ersten Geometriebilder;

Unterteilen der ersten Geometriebilder in zweite Geometriebilder einer zweiten Größe, die größer als die erste Größe ist; und

Speichern der zweiten Geometriebilder.
Verfahren nach Anspruch 16, wobei das Erhalten umfaßt:

Berechnen der ersten Geometriebilder.
Verfahren nach Anspruch 16, wobei das Erhalten umfaßt:

Lesen der ersten Geometriebilder aus einem Speicher.
Verfahren nach Anspruch 16, wobei die zweite Größe etwa viermal so groß wie die erste Größe ist. Verfahren nach Anspruch 16, welches ferner die folgenden Schritte umfaßt:

Unterteilen der zweiten Geometriebilder in dritte Geometriebilder einer dritten Größe, die größer als die zweite Größe ist; und

Speichern der dritten Geometriebilder.
Verfahren nach Anspruch 16, ferner umfassend:

Übertragen der ersten Geometriebilder über einen Datenbus vor dem Speichern der ersten Geometriebilder.
Verfahren nach Anspruch 16, ferner umfassend:

Rastern der zweiten Geometriebilder.
Vorrichtung, umfassend:

einen Speicher zum Speichern grafischer Daten; und

einen Vertexshader zum Lesen grafischer Daten aus dem Speicher, zum Erzeugen neuer grafischer Daten aus den gelesenen grafischen Daten und zum Schreiben der neuen grafischen Daten in den Speicher.
Vorrichtung nach Anspruch 23, wobei die gelesenen grafischen Daten Geometriebilder umfassen. Vorrichtung nach Anspruch 23, wobei der Vertexshader dafür ausgelegt ist, die gelesenen grafischen Daten zu unterteilen, um die neuen grafischen Daten zu erzeugen. Verfahren, welches die folgenden Schritte umfaßt:

Lesen von Vertexdaten, die eine erste Auflösung aufweisen, aus einem Speicher;

Lesen von Normalendaten, die eine zweite Auflösung aufweisen, die kleiner als die erste Auflösung ist, aus dem Speicher; und

Aufbereiten der Vertexdaten zur Darstellung unter Verwendung der Normalendaten.
Verfahren nach Anspruch 26, welches ferner die folgenden Schritte umfaßt:

Unterteilen von ursprünglichen Vertexdaten, die die zweite Auflösung aufweisen, in die Vertexdaten, die die erste Auflösung aufweisen; und

Schreiben der Vertexdaten, die die erste Auflösung aufweisen, in den Speicher.
Verfahren nach Anspruch 26, wobei das Aufbereiten umfaßt:

Skalieren eines Index in den Vertexdaten, die die erste Auflösung aufweisen, um ein Verhältnis der ersten und der zweiten Auflösung, um einen entsprechenden Index in den Normalendaten zu erzeugen, die die zweite Auflösung aufweisen.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com