DE102013021044A1 - Erzeugung fehlerbefreiter Voxel-Daten - Google Patents

Erzeugung fehlerbefreiter Voxel-Daten Download PDF

Info

Publication number
DE102013021044A1
DE102013021044A1 DE201310021044 DE102013021044A DE102013021044A1 DE 102013021044 A1 DE102013021044 A1 DE 102013021044A1 DE 201310021044 DE201310021044 DE 201310021044 DE 102013021044 A DE102013021044 A DE 102013021044A DE 102013021044 A1 DE102013021044 A1 DE 102013021044A1
Authority
DE
Germany
Prior art keywords
voxel
graphics primitive
sample
primitive
sampling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE201310021044
Other languages
English (en)
Inventor
Cyril CRASSIN
Yury Y. Uralsky
Eric ENDERTON
Eric B. Lum
Jerome F. Duluk jr.
Henry Packard Moreton
David Luebke
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102013021044A1 publication Critical patent/DE102013021044A1/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

Eine Ausführungsform der vorliegenden Erfindung gibt eine Technik zur Ausführung einer Voxel-Einteilung an. Die Techniken beinhaltet die Ermittlung eines Voxel, das von einem ersten grafischen Grundelement geschnitten wird, das eine Vorderseite und eine Rückseite hat, und das Auswählen mehrerer Abtaststellen innerhalb des Voxel. Die Technik umfasst ferner die Ermittelung, für jede Abtaststelle, die in den mehreren Abtaststellen enthalten ist, ob die Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist. Ferner beinhaltet die Technik die Speicherung für zumindest eine erste Abtaststelle, die in den mehreren Abtaststellen enthalten ist, eines ersten Ergebnisses in einer Voxel-Maske, das wiedergibt, ob die erste Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft allgemein die Computergrafik und insbesondere die Erzeugung von fehlerbefreiten Voxel-Daten.
  • Beschreibung des Stands der Technik
  • Die Voxel-Bildung ist eine Technik, in der geometrische Objekte (beispielsweise Gitter aus Dreiecken) in volumetrische Bildelemente, die als Voxel bekannt sind, umgewandelt werden. Der Vorgang der Voxel-Bildung kann verglichen werden mit dem Prozess der Rastereinteilung, in welchem geometrische Objekte auf eine Betrachtungsebene projiziert werden und einer oder mehreren Pixelpositionen zugeordnet werden. Während ein Pixel einen zweidimensionalen Bereich einer Betrachtungsebene repräsentiert, repräsentiert jedoch ein Voxel ein würfelartiges Volumen in einer dreidimensionalen Szene. Anstatt einfach zu ermitteln, welches bzw. welche Pixel jedes geometrische Objekt abdeckt, ermittelt somit der Vorgang der Voxel-Bildung, welche Volumenelemente jeweils welches geometrische Objekt schneiden. Sobald eine durch Voxel dargestellte Repräsentation einer dreidimensionalen Szene aufgebaut ist, kann diese für eine Reihe von nachfolgenden Berechnungen verwendet werden, wozu Berechnungen für die Beleuchtung (beispielsweise globale Beleuchtung), für Fluid-Dynamik mit Objektgrenzen und für die Kollisionserkennung für physikalische Simulationen gehören, um nur einige aufzuführen.
  • Konventionelle Grafikverarbeitungssysteme führen für gewöhnlich eine Voxel-Bildung in einer binären Weise aus. D. h., konventionelle Systeme ermitteln, dass ein Voxel entweder „besetzt bzw. belegt” ist – wenn das Voxel von einem geometrischen Objekt geschnitten wird – oder „nicht bestzt” ist – wenn das Voxel von dem geometrischen Objekt nicht geschnitten wird. Diese Art der binären Approximation verursacht diverse Probleme bei der dreidimensionalen Grafik und der Modellierung. Wenn beispielsweise eine aus Voxel aufgebaute Darstellung einer Szene betrachtet wird, die viele bewegte Objekte enthält, kann sich ein Objekt in einem Bild, in welchem es ein Voxel nicht belegt, so bewegen, dass es in dem nächsten Bild das Voxel vollständig besetzt. Diese abrupte Änderung bewirkt, dass Voxel in den Besetzungszustand hinein und heraus „springen”, wenn geometrische Objekte sich in Bezug auf die Szene bewegen (beispielsweise wenn ein Objekt eine Szene durchläuft). In ähnlicher Weise kann eine Ungenauigkeit, die durch die zuvor genannte binäre Approximation eingeführt wird, viele Arten nachfolgender Berechnungen negativ beeinflussen, die unter Anwendung der Voxel-Darstellung ausgeführt werden. Beispielsweise können Rundungsfehler, die durch die obige binäre Approximation eingeführt werden, Rechenungenauigkeiten hervorrufen, wenn beispielsweise nachgeordnete Beleuchtungsberechnungen, Kollisionserkennungsanalysen oder Fluid-dynamische Berechnungen ausgeführt werden.
  • Was daher auf diesem Gebiet der Technik benötigt wird, ist eine effizientere Vorgehensweise, um geometrische Objekte in Voxel einzuteilen.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung gibt ein Verfahren zur Ausführung einer Voxel-Einteilung an. Das Verfahren beinhaltet die Ermittelung eines Voxel, das von einem ersten grafischen Grundelement geschnitten wird, das eine Vorderseite und Rückseite hat, und Auswählen mehrerer Abtaststellen in dem Voxel. Das Verfahren beinhaltet ferner die Ermittelung für jede Abtaststelle, die in den mehreren Abtaststellen enthalten ist, ob die Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist. Schließlich umfasst das Verfahren für mindestens eine erste Abtaststelle, die in den mehreren Abtaststellen enthalten ist, die Speicherung eines ersten Ergebnisses in einer Voxel-Maske, die wiedergibt, ob die erste Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist.
  • Weitere Ausführungsformen stellen ein nicht-flüchtiges computerlesbares Medium und eine Recheneinrichtung zum Ausführen des oben angegebenen Verfahrens bereit.
  • Ein Vorteil der offenbarten Techniken besteht darin, dass die durch Voxel angegebene Darstellung eines geometrischen Objekts effizient aufgebaut und verwendet werden kann, um Werte für die Teilbesetzung und/oder den Einschluss zu ermitteln. Die ermittelten Werte für die Besetzung und/oder den Einschluss können dann verwendet werden, um nachfolgende Grafikoperationen oder Modellierungsberechnungen auszuführen, ohne dass viele Bildfehler und Ungenauigkeiten eingeführt werden, wie dies in konventionellen Ansätzen unter Verwendung von Voxel der Fall ist. Ferner bieten die Voxel-Masken, die Oberflächengleichungen und die skalaren Felder, die hierin beschrieben sind, unterschiedliche Ebenen an Genauigkeit, Präzision und Verarbeitungslast, die ausgewählt und angewendet werden können, um durch Voxel angegebene Darstellungen geometrischer Objekte für eine Fülle von Anwendungen aufzubauen.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Um die Art und Weise, in der die oben genannten Merkmale der Erfindung detailliert verstanden werden können, anzugeben, wird eine speziellere Beschreibung der Erfindung, die zuvor kurz zusammengefasst ist, mit Bezug zu Ausführungsformen angegeben, wovon einige in den angefügten Zeichnungen dargestellt sind. Es ist jedoch zu beachten, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und daher nicht als Einschränkung für ihren Schutzbereich zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulässt.
  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren;
  • 2 zeigt ein Parallelverarbeitungssubsystem gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 2 ist eine Blockansicht eines GPC in einer der PPUs aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline, in die eine oder mehrere der PPUs aus 2 zur Realisierung konfiguriert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5 zeigt die Einteilung in Voxel eines grafischen Grundelements in einer dreidimensionalen Szene gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6A und 6B zeigen eine Technik zur Ausführung einer fehlerbefreiten Einteilung in Voxel mit Mehrfachabtastung (MSAA) gemäß einer Ausführungsform der vorliegenden Erfindung
  • 7A ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer MSAA-Voxel-Einteilung mit einem Voxel gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 7B ist ein Flussdiagramm von Verfahrensschritten zur Analyse von Abtaststellen, die einem Voxel verteilt sind, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 8A und 8B zeigen eine Technik zur Ausführung einer Einteilung in Voxel unter Anwendung von Oberflächengleichungen gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 9 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Einteilung in Voxel unter Verwendung von Oberflächengleichungen gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 10A und 10B zeigen eine Technik zur Ausführung einer Einteilung in Voxel unter Anwendung skalarer Felder gemäß einer Ausführungsform der vorliegenden Erfindung; und
  • 11 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Einteilung in Voxel unter Anwendung von skalaren Feldern gemäß einer Ausführungsform der vorliegenden Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezielle Details angegeben, um ein gründlicheres Verständnis der vorliegenden Erfindung zu ermöglichen. Jedoch erkennt der Fachmann, dass die vorliegende Erfindung auch ohne eines oder mehrerer dieser speziellen Details in die Praxis umgesetzt werden kann.
  • Systemüberblick
  • 1 ist eine Blockansicht, die ein Computersystem 100 darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren. Das Computersystem 100 umfasst eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über einen Verbindungspfad, der eine Speicherbrücke 105 enthalten kann, miteinander in Verbindung stehen. Die Speicherbrücke 105, die beispielsweise ein Nordbrücken-Chip sein kann, ist über einen Bus oder einen anderen Kommunikationspfad 106 (beispielsweise eine HyperTransport-Verbindung) mit einer I/O-(Eingabe/Ausgabe-)Brücke 107 verbunden. Die I/O-Brücke 107, die beispielsweise ein Südbrücken-Chip sein kann, empfängt eine Anwendereingabe aus einem oder mehreren Anwender-Eingabegeräten 108 (beispielsweise Tastatur, Maus) und leitet die Eingabe an die CPU 102 über den Kommunikationspfad 106 und die Speicherbrücke 105 weiter. Ein Parallelverarbeitungssubsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen zweiten Kommunikationspfad 113 (beispielsweise ein peripherer Komponenten-Verbindung-(PCI)Express, ein beschleunigter Graphikport oder eine HyperTransport-Verbindung) verbunden. In einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein Grafiksubsystem, das Pixel einem Anzeigegerät 110 zuleitet, das eine konventionelle Kathodenstrahlröhre, eine Flüssigkristallanzeige, eine Anzeige mit lichtemittierenden Dioden oder dergleichen sein kann. Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden und kann ausgebildet sein, Inhalt und Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112 zu speichern. Die Systemdiskette 114 stellt nicht-flüchtigen Speicherplatz für Anwendungen und Daten bereit und kann fest installierte oder entfernbare Festplattenlaufwerke, Flash-Speichereinrichtungen und CD-(Kompaktdisketten-Nur-Lese-Speicher), DVD-(digitale Vielseitigkeitsdisketten-ROM), Blu-ray, HD-DVD (hochauflösende DVD) oder andere magnetische, optische Speichereinrichtungen oder Halbleiterspeichereinrichtungen umfassen.
  • Ein Schalter bzw. eine Schalteinrichtung 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten, etwa einem Netzwerkadapter 118 und diversen Zusatzkarten 120 und 121 bereit. Andere Komponenten (nicht explizit gezeigt) einschließlich eines universellen seriellen Busses (USB) oder andere Portverbindungen, Kompaktdisketten-(CD-)Laufwerke, digitale Vielseitigkeitsdisketten-(DVD-)Laufwerke, Filmaufzeichnungsgeräte und dergleichen, können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die diversen Kommunikationspfade, die in 1 gezeigt sind, einschließlich der speziell genannten Kommunikationspfade 106 und 113, können unter Anwendung beliebiger geeigneter Protokolle realisiert werden, etwa durch PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Bus- oder Punkt-Zu-Punkt-Kommunikationsprotokolle, und Verbindungen zwischen unterschiedlichen Geräten können unterschiedliche Protokolle benutzen, wie dies im Stand der Technik bekannt ist.
  • In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafikverarbeitung und Videoverarbeitung optimiert ist, wozu beispielsweise eine Videoausgabeschaltung gehört, und das System bildet eine grafische Verarbeitungseinheit (GPU). In einer weiteren Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für die Verarbeitung für Allgemeinzwecke optimiert ist, wobei dennoch die zu Grunde liegende Rechenarchitektur, die nachfolgend detaillierter beschrieben ist, beibehalten ist. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 mit einem oder mehreren anderen Systemelementen zu einem einzelnen Subsystem zusammengefasst sein, etwa durch Vereinigen der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hierin gezeigte System anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, die Anzahl an CPUs 102 und die Anzahl an Parallelverarbeitungssubsystemen 112 kann nach Bedarf modifiziert werden. Beispielsweise ist in einigen Ausführungsformen der Systemspeicher 104 direkt mit der CPU 102 anstatt über eine Brücke verbunden, und andere Geräte kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt mit der Speicherbrücke 105 verbunden. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als ein oder mehrere diskrete Bauelemente vorhanden sind. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehr Parallelverarbeitungssubsysteme 112 aufweisen. Die speziellen Komponenten, die hierin gezeigt sind, sind optional; beispielsweise kann eine beliebige Zahl an Zusatzkarten oder peripheren Geräten unterstützt werden. In einigen Ausführungsformen ist der Schalter 116 weggelassen, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 sind direkt mit der I/O-Brücke 107 verbunden.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten (PPUs) 202, wovon jede mit einem lokalen Parallelverarbeitungs-(PP)Speicher 204 verbunden ist. Im Allgemeinen enthält ein Parallelverarbeitungssubsystem eine Anzahl U an PPUs, wobei U ≥ 1 ist. (Hierin werden mehrere Instanzen gleicher Objekte mit Bezugszeichen belegt, die das Objekt kennzeichnen, und Zahlen in Klammern geben bei Bedarf die Instanz an.) Die PPUs 202 und die Parallelverarbeitungsspeicher 204 können unter Anwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa durch programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC), oder Speichereinrichtungen oder durch eine andere technisch machbare Weise realisiert werden.
  • Es sei wieder auf 1 sowie auf 2 verwiesen; in einigen Ausführungsformen sind einige oder alle der PPUs 202 in dem Parallelverarbeitungssubsystem 112 Grafikprozessoren mit Bilderzeugungs-Pipelines, die konfiguriert werden können, um diverse Operationen auszuführen, die betreffen: die Erzeugung von Pixeldaten aus Grafikdaten (z. B. geometrische Objekte), die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und den zweiten Kommunikationspfad 113 bereitgestellt werden, die Wechselwirkung mit dem lokalen Parallelverarbeitungsspeicher 204 (der als Grafikspeicher verwendbar ist und beispielsweise einen konventionellen Blockpuffer enthält), um Pixeldaten zu speichern und zu aktualisieren, die Zuleitung von Pixeldaten an das Anzeigegerät 110, und dergleichen. In einigen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 aufweisen, die als Grafikprozessoren arbeiten, und kann eine oder mehrere andere PPUs 202 aufweisen, die für Berechnungen für Allgemeinzwecke verwendet werden. Die PPUs 202 können identisch oder unterschiedlich sein, und jede PPU 202 kann einen oder mehrere spezielle Parallelverarbeitungsspeichereinrichtungen oder keinen speziellen Parallelverarbeitungsspeicher aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 können Daten an das Anzeigegerät 110 ausgeben, oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 kann Daten an ein oder mehrere Anzeigegeräte 110 ausgeben.
  • Während des Betriebs ist die CPU 102 der übergeordnete Prozessor des Computersystems 100 und steuert und koordiniert den Betrieb anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom aus Befehlen für jede PPU 202 in eine Datenstruktur (die in 1 oder 2 nicht explizit gezeigt ist), die in dem Systemspeicher 104, dem Parallelverarbeitungsspeicher 204 oder an einer weiteren Speicherstelle liegen kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen kann. Ein Zeiger auf jede Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Stroms aus Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Schiebepuffern aus und führt die Befehle asynchron relativ zu der Arbeitsweise der CPU 102 aus. Es können für jeden Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 Prioritäten für die Ausführung angegeben werden, um die Disponierung der unterschiedlichen Schiebepuffer zu steuern.
  • Es sei nun wieder auf 2 sowie auf 1 verwiesen; jede PPU 202 enthält eine I/O-(Eingabe/Ausgabe-)Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 in Verbindung steht, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) in Verbindung steht. Die Verbindung der PPU 202 mit dem Rest des Computersystems 100 kann auch anders sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Zusatzkarte realisiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 in einem einzelnen Chip zusammen mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 zusammen mit der CPU 102 in einem einzelnen Chip integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Expressverbindung, in der jeder PPU 202 spezielle Bahnen zugeordnet sind, wie dies im Stand der Technik bekannt ist. Es können auch andere Kommunikationspfade verwendet werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113, wodurch die eintreffenden Pakete zu geeigneten Komponenten der PPU 202 weitergeleitet werden. Beispielsweise können Befehle, die Verarbeitungsaufgaben betreffen, an eine Hauptschnittstelle 206 geleitet werden, während Befehle, die Speicheroperationen (beispielsweise das Lesen aus dem oder Schreiben in den Parallelverarbeitungsspeicher 204) betreffen, an eine Speicherkreuzungseinheit 210 geleitet werden können. Die Hauptschnittstelle 206 liest jeden Schiebepuffer aus und gibt den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212 aus.
  • Jede PPU 202 realisiert vorteilhafterweise eine äußerst parallele Verarbeitungsarchitektur. Wie detailliert gezeigt ist, enthält die PPU 202(0) ein Verarbeitung-Cluster-Array 230, das eine Anzahl C an allgemeinen Verarbeitungs-Clustern (GPCs) 208 enthält, wobei C ≥ 1 ist. Jeder GPC208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) Stränge gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPCs 208 zur Verarbeitung unterschiedlicher Arten von Programmen oder zur Ausführung unterschiedlicher Arten von Berechnungen reserviert werden. Die Reservierung bzw. Zuweisung von GPCs 208 kann in Abhängigkeit von der Arbeitslast unterschiedlich sein, die sich für jede Art von Programm oder Berechnung ergibt.
  • Die GPCs 208 empfangen zu verarbeitende Ausführungsaufgabe aus einer Arbeitsverteilungseinheit in einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Metadaten (TMD) (nicht gezeigt) codiert und im Speicher abgelegt sind. Die Zeiger auf die TMD sind in dem Befehlsstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der Hauptschnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indizes von zu verarbeitenden Daten, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind (beispielsweise welches Programm auszuführen ist). Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass die GPCs 208 in einen zulässigen Zustand konfiguriert werden, bevor die Verarbeitung, wie sie durch jeden Satz der TMD spezifiziert ist, initiiert wird. Es kann eine Priorität für jeden Satz an TMD angegeben werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Anfang oder dem Ende einer Liste von Verarbeitungsaufgaben (oder einer Liste aus Zeigern auf die Verarbeitungsaufgaben) hinzuzufügen sind, wodurch eine weitere Ebene einer Steuerung zusätzlich zur Priorität bereitgestellt wird.
  • Eine Speicherschnittstelle 214 enthält eine Anzahl D an Partitionseinheiten 215, die jeweils direkt mit einem Teil des Parallelverarbeitungsspeichers 204 verbunden sind, wobei D ≥ 1 ist. Wie gezeigt, ist generell die Anzahl an Partitionseinheiten 215 gleich der Anzahl an dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 215 gegebenenfalls nicht gleich der Anzahl an Speichereinrichtungen. Der Fachmann auf dem Gebiet erkennt, dass die DRAM 220 durch andere geeignete Speichereinrichtungen ersetzt werden können und dass sie von allgemein konventioneller Gestaltung sein können. Eine detaillierte Beschreibung wird daher weggelassen. Bilderzeugungsziele, etwa Blockpuffer oder Texturzuordnungen, können in den DRAMs 220 gespeichert sein, wodurch es den Partitionseinheiten 215 möglich ist, Bereiche jedes Bilderzeugungsziels parallel zu beschreiben, um in effizienter Weise die verfügbare Bandbreite des Parallelverarbeitungsspeichers 204 auszunutzen.
  • Jeder der GPCs 208 kann Daten verarbeiten, dass Sie in die DRAMs 220 in dem Parallelverarbeitungsspeicher 204 geschrieben werden. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 dem Eingang einer Partitionseinheit 215 oder einem weiteren GPC 208 für die weitere Verarbeitung zuzuleiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um diverse externe Speichereinrichtungen auszulesen oder diese zu beschreiben. In einer Ausführungsform hat die Kreuzungseinheit 210 eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 zu kommunizieren, und hat auch eine Verbindung zu dem lokalen Parallelverarbeitungsspeicher 204, wodurch es den Verarbeitungskernen in den unterschiedlichen GPCs 208 ermöglicht wird, mit dem Systemspeicher 104 oder einem anderen Speicher zu kommunizieren, der nicht lokal für die PPU 202 ist. In der in 2 gezeigten Ausführungsform ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzungseinheit 210 kann virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Wiederum können die GPCs 208 programmiert sein, um Verarbeitungsaufgaben auszuführen, die eine Fülle von Anwendungen betreffen, wozu gehören, ohne Einschränkung: lineare und nichtlineare Datentransformationen, die Berechnung von Oberflächengleichungen (beispielsweise Ebenengleichungen, quadratische Oberflächengleichungen, usw.), und/oder Abstände zu einer Oberfläche, die Filterung von Video- und/oder Audiodaten, Modellierungsoperationen (beispielsweise die Anwendung physikalischer Gesetze zur Bestimmung von Position, Geschwindigkeit und anderer Attribute von Objekten), Bilderzeugungsoperationen (beispielsweise Programme für die Parkettierungs-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel-Schattierung), usw. Die PPUs 202 können Daten aus dem Systemspeicher 104 und/oder dem lokalen Parallelverarbeitungsspeichern 204 in den internen (Chip internen) Speicher übertragen, die Daten verarbeiten und die Ergebnisdaten zurück in den Systemspeicher 104 und/oder in die lokalen Parallelverarbeitungsspeicher 204 schreiben, auf die dort dann von anderen Systemkomponenten zugegriffen werden kann, wozu die CPU 102 und ein weiteres Parallelverarbeitungssubsystem 112 gehören.
  • Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungsspeicher 204 versehen sein, wobei auch kein lokaler Speicher mit eingeschlossen ist, und kann den lokalen Speicher und einen Systemspeicher in beliebiger Kombination verwenden. Beispielsweise kann eine PPU 202 ein Grafikprozessor in einer Ausführungsform mit vereinheitlichter Speicherarchitektur (UMA) sein. In derartigen Ausführungsformen wird wenig oder kein spezieller graphischer (Parallelverarbeitungs-)Speicher bereitgestellt, und die PPU 202 verwendet ausschließlich oder nahezu ausschließlich den Systemspeicher. In UMA-Ausführungsformen kann eine PPU 202 in einem Brückenchip oder einem Prozessorchip integriert sein, oder kann als ein diskreter Chip mit einer Hochgeschwindigkeitsverbindung vorgesehen sein (beispielsweise PCI-Expressverbindung), die die PPU 202 mit dem Systemspeicher über einen Brückenchip oder eine andere Kommunikationseinrichtungen verbindet.
  • Wie zuvor angegeben ist, kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 auf einer einzelnen Zusatzkarte bereitgestellt werden, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 112 verbunden sein, oder eine oder mehrere PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können verschiedene PPUs 202 eine verschiedene Anzahl an Verarbeitungskernen, eine verschiedene Größe an lokalem Parallelverarbeitungsspeicher usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, so dass Daten mit höherem Durchsatz verarbeitet werden, als dies mit einer einzelnen PPU 202 möglich wäre. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren eingerichtet werden, wozu Tischrechner, mobile Rechner oder Hand-Personalcomputer, intelligente Telefone, Dienstleister-Rechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen gehören.
  • 3 ist eine Blockansicht eines GPC 208 in einer der PPUs 202 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann ausgebildet sein, um eine große Anzahl an Strängen parallel auszuführen, wobei der Begriff „Strang” eine Instanz eines speziellen Programms bezeichnet, das an einem speziellen Eingangsdatensatz ausgeführt wird. In einigen Ausführungsformen werden Einzelbefehl-Mehrfach-Daten-(SIMD-)Befehlsausgabetechniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an Strängen zu unterstützen, ohne dass mehrere unabhängige Befehlseinheiten bereitgestellt werden. In anderen Ausführungsformen werden Einzelbefehl-Mehrfach-Strang-(SIMT-)Techniken eingesetzt, um eine parallele Ausführung einer großen Anzahl von im allgemeinen synchronisierten Strängen zu unterstützen, wobei eine gemeinsame Befehlseinheit verwendet wird, die ausgebildet ist, Befehle an eine Gruppe von Verarbeitungseinheiten in jedem der GPCs 208 auszugeben. Anders als bei einem SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, erlaubt eine SIMT-Ausführung, dass unterschiedliche Stränge besser divergenten Ausführungspfaden durch ein gegebenes Strangprogramm hindurch folgen. Der Fachmann erkennt, dass ein SIMD-Verarbeitungsregime eine funktionale Teilmenge eines SIMT-Verarbeitungsregimes bildet.
  • Der Betrieb der GPC 208 wird vorteilhafterweise durch einen Pipeline-Verwalter 305 gesteuert, der Verarbeitungsaufgaben an Datenstrom-Multiprozessoren (SM) 310 verteilt. Der Pipeline-Verwalter 305 kann ferner ausgebildet sein, eine Arbeitsverteilungskreuzungseinheit 330 zu steuern, indem Ziele für verarbeitete Daten, die von den SM 310 ausgegeben werden, spezifiziert werden.
  • In einer Ausführungsform enthält jeder GPC 208 eine Anzahl M von SM 310, wobei M ≥ 1 ist, und wobei jeder SM 310 ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Ferner enthält jeder SM 310 vorteilhafterweise eine identische Gruppe an Funktionsausführungseinheiten (beispielsweise Ausführungseinheiten und Lade-Speichereinheiten), die als Pipeline konfiguriert werden können, wodurch es möglich ist, dass ein neuer Befehl ausgegeben wird, bevor ein vorhergehender Befehl abgeschlossen ist, wie dies im Stand der Technik bekannt ist. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten bereitgestellt werden. In einer Ausführungsform unterstützen die Funktionseinheiten eine Vielzahl von Operationen, wozu gehören: Ganzzahlarithmetik und Gleitkommaarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, EXKLUSIV ODER), Bit-Verschiebung und Berechnung von diversen algebraischen Funktionen (beispielsweise ebene Interpolation, trigonometrische, exponentielle und logarithmische Funktionen usw.); und die gleiche Hardware der Funktionseinheiten kann vorteilhaft genutzt werden, um unterschiedliche Operationen auszuführen, wozu die Ausführung von Operationen zu Einteilung in Voxel gehören (beispielsweise Schnitt- und Projektionsberechnungen, Prüfung von Abtastpositionen, Abstand- und Volumenberechnung, Nachschlagtabelle, usw.).
  • Die Reihe von Befehlen, die an einen speziellen GPC 208 ausgegeben wird, bildet einen Strang, wie dies zuvor hierin definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen in den Parallelverarbeitungseinheiten (nicht gezeigt) innerhalb eines SM 310 wird hierin als eine „Kette” oder „Stranggruppe” bezeichnet. Wie hierin verwendet ist, bezeichnet eine „Stranggruppe” eine Gruppe aus Strängen, die gleichzeitig in dem gleichen Programm mit unterschiedlichen Eingangsdaten ausgeführt werden, wobei ein Strang der Gruppe einer unterschiedlichen Verarbeitungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 aufweisen, in welchem Falle gewisse Verarbeitungseinheiten während Arbeitszyklen untätig sind, wenn diese Stranggruppe gerade verarbeitet wird. Eine Stranggruppe kann auch mehr Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 aufweisen, in welchem Falle die Verarbeitung über aufeinanderfolgende Taktzyklen erfolgt. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig unterstützen kann, ergibt sich, dass bis zu G·M Stranggruppen in dem GPC 208 zu jeder Zeit ausgeführt werden können.
  • Ferner können mehrere in Beziehung stehende Stranggruppen (in unterschiedlichen Phasen der Ausführung) gleichzeitig in einen SM 310 aktiv sein. Diese Ansammlung an Stranggruppen wird hierin als ein „kooperatives Strang-Array” („CTA”) oder „Strang-Array” bezeichnet. Die Größe eines speziellen CTA ist gleich m·k, wobei k die Anzahl an gleichzeitig ausgeführten Strängen in einer Stranggruppe ist und typischerweise ein ganzzahliges Vielfaches der Anzahl an Parallelverarbeitungseinheiten innerhalb des SM 310 ist, und wobei m die Anzahl an Stranggruppen ist, die gleichzeitig in dem SM 310 aktiv ist. Die Größe eines CTA wird generell von dem Programmierer und der Menge an Hardware-Ressourcen bestimmt, etwa von Speichern und Registern, die für das CTA verfügbar sind.
  • Jeder SM 310 enthält einen Cache-Speicher der Ebene eins (L1) oder verwendet Speicherplatz in einem entsprechenden L1-Cache Speicher außerhalb des SM 310, der verwendet wird, um Lade- und Speicheroperationen auszuführen. Jeder SM 310 hat ferner Zugriff auf Cache-Speicher der Ebene zwei (L2), die gemeinsam von allen GPCs 208 benutzt werden und die verwendet werden können, um Daten zwischen Strängen auszutauschen. Schließlich haben die SM 310 auch Zugriff auf einen Chip externen „globalen” Speicher, der beispielsweise den Parallelverarbeitungsspeicher 204 und/oder den Systemspeicher 104 umfassen kann. Zu beachten ist, dass ein beliebiger Speicher außerhalb der PPU 202 als globaler Speicher verwendet werden kann. Ferner kann ein Cache-Speicher der Ebene eins Punkt fünf (L1.5) 335 in dem GPC 208 enthalten sein, der ausgebildet es, Daten zu empfangen und zu halten, die aus dem Speicher über die Speicherschnittstelle 214 abgeholt werden, die von dem SM 310 angefordert wurden, wozu Befehle, gleichförmige Daten und konstante Daten gehören, und ferner ausgebildet ist, die angeforderten Daten dem SM 310 zuzuleiten. Ausführungsformen mit mehreren SM 310 in dem GPC 208 teilen sich vorteilhafterweise gemeinsame Befehle und Daten, die in dem L1.5-Cache-Speicher 335 zwischengespeichert sind.
  • Jeder GPC 208 kann eine Speicherverwaltungseinheit (MMU) 328 enthalten, die ausgebildet ist, virtuelle Adressen physikalischen Adressen zuzuordnen. In anderen Ausführungsformen können eine oder mehrere MMU 328 in der Speicherschnittstelle 214 liegen. Die MMU 328 enthält eine Gruppe aus Seitentabelleneinträgen (PTE), die zur Zuordnung einer virtuellen Adresse zu einer physikalischen Adresse einer Kachel und optional eines Cache-Zeilenindex verwendet wird. Die MMU 328 kann Adressen-Translations-Nebenschaupuffer (TLB) oder Cache-Speicher aufweisen, die in dem Multiprozessor SM 310 oder in dem L1-Cache-Speicher oder dem GPC 208 liegen. Die physikalische Adresse wird verarbeitet, um die Zugriffslokalität für Oberflächendaten zu verteilen, um eine effiziente Verschachtelung von Anforderungen auf Partitionseinheiten 215 zu ermöglichen. Der Cache-Zeilenindex kann verwendet werden, um zu ermitteln, ob eine Anforderung für eine Cache-Zeile ein Treffer oder einen Fehltreffer ist.
  • In Grafikanwendungen und Rechenanwendungen kann ein GPC 208 so ausgebildet sein, dass jeder SM 310 mit einer Textureinheit 315 verbunden ist, um Textur-Abbildungsoperationen, beispielsweise die Ermittelung von Textur-Abtastpositionen, das Auslesen von Texturdaten und die Filterung der Texturdaten auszuführen. Texturdaten werden aus einem internen Textur-L1-Cache-Speicher (nicht gezeigt) oder in einigen Ausführungsformen aus dem L1-Cache-Speicher in dem SM 310 ausgelesen und aus einem L2-Cache-Speicher, der gemeinsam von allen GPCs 208 benutzt wird, aus dem Parallelverarbeitungsspeicher 204 oder dem Systemspeicher 104 nach Bedarf abgeholt werden. Jeder SM 310 gibt verarbeitete Aufgaben an die Arbeitsverteilungskreuzungseinheit 330 aus, um die verarbeitete Aufgabe einem weiteren GPC 208 für die Weiterverarbeitung zuzuleiten oder um die verarbeitete Aufgabe in einem L2-Cache-Speicher, in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 über die Kreuzungseinheit 210 zu speichern. Eine Vor-ROP(Vor-Rasteroperationen-)Einheit 325 ist ausgebildet, Daten aus dem SM 310 zu empfangen, die Daten an die ROP-Einheiten in den Partitionseinheiten 215 weiterzuleiten, und Optimierungen für die Farbmischung auszuführen, die Pixelfarbdaten zu verwalten und Adressenübersetzungen auszuführen.
  • Zu beachten ist, dass die hierin beschriebene Kernarchitektur anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungseinheiten, beispielsweise SM 310 oder Textureinheiten 315, Vor-ROP-Einheiten 325 in einem GPC 208 enthalten sein. Ferner kann, wie in 2 gezeigt ist, eine PPU 202 eine beliebige Anzahl an GPCs 208 enthalten, die vorteilhafterweise ähnlich zueinander arbeiten, so dass das Ausführungsverhalten nicht davon abhängt, welcher GPC 208 welche spezielle Verarbeitungsaufgabe erhält. Ferner arbeitet vorteilhafterweise jeder GPC 208 unabhängig von anderen GPCs 208, wobei separate und unterschiedliche Verarbeitungseinheiten, L1-Cache-Speicher zur Ausführung von Aufgaben für ein oder mehrere Anwendungsprogramme verwendet werden.
  • Der Fachmann erkennt, dass die in den 1, 2 und 3 beschriebene Architektur in keiner Weise den Schutzbereich der vorliegenden Erfindung einschränkt und dass die hierin gelehrten Techniken in einer beliebigen geeignet konfigurierten Verarbeitungseinheit realisiert werden können, wozu gehören, ohne Einschränkung: eine oder mehrere CPUs, eine oder mehrere Multi-Kern-CPUs, eine oder mehrere PPUs 202, ein oder mehrere GPCs 208, eine oder mehrere grafische Verarbeitungseinheiten oder Verwaltungseinheiten für Spezialzwecke und dergleichen, ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen.
  • In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder einen oder mehrere andere Prozessoren eines Rechensystems zu verwenden, um Berechnungen für Allgemeinzwecke unter Verwendung von Strang-Arrays auszuführen. Jedem Strang in dem Strang-Array ist eine eindeutige Strangkennung („Strang-ID”) zugewiesen, auf die der Strang während der Ausführung des Strangs zugreifen kann. Die Strang-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert diverse Aspekte des Verarbeitungsverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welchen Teil eines Eingangsdatensatzes ein Strang zu verarbeiten hat und/oder um zu bestimmen, welchen Teil eines Ausgangsdatensatzes ein Strang zu erzeugen oder zu schreiben hat.
  • Eine Sequenz aus Befehlen pro Strang kann mindestens einen Befehl enthalten, der ein kooperatives Verhalten zwischen dem repräsentativen Strang und einem oder mehreren anderen Strängen des Strang-Arrays angibt. Beispielsweise kann die Sequenz aus Befehlen pro Strang enthalten: einen Befehl, um die Ausführung von Operationen für den repräsentativen Strang an einem speziellen Punkt in der Sequenz zu unterbrechen, bis zu einer Zeit, bei der eine oder mehrere der anderen Stränge diesen speziellen Punkt erreicht haben, einen Befehl für den repräsentativen Strang, Daten in einen gemeinsam benutzten Speicher zu speichern, auf den eine oder mehrere der anderen Stränge Zugriff haben, einen Befehl für den repräsentativen Strang, in atomarer Weise bzw. ungeteilter Weise Daten zu lesen und zu aktualisieren, die in einem gemeinsam benutzten Speicher gespeichert sind, auf den einer oder mehrere der anderen Stränge Zugriff haben auf Grundlage ihrer Strang-ID, oder dergleichen. Das CTA-Programm kann ferner einen Befehl enthalten, um eine Adresse in dem gemeinsam benutzten Speicher zu berechnen, aus der Daten auszulesen sind, wobei die Adresse eine Funktion der Strang-ID ist. Durch die Definition geeigneter Funktionen und durch die Bereitstellung von Synchronisiertechniken können Daten in eine gegebene Speicherstelle in einem gemeinsam benutzten Speicher durch einen Strang eines CTA geschrieben werden, und können aus dieser Speicherstelle von einem anderen Strang des gleichen CTA in vorhersagbarer Weise ausgelesen werden. Folglich kann ein beliebiges gewünschtes Schema an gemeinsamer Datennutzung zwischen Strängen unterstützt werden, und ein beliebiger Strang in einem CTA kann Daten mit einem beliebigen anderen Strang in dem gleichen CTA gemeinsam benutzen. Der Grad, falls verhandeln, einer gemeinsamen Datennutzung zwischen Strängen eines CTA ist durch das CTA-Programm bestimmt; es ist somit zu beachten, dass in einer speziellen Anwendung, die CTAs verwendet, die Stränge eines CTA Daten untereinander gemeinsam nutzen können oder auch nicht, wobei dies von dem CTA-Programm bestimmt ist, und die Begriffe „CTA” und „Strang-Array” werden hierin als Synonym verwendet.
  • Architektur der Grafik-Pipeline
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline 400, in die eine oder mehrere der PPUs 202 aus 2 zur Realisierung konfiguriert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung.
  • Beispielsweise kann einer der GPCs 208 konfiguriert werden, um die Funktionen einer Vertex-Verarbeitungseinheit 415 und/oder einer Geometrie-Verarbeitungseinheit 425 und/oder einer Fragment-Verarbeitungseinheit 460 auszuführen. Die Funktionen eines Daten-Assemblers 410, eines Grundelemente-Assemblers 420, einer Rastereinheit 455 und einer Rasteroperationseinheit 465 können ebenfalls von anderen Verarbeitungseinheiten in einem GPC 208 und einer entsprechenden Partitionseinheit 215 ausgeführt werden. Alternativ kann die Grafikverarbeitungs-Pipeline 400 unter Anwendung spezieller Verarbeitungseinheiten für eine oder mehrere Funktionen realisiert werden.
  • Der Daten-Assembler 410 sammelt Vertex-Daten für Oberflächen höherer Ordnung, Grundelemente und dergleichen und gibt die Vertex-Daten einschließlich den Vertex-Attributen an die Vertex-Verarbeitungseinheit 415 aus. Die Vertex-Verarbeitungseinheit 415 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Vertex-Schattierungsprogramme, Beleuchtung und die Transformation von Vertex-Daten auszuführen, wie dies durch die Vertex-Schattierungsprogramme angegeben ist. Beispielsweise kann die Vertex-Verarbeitungseinheit 415 programmiert sein, um die Vertex-Daten von einer objektbasierten Koordinatendarstellung (Objektraum) in ein Koordinatensystem mit alternativer Basis, etwa einen Welt-Raum oder einen Raum mit normierten Gerätekoordinaten (NDC) zu transformieren. Die Vertex-Verarbeitungseinheit 415 kann ferner Daten lesen, die in einem Cache-Speicher des GPC 208, in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 von dem Daten-Assembler 410 zur Verwendung bei der Verarbeitung der Vertex-Daten gespeichert sind.
  • Der Grundelemente-Assembler 420 empfängt Vertex-Attribute von der Vertex-Verarbeitungseinheit 415, wodurch gespeicherte Vertex-Attribute nach Bedarf gelesen werden, und bildet grafische Grundelemente für die Verarbeitung durch die Geometrie-Verarbeitungseinheit 425. Die grafischen Grundelemente umfassen Dreiecke, Liniensegmente, Punkte und dergleichen. Die Geometrie-Verarbeitungseinheit 425 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Geometrie-Schattierungsprogramme auszuführen, grafische Grundelemente, die aus dem Grundelemente-Assembler 420 empfangen werden, zu transformieren, wie dies durch die Geometrie-Schattierungsprogramme angegeben ist. Ferner kann die Geometrie-Verarbeitungseinheit 425 programmiert sein, Parameter zu berechnen, etwa Koeffizienten für die Ebenengleichung, die verwendet werden, um die neuen grafischen Grundelemente in Raster einzuteilen, um Voxel-Schnitte zu berechnen, um Projektionsberechnungen auszuführen, um Grenzwerte zu berechnen und um andere Arten von Sachsen-Operationen auszuführen.
  • In einigen Ausführungsformen kann die Geometrie-Verarbeitungseinheit 425 auch Elemente in den Geometriestrom einfügen oder aus diesem löschen. Die Geometrie-Verarbeitungseinheit 425 gibt die Parameter und Vertices, die die neuen grafischen Grundelemente spezifizieren, an eine Darstellungsfeldskalier-, Auswahl und Schneideeinheit 450 aus. Die Geometrie-Verarbeitungseinheit viele 25 kann Daten lesen, die in den Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 gespeichert sind, und sie bei der Verarbeitung der geometrischen Daten zu benutzen. Die Darstellungsfeldskalier-, Auswahl und Schneideeinheit 450 führt eine Beschneidung (beispielsweise eine Beschneidung einer Ebene oder Oberfläche auf ein Voxel), eine Auswahl und eine Skalierung des Darstellungsfeldes aus und gibt die verarbeiteten grafischen Grundelemente an eine Rastereinheit 455 aus.
  • Die Rastereinheit 455 konvertiert in abtastender Weise die neuen grafischen Grundelemente und gibt Fragmente und Abdeckungsdaten an die Fragment Verarbeitungseinheit 460 aus. Die Rastereinheit 455 kann eine Einteilung in Raster in zwei Dimensionen und/oder dreidimensional ausführen, um zweidimensionale und/oder dreidimensionale Abdeckungsdaten zu erzeugen. Eine zweidimensionale Abdeckung kann von der Rastereinheit 455 unter Verwendung einer Fehler befreienden Einheit (beispielsweise die Fehler befreiende Hardware mit Mehrfachabtastung (MSAA)) erzeugt werden. Dreidimensionale Abdeckungen können in einer Voxel-Maske gespeichert werden. Ferner kann die Rastereinheit 455 ausgebildet sein, eine z-Auswahl, eine Tiefenprüfung und andere z-basierte Optimierungen auszuführen. Beispielsweise kann die Rastereinheit 455 ausgebildet sein, die Abdeckung eines grafischen Grundelements in Bezug auf eine oder mehrere Abtaststellen und/oder die Tiefe der einen oder mehreren Abtaststellen in Bezug auf das grafische Grundelement zu ermitteln.
  • Die Fragment-Verarbeitungseinheit 460 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Fragment-Schattierungsprogramme auszuführen, wodurch Fragmente, die von der Rastereinheit 455 empfangen werden, zu transformieren, wie dies durch die Fragment-Schattierungsprogramme angegeben ist. Beispielsweise kann die Fragment-Verarbeitungseinheit 460 programmiert sein, um Operationen, etwa perspektivische Korrektur, Texturzuordnungen, Schattierung, Mischung und dergleichen auszuführen, um schattierte Fragmente zu erzeugen, die an die Rasteroperationseinheit 465 ausgegeben werden. Die Fragment-Verarbeitungseinheit 460 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 zur Verwendung bei der Verarbeitung der Fragmentdaten gespeichert sind. Fragmente können auf Ebene von Pixel, Abtastungen oder mit anderer Auflösung abhängig von der programmierten Abtastrate Schattiert werden.
  • Die Rasteroperationseinheit 465 ist eine Verarbeitungseinheit, die Rasteroperationen, etwa Schablone, z-Prüfung, Mischung und dergleichen ausführt, und Pixeldaten als verarbeitete Grafikdaten zur Speicherung im Grafikspeicher ausgibt. Die verarbeiteten Grafikdaten können in dem Grafikspeicher, beispielsweise den Parallelverarbeitungsspeicher 204, und/oder in den Systemspeicher 104 zur Anzeige auf dem Anzeigegerät 110 oder für die Weiterverarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In einigen Ausführungsformen der vorliegenden Erfindung ist die Rasteroperationseinheit 465 ausgebildet, z- oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren, und z- oder Farbdaten, die aus dem Speicher ausgewiesen werden, zu Dekomprimieren.
  • Erzeugung von fehlerbefreiten Voxel-Daten
  • 5 zeigt die Einteilung in Voxel eines grafischen Grundelements 520 in einer dreidimensionalen Szene 500 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in 5 gezeigt ist, repräsentiert jedes Voxel 510 ein würfelartiges Volumen in der Szene 500. Jeder Schnitt zwischen dem Grundelement 520 und einem Voxel 510 kann ein dreidimensionales Voxel-Fragment definieren, das hierin auch als „Fragment” bezeichnet wird.
  • Das Grundelement 520 kann ein Teil eines größeren geometrischen Objekts sein, etwa einer Gitterdarstellung den Dreiecken eines dreidimensionalen Objekt in der dreidimensionalen Szene 500. Folglich kann das Grundelement 520 eine Vorderfläche und eine Rückfläche besitzen. In diversen Ausführungsformen ist die Vorderfläche des Grundelements 520 als die Oberfläche definiert, die nach außen in Bezug zum geometrischen Objekt gewandt ist, und die Rückfläche ist als die Oberfläche definiert, die dem inneren Volumen des geometrischen Objekts zugewandt ist. Die Richtung der Vorderfläche und der Rückfläche des Grundelements 520 kann durch die Oberflächennormale des Grundelements 520 und/oder durch die Reihenfolge angegeben werden, in der die Vertices eines Grundelements 520 angegeben werden. Beispielsweise kann die Vorderfläche des Grundelements 520 durch die Richtung ihrer Oberflächennormale angegeben werden, die durch die Reihenfolge (beispielsweise im Uhrzeigersinn, im Gegenuhrzeigersinn) bestimmt ist, in der die Vertices 525 des Grundelements 520 angegeben sind.
  • Obwohl die folgenden Techniken so beschrieben sind, als dass sie mit speziellen Hardwareeinheiten (beispielsweise der Geometrie-Verarbeitungseinheit 425, der Rastereinheit 455, der Fragment-Verarbeitungseinheit 460, der Rasteroperationseinheit 465, usw.) ausgeführt werden, kann jede nachfolgend beschriebene Technik in gleicher Weise unter Anwendung einer Software, einer speziellen Hardware oder einer Kombination davon ausgeführt werden. Beispielsweise können Techniken, die so beschrieben sind, dass sie unter Anwendung der Rastereinheit 455 ausgeführt werden (beispielsweise die Erzeugung einer Abdeckungsmaske), in gleicher Weise unter Anwendung einer Software (beispielsweise mit der Fragment-Verarbeitungseinheit 460) ausgeführt werden. Ferner können die Techniken, die beschrieben sind, dass sie unter Anwendung von Software ausgeführt werden, stattdessen unter Anwendung einer speziellen Hardware ausgeführt werden. Obwohl die folgenden Techniken so beschrieben sind, dass Abtaststellen verwendet werden, kann jede hierin beschriebene Technik auch unter Anwendung einer anderen Art bzw. anderen Arten von Referenzpunkt oder Referenzpositionen (beispielsweise eine oder mehrere Ecken eines Voxel, eine oder mehrere Kanten eines Voxel, eine oder mehrere Flächen eines Voxel, einen Mittelpunkt, einen oder mehreren Punkten außerhalb der Mitte, usw.) ausgeführt werden.
  • 6A und 6B zeigen eine Technik zur Ausführung einer fehlerbefreiten Voxel-Einteilung mit Mehrfachabtastung (MSAA) gemäß einer Ausführungsform der vorliegenden Erfindung. Die MSAA-Voxel-Einteilung kann ausgeführt werden, indem jede Abtaststelle 610 (beispielsweise 610-1) in dem Voxel 510-1 analysiert wird, um zu ermitteln, ob die Abtaststelle 610 auf der Vorderseite 635 oder der Rückseite 630 eines Grundelements 520-1 liegt. Das Ergebnis dieser Analyse kann in einer Voxel-Maske gespeichert und verwendet werden, um die anteilige Besetzung und/oder den Einschluss (beispielsweise zu welchem Grade das Voxel 510-1 Licht in einer oder mehreren Richtungen blockiert) durch entsprechende Werte für das Voxel 510-1 zu berechnen. Beispielsweise kann die Teilbesetzung abgeschätzt werden als der Anteil an Abtaststellen bzw. Abtastpunkten 610, die innerhalb eines geometrischen Objekts liegen, zu welchem das Grundelement 520-1 gehört (beispielsweise die Anzahl an Abtaststellen 610 auf der Rückseite 630 des Grundelements 520-1). Die Einschlusswerte können abgeschätzt werden, indem die dreidimensionale Abdeckung (beispielsweise in der Voxel-Maske gespeichert) auf eine oder mehrere Ebenen projiziert wird. Nach der Berechnung der Werte für die Teilbesetzung und/oder den Einschluss können diese Werte dann verwendet werden, um nachgeordnete Berechnungen auszuführen, etwa Berechnungen für die Beleuchtung, die Fluid-Dynamik und die Kollisionserkennung. Anschauliche Techniken zur Ausführung einer MSAA-Voxel-Einteilung sind nachfolgend detailliert mit Bezug zu den 7A und 7B beschrieben.
  • 7A ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer MSAA-Voxel-Einteilung gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 14 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 700 im Schritt 710, in welchem die Geometrie-Verarbeitungseinheit 425 ermittelt, dass ein Voxel 510-1 von einem oder mehreren Grundelementen 520 geschnitten wird. Im Schritt 715 wählt die Geometrie-Verarbeitungseinheit 425 ein Grundelement 520-1 aus, das das Voxel 510-1 schneidet, wie in den 6A und 6B gezeigt ist.
  • Als nächstes werden im Schritt 720 mehrere Abtaststellen 610 (beispielsweise 610-1) in dem Voxel 510-1 verteilt. Zusätzlich zu der Verteilung der Abtaststellen, die in den 6A und 6B gezeigt ist, kann die Verteilung von Abtaststellen 610 in dem Voxel 510-1 eine Verteilung von Abtastpunkten 610 auf einer oder mehreren Kanten und/oder Ecken des Voxel 510-1 beinhalten. Die Abtaststellen 610 können auf einem regulären Gitter angeordnet sein, so dass ihre Position auf jede der drei Hauptebenen (beispielsweise x-, y- und z-Ebene) zu dem gleichen Muster führt, wie dies in den 6A und 6B dargestellt ist. Jedoch berücksichtigen Ausführungsformen der vorliegenden Erfindung auch, dass ein beliebiges reguläres oder unregelmäßiges Muster oder Gitter aus Abtaststellen 610 verwendet werden kann.
  • Es kann eine beliebige Anzahl an Abtaststellen 610 in dem Voxel 510-1 verteilt werden. Die Anzahl an Abtaststellen 610 kann beispielsweise auf einer gewünschten Auflösung, Genauigkeit, Verarbeitungsauslastung usw. beruhen. In einer Ausführungsform werden 64 Abtaststellen 610 (beispielsweise Ziffer 4×4×4 Abtaststellen) in dem Voxel 510-1 so verteilt, dass die berechnete Besetzung des Voxel auf 1/64 quantisiert ist. Die Auswahl von zu wenig Abtaststellen 610 kann zu einem „sprunghaften Verhalten” führen, wenn kleine animierte Objekte in Voxel eingeteilt werden, etwa Objekte mit kleinen, scharfen Strukturelementen. Andererseits kann die Auswahl von zu vielen Abtaststellen 610 die Anforderungen für die Verarbeitung über einen gewünschten Grad hinaus erhöhen.
  • Im Schritt 725 analysiert die Rastereinheit 455 (und/oder die Fragment-Verarbeitungseinheit 460) jede Abtaststelle 610, um zu ermitteln, ob die Abtaststelle 610 auf einer Vorderseite 635 oder einer Rückseite 630 des Grundelements 520-1 liegt. Wie zuvor erläutert ist, kann die Tatsache, ob eine Abtaststelle auf der Vorderseite 635 oder der Rückseite 630 des Grundelements 520 liegt, angeben, ob die Abtaststelle außerhalb oder innerhalb eines geometrischen Objekts (beispielsweise eines Dreieck-Gitters) liegt, zu dem das Grundelement 520 gehört.
  • Diese Analyse kann unter Anwendung einer Vielzahl von Techniken ausgeführt werden. Nachfolgend werden zwei anschauliche Techniken beschrieben.
  • In einer ersten Technik bewertet die Rastereinheit 455 (und/oder die Fragment-Verarbeitungseinheit 460) jede Abtaststelle 610 im Vergleich zu einer Ebenen-(oder Oberflächen-)Gleichung, um zu ermitteln, ob die Abtaststelle 610 auf einer Vorderseite 635 oder einen Rückseite 630 der Ebene liegt. Das Ergebnis der Analyse kann in einer Voxel-Maske gespeichert werden, indem beispielsweise ein Maskenbit für jede Abtaststelle 610 auf der Rückseite 630 (oder der Vorderseite 635) der Ebene gesetzt wird. Die Ebenengleichung, in Bezug auf welche jede Abtaststelle 610 bewertet wird, kann auf den Koordinaten der Vertices des Grundelements 520-1 beruhen und/oder kann aus dem Schnitt des Grundelements 520-1 mit dem Voxel 510-1 abgeleitet sein. Beispielsweise kann die Ebenengleichung erhalten werden, indem das Grundelement 520-1 auf das Voxel 510-1 zurechtgeschnitten wird, um eine Gleichung für eine zugeschnittene Ebene 620 zu ermitteln. Ferner kann die Ebenengleichung, in Bezug auf welche die Abtaststelle 610 bewertet wird, eine zusammengesetzte Ebenengleichung (oder Oberflächengleichung höherer Ordnung) sein, die durch Mittelung oder sonstige Zusammenfügung der Schnitte mehrerer Grundelemente 520 berechnet wird.
  • In einer zweiten Technik zur Analyse der Abtaststellen 610 wird das Grundelement 520-1 auf eine zweidimensionale Ebene aus Abtaststellen 610 projiziert, und die Rastereinheit 455 (und/oder die Fragment-Verarbeitungseinheit 460) ermittelt die Abdeckung für die Ebene aus Abtaststellen 610. Die Abtaststellen 610, die in der zweidimensionalen Ebene angeordnet oder ansonsten dazugehören, schließen nur einen Teil der Gesamtzahl an Abtaststellen 610, die in dem Voxel 510-1 verteilt sind, mit ein. Wenn beispielsweise ein 4×4×4-Gitter aus Abtaststellen 610 in dem Voxel 510-1 verteilt ist, dann kann eine zweidimensionale Ebene an Abtaststellen eine 4×4-Ebene aus Abtaststellen 610 (d. h. 16 Abtaststellen) enthalten. Nach der Ermittlung der Abdeckung für die Ebene an Abtaststellen 610 führt die Rastereinheit 455 eine Tiefenprüfung an den Spalten der Abtaststellen 610 über und/oder unter jeder abgedeckten Abtaststelle 610 aus, um zu ermitteln, ob jede Abtaststelle 610 auf der Vorderseite 635 oder auf der Rückseite 630 des Grundelements 520-1 liegt. Die Tiefenprüfung wird nicht ausgeführt für eine oder mehrere Spalten an Abtaststellen 610 über und/oder unter jeder abgedeckten Abtaststelle 610. Eine Ausführungsform dieser Technik ist mit Bezug zu 7B dargestellt.
  • 7B ist ein Flussdiagramm von Verfahrensschritten zur Analyse von Abtaststellen 610, die in einem Voxel 510 verteilt sind, gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 702 im Schritt 750, in welchem die Rastereinheit 455 (und/oder die Fragment-Verarbeitungseinheit 460) eine Ebene auswählt, auf die das Grundelement 520-1 zu projizieren ist. Um die projizierte Fläche des Grundelements 520-1 zu maximieren (beispielsweise um die Wahrscheinlichkeit zu erhöhen, dass die Abdeckung korrekt für alle Abtastungen, die von dem Grundelement 520-1 abgedeckt sind, berechnet wird), kann die ausgewählte Ebene eine Ebene senkrecht zu der dominierenden Achse der Oberflächennormale 640 des Grundelements 520-1 sein. Die dominierende Achse kann eine der Hauptachsen sein (beispielsweise die x-, y- oder z-Achse). In anderen Ausführungsformen kann die Ebene, auf die das Grundelement 520-1 projiziert wird, eine Ebene sein, die eine gewünschte Anzahl an Abtaststellen 610 schneidet, oder eine Ebene mit einer Orientierung, die eine effektive Analyse eines gegebenen Musters oder Gitters an Abtaststellen 610 ermöglicht. Im Schritt 755 projiziert die erste Einheit 455 das Grundelement 520-1 auf die ausgewählte Ebene. Im Schritt 760 ermittelt die Rastereinheit 455 die Abdeckung der Projektion des Grundelements 520-1 für jede Abtaststelle 610 in der ausgewählten Ebene oder für Abtaststellen, die mit der ausgewählten Ebene verknüpft sind.
  • Als nächstes wählt im Schritt 765 die Rastereinheit 455 eine abgedeckte Abtaststelle 610 aus, und im Schritt 770 wird eine Spalte aus Abtaststellen 610, die über und/oder unter der abgedeckten Abtaststellen 610 beläuft, definiert. Jede Abtaststelle 610 in der Spalte an Abtaststellen 610 wird dann von der Rastereinheit 455 im Schritt 775 (beispielsweise durch eine Tiefenprüfung) analysiert, um zu ermitteln, ob die Abtaststelle 610 auf der Vorderseite 635 oder der Rückseite 630 des Grundelements 520-1 liegt. Im Schritt 780 speichert die Rastereinheit 455 die Ergebnisse der Analyse in einer Voxel-Maske, indem beispielsweise ein Bit für die Abtaststelle 610 gesetzt wird, das auf der Rückseite 630 (oder auf der Vorderseite 635) des Grundelements 520-1 liegend ermittelt wurde. Schließlich wählt im Schritt 785 die Rastereinheit 455 eine weitere abgedeckte Abtaststellen 610 bei Bedarf aus, und der Analysevorgangs wird im Schritt 765 wiederholt.
  • Vorteilhafterweise kann die zweite Technik zur Analyse von Abtaststellen 610 die Anzahl an Abtaststellen 610 verringern, die analysiert wird. Wenn beispielsweise die Rastereinheit 455 ermittelt (im Schritt 760), dass eine oder mehrere Abtaststellen 610 nicht abgedeckt sind durch die Projektion des Grundelements 520-1, dann wird keine weitere Analyse an der einen oder den mehreren Spalten aus Abtaststellen 610 über und/oder unter der einen oder den mehreren unabgedeckten Abtaststellen 610 ausgeführt.
  • Nachdem jede Abtaststelle 610 analysiert ist, wird eine Bestimmung durchgeführt im Schritt 730, dahingehend, ob Ergebnisse für das Voxel 510-1 zuvor gespeichert waren. Beispielsweise könnten zuvor Ergebnisse für das Voxel 510-1 gespeichert worden sein, wenn ein oder mehrere andere Grundelemente 520 das Voxel 510-1 schneiden und zuvor analysiert wurden. Wenn keine Ergebnisse für das Voxel 510-1 gespeichert waren, dann werden die im Schritt 725 berechneten Ergebnisse in der Voxel-Maske im Schritt 735 gespeichert. Wenn Ergebnisse zuvor für das Voxel 510-1 gespeichert waren, dann kann die Fragment-Verarbeitungseinheit 460 (oder die Rasteroperationseinheit 465) die im Schritt 725 berechneten Ergebnisse mit den gespeicherten Ergebnisse im Schritt 732 zwischen, indem beispielsweise ein Bool'scher Operator (beispielsweise ODER, UND, NICHT usw.) angewendet wird. Wenn beispielsweise ein Bit für eine Abtaststelle 610 in einem der Ergebnisse gesetzt war, die im Schritt 725 oder in den Ergebnissen, die zuvor in der Voxel-Maske gespeichert waren, dann könnte ein Bit für die Abtaststelle 610 in der gespeicherten Voxel-Maske gesetzt werden. Wenn im Schritt 740 ein weiteres Grundelement 520 das Voxel 510-1 schneidet, dann kann das Grundelement 520 ausgewählt und analysiert werden, wobei im Schritt 715 begonnen wird, und die Ergebnisse können mit der Voxel-Maske im Schritt 737 kombiniert werden.
  • Wenn im Schritt 745 einmal die Abdeckung berechnet und gespeichert ist (beispielsweise in einer Voxel-Maske) für das Voxel 510-1, dann kann die Fragment-Verarbeitungseinheit 460 die Ergebnisse verwenden, um zu ermitteln, auf welche Richtung bzw. Richtungen die Fläche bzw. Flächen des Voxel 510-1 zeigen, und/oder es kann die Krümmung der Oberfläche des Voxel 510-1 ermittelt werden. Die Krümmung kann ermittelt werden, wenn beispielsweise die Kanten von zwei oder mehr Grundelementen 520 in einem Voxel 510 zusammentreffen. Ferner können die Abdeckungsergebnisse verwendet werden, um den Anteil des Voxel 510-1 zu ermitteln, der das oder die Grundelemente 520 schneidet (d. h. den Anteil des Voxel 510-1 auf der Vorderseite 635 oder der Rückseite 630 des einen oder den mehreren Grundelemente 520) und/oder den belegten Anteil des Voxel 510-1 (beispielsweise die Teilbelegung) durch das eine oder die mehreren geometrischen Objekte, zu welchem das eine oder die mehreren Grundelemente 520 gehören. In einer Ausführungsform kann die Teilbelegung des Voxel durch den Anteil an Bits bestimmt werden, die in der Voxel-Maske gesetzt worden sind. Wenn beispielsweise 64 Abtaststellen in dem Voxel 510-1 verteilt sind, und wenn Bits in der Voxel-Maske, die 16 unterschiedlichen Abtaststellen 610 entsprechen, gesetzt worden sind, dann beträgt die Teilbelegung des Voxel 16/64 oder ¼.
  • Die Fragment-Verarbeitungseinheit 460 kann ferner die Voxel-Maske verwenden, um Einschlusswerte (beispielsweise gerichteten Einschluss, Umgebungseinschluss und dergleichen) zu berechnen. Beispielsweise können die gerichteten Einschlusswerte berechnet werden, indem die dreidimensionale Abdeckung, wie sie durch die Voxel-Maske angegeben ist, auf eine oder mehrere Ebenen projiziert wird. In einer Ausführungsform können die Abdeckungsdaten entlang den drei Hauptachsen auf drei Ebenen projiziert werden, und die dreidimensionalen Masken können für das Voxel 510-1 gespeichert werden. Es kann dann der gerichtete Einschluss für einen gegebenen Vektor berechnet werden, indem die zweidimensionalen Masken entsprechend dem Betrag des Vektors in jeder der drei Hauptachsen interpoliert werden. In anderen Ausführungsformen können anstatt der Speicherung der Ergebnisse, die im Schritt 725 berechnet werden, in einer Voxel-Maske die Ergebnisse in drei zweidimensionalen Masken (beispielsweise zur Verbesserung der Speichereffizienz) gespeichert werden. Eine zweidimensionale Maske kann für jede der drei Hauptachsen gespeichert werden. Die Fragment-Verarbeitungseinheit 460 kann dann die zweidimensionalen Masken verwenden, um Einschlusswerte zu berechnen, wie dies zuvor beschrieben ist.
  • Wenn die Anzahl an Abtaststellen 610 pro Voxel 510 hoch ist, kann die Speicherung von drei projizierten zweidimensionalen Masken im Gegensatz zu einer dreidimensionalen Maske die Größe des benötigten Speichers verringern. Insbesondere gilt, dass die Anzahl an Abtaststellen 610 in einer dreidimensionalen Maske mit der dritten Potenz der Auflösung an Abtaststellen 610 ansteigt, wohingegen die Anzahl an Abtaststellen 610 in drei zweidimensionalen Masken mit dem Quadrat der Auflösung der Abtaststellen 610 ansteigt.
  • 8A und 8B zeigen eine Technik zur Ausführung einer Voxel-Einteilung unter Anwendung von Oberflächengleichungen gemäß einer Ausführungsform der vorliegenden Erfindung. Diese spezielle Voxel-Einteilungstechnik kann ausgeführt werden, indem eine Oberflächengleichungen auf der Grundlage eines oder mehrerer Grundelemente 520 (beispielsweise 520-2) ausgeführt wird, die ein Voxel 510 schneiden. Die Oberflächengleichung kann berechnet werden, indem Ebenengleichungen akkumuliert werden, beispielsweise durch Zusammensetzung der Ebenenkoeffizienten für jedes Grundelement 520, das ein Voxel 510 schneidet. Die Oberflächengleichungen kann eine Ebenengleichung (beispielsweise eine gemittelte Normale und einen mittleren Abstand von einem Referenzpunkt in dem Voxel 510) enthalten, oder die Oberflächengleichung kann eine Gleichung höherer Ordnung enthalten (beispielsweise eine quadratische Oberfläche), um in genauerer Weise die Eigenschaften (beispielsweise Krümmung) mehrerer sich schneidender Grundelemente 520 darzustellen. Sobald die Oberflächengleichung berechnet ist, kann diese verwendet werden, um Werte für die Teilbelegung und/oder den Einschluss für das Voxel 510 zu berechnen. Anschauliche Techniken zur Ausführung einer Voxel-Einteilung unter Anwendung von Oberflächengleichungen sind nachfolgend detaillierter Bezug zu 9 beschrieben.
  • 9 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Voxel-Einteilung unter Verwendung von Oberflächengleichungen gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 14 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 900 in einem Schritt 910, in welchem die Geometrie-Verarbeitungseinheit 425 ermittelt, dass ein Voxel 510-2 von einem oder mehreren Grundelemente 520 geschnitten wird. Im Schritt 915 wählt die Geometrie-Verarbeitungseinheit 425 ein Grundelement 520-2 aus, das das Voxel 510-2 schneidet, wie in den 8A und 8B gezeigt ist. Als nächstes berechnet im Schritt 920 die Fragment-Verarbeitungseinheit 460 die Koeffizienten einer Ebene, die durch den Schnitt des Grundelements 520-2 und des Voxel 510-2 definiert ist. Die Koeffizienten der Schnittebene 810 können in Bezug auf einen Referenzpunkt innerhalb des Voxel 510-2 definiert sein. Beispielsweise können Koeffizienten für die Schnittebene 810 in Bezug auf eine Ecke, eine Kante oder die Mitte des Voxel 510-2 berechnet werden.
  • Nachdem die Ebenenkoeffizienten berechnet sind, wird eine Bestimmung durchgeführt im Schritt 925 dahingehend, ob Koeffizienten bereits vorher für das Voxel 510-2 gespeichert waren. Beispielsweise können Koeffizienten zuvor für das Voxel 510-2 gespeichert worden sein, das ein oder mehrere andere Grundelemente 520 das Voxel 510-2 schneidet, und wenn diese zuvor analysiert wurden. Wenn keine Ergebnisse für das Voxel 510-2 gespeichert worden sind, dann werden die im Schritt 920 berechneten Koeffizienten für das Voxel 510-2 im Schritt 930 gespeichert. Wenn Koeffizienten zuvor für das Voxel 510-2 gespeichert waren, dann kann die Rasteroperationseinheit 465 die im Schritt 920 berechneten Koeffizienten mit den gespeicherten Koeffizienten im Schritt 935 kombinieren. Beispielsweise können für die Kombination der Koeffizienten gemittelte Ebenenkoeffizienten berechnet werden, oder es kann eine Oberflächengleichungen höherer Ordnung berechnet werden.
  • Die Akkumulation von Ebenengleichungen zur Berechnung einer gemittelten Ebenengleichung stellt eine akkurate Darstellung der Oberfläche des Voxel 510-2 bereit, wenn die meisten schneidenden Grundelemente 520 grob die gleiche Orientierung besitzen. Jedoch kann die Berechnung einer gemittelten Ebenengleichung eine schlechte Annäherung für die zu Grunde liegende Geometrie bieten, wenn die schneidenden Grundelemente 520 sehr unterschiedliche Orientierungen besitzen. Daher wird unter derartigen Gegebenheiten eine Darstellung mit einer Oberfläche höherer Ordnung verwendet. In einer Ausführungsform wird anstelle der Berechnung und der Speicherung einer gemittelten Ebenengleichung eine quadratische Oberfläche berechnet, wobei drei oder mehr Koeffizienten verwendet werden. Beispielsweise kann eine quadratische Oberfläche unter Anwendung von 10 Koeffizienten einer symmetrischen 4×4 Matrix gespeichert werden. Vorteilhafterweise können quadratische Matrizen einfach aus Ebenengleichungen erhalten werden und können linear kombiniert werden.
  • Zusätzlich zur Speicherung einer gemittelten Ebenen-(oder Oberflächen-)Gleichung kann die Fragment Verarbeitungseinheit 460 eine Krümmung für das Voxel 510-2 (beispielsweise die Größe einer mittleren Krümmung) berechnen und speichern. Wenn beispielsweise die Größe der Krümmung zunimmt, kann die Undurchsichtigkeit für Richtungen senkrecht zu der Ebenenrichtung während nachfolgender Schattierungsoperationen zunehmen. Der Betrag einer Krümmung kann für jeden Vertex des Voxel 510-2 berechnet und gespeichert werden und kann als ein Attribut pro Pixel interpoliert werden.
  • Wenn im Schritt 940 ein weiteres Grundelement 520 das Voxel 510-2 schneidet, dann kann das Grundelement 520 ausgewählt und analysiert werden, wobei im Schritt 915 begonnen wird, der zuvor hierin beschrieben ist, und die Rasteroperationseinheit 465 kann die resultierenden Koeffizienten mit den gespeicherten Koeffizienten im Schritt 935 kombinieren.
  • Sobald schließlich im Schritt 945 Oberflächenkoeffizienten für das Voxel 510-2 berechnet und gespeichert sind, kann die Fragment-Verarbeitungseinheit 460 die Koeffizienten verwenden, um den Betrag (beispielsweise Anteil) des Voxel 510-2 zu ermitteln, der von dem einen oder den mehreren Grundelementen 520 geschnitten wird (d. h. der Anteil des Voxel 510-2 auf der Vorderseite 635 oder der Rückseite 630 des einen oder den mehreren Grundelemente 520) und/oder der Anteil des Voxel (d. h. Teilbelegung), die von dem einen oder den mehreren geometrischen Objekten eingenommen wird, zu welchem das oder die Grundelemente 520 gehören.
  • Eine Technik zur Ermittelung der Teilbelegung besteht darin, einen Kugel-Ebenen-Schnitt auszuführen. Beispielsweise kann die Fragment-Verarbeitungseinheit 460 den Radius einer Kugel berechnen, die die gemittelte Ebene schneidet, wobei der Radius der Kugel einen Abstand von der gemittelten Ebene zu einem Referenzpunkt in dem Voxel (beispielsweise die Mitte des Voxel) repräsentiert. Es kann dann eine eindimensionale Suche mit dem Radius ausgeführt werden, um die Teilbelegung des Voxel 510-2 abzuschätzen. Beispielsweise kann der Radius der Kugel von der Mitte des Voxel 510-2 zu einer Oberfläche der mittleren Ebene berechnet werden. Diese Technik mit Nachschlagtabelle ist rechentechnisch unaufwändig und kann Effekte von Würfelecken berücksichtigen, so dass sich die abgeschätzte Teilbelegung nur graduell ändert, wenn ein Grundelement 520 in das Voxel 510-2 eindringt oder dieses verlässt. Ferner können mehrere Werte der Nachschlagtabelle interpoliert werden (beispielsweise unter Anwendung einer linearen Interpolation), um in genauerer Weise die Belegung abzuschätzen.
  • Eine weitere Technik zur Ermittelung der Teilbelegung umfasst den Schnitt der mittleren Oberfläche mit dem Voxel 510-2 und die Berechnung des Volumens des Voxel 510-2 auf der Rückseite 630 der mittleren Oberfläche (beispielsweise das Volumen des Voxel 510-2 innerhalb des einen oder den mehreren geometrischen Objekte, zu welchem das oder die schneidenden Grundelemente 520 gehören). Da die Ermittlung des genauen Volumens des Voxel 510-2 auf der Rückseite 630 der mittleren Fläche rechentechnisch aufwändig sein kann, kann alternativ eine Suche in einer Nachschlagtabelle ausgeführt werden, um die Teilbelegung zu ermitteln, indem zunächst die mittlere Oberfläche mit einer Ebene mit geringer Genauigkeit abgeschätzt wird.
  • Die Oberflächenkoeffizienten können ferner verwendet werden, um Einschlusswerte (beispielsweise gerichteter Einschluss, Umgebungseinschluss und dergleichen) zu berechnen. Beispielsweise kann die Fragment-Verarbeitungseinheit 460 gerichtete Einschlusswerte berechnen, indem die gemittelte Oberfläche auf das Voxel 510-2 zugeschnitten wird und die zugeschnittene Oberfläche auf eine oder mehrere Ebenen projiziert wird. In einer Ausführungsform kann die zugeschnittene Oberfläche entlang den zwei Hauptachsen auf drei Ebenen projiziert werden, und die resultierenden zweidimensionalen Masken können für das Voxel 510-2 gespeichert werden. Es kann dann der gerichtete Einschluss für einen gegebenen Vektor berechnet werden, indem die zweidimensionalen Masken entsprechend dem Betrag des Vektors in jeder der drei Hauptachsen interpoliert werden. Alternativ kann der gerichtete Einschluss mit anderen analytischen Techniken abgeschätzt werden, indem eine oder mehrere Richtungen abgetastet werden und/oder indem eine Nachschlagtabelle und eine Abschätzung mit geringer Genauigkeit der gemittelten Oberfläche verwendet werden.
  • 10A und 10B zeigen eine Technik zur Ausführung einer Voxel-Einteilung unter Verwendung skalarer Felder gemäß einer Ausführungsform der vorliegenden Erfindung. Diese Voxel-Einteilungstechnik kann ausgeführt werden, indem ein oder mehrere skalare Werte für jedes Grundelement 520 ermittelt werden, das das Voxel 510-2 schneidet. Jeder skalare Wert kann ermittelt werden, indem ein Abstand zwischen der Oberfläche eines Grundelements 520 und einem Referenzpunkt (beispielsweise Abtaststelle 1010-1, Abtaststelle 1010-2 und Abtaststelle 1010-3) in dem Voxel 510-3 gemessen wird. Das resultierende skalare Feld kann dann verwendet werden, um Werte für die Teilbelegung und/oder den Einschluss für das Voxel 510-3 zu bestimmen. Beispielsweise können Werte für die Teilbelegung und den Einschluss ermittelt werden, indem der Betrag und/oder das Vorzeichen eines oder mehrerer skalarer Werte in einem skalaren Feld analysiert werden. Anschauliche Techniken zur Ausführung einer Voxel-Einteilung unter Anwendung skalarer Felder sind nachfolgend detaillierter mit Bezug zu 11 beschrieben.
  • 11 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Voxel-Einteilung unter Anwendung skalarer Felder gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 14 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt.
  • Wie gezeigt beginnt ein Verfahren 1100 im Schritt 1110, in welchem die Geometrie-Verarbeitungseinheit 425 ermittelt, dass ein Voxel 510-3 von einem oder mehreren Grundelemente 520 geschnitten wird. Im Schritt 1115 wählt die Geometrie-Verarbeitungseinheit 425 ein Grundelement 520-2 aus, das das Voxel 510-2 schneidet, wie in den 10A und 10B gezeigt ist. Im Schritt 1120 werden ein oder mehrere Referenzpunkte (beispielsweise Abtaststellen 1010) in dem Voxel 510-2 verteilt. Die Verteilung von Abtaststellen 1010 innerhalb des Voxel 510-2 kann die Verteilung von Abtaststellen 1010 an einer oder mehreren Kanten und/oder Ecken (beispielsweise Vertices) des Voxel 510-3 und/oder an der Mitte des Voxel 510-2 beinhalten. Obwohl die Abtaststellen 1010 in den 10A und 10B so dargestellt sind, dass sie in einem regulären Gitter angeordnet sind, kann ein beliebiges reguläres oder unregelmäßiges Muster oder Gitter an Abtaststellen 1010 verwendet werden.
  • Es kann eine beliebige Anzahl an Abtaststellen 1010 in dem Voxel 510-3 verteilt werden auf der Grundlage von beispielsweise einer gewünschten Auflösung, Genauigkeit, Verarbeitungsauslastung usw. In einer Ausführungsform sind 8 Abtaststellen 1010 an den Ecken des Voxel 510-3 verteilt. Die skalaren Werte, die für diese Abtaststellen gespeichert sind, können gemeinsam sein oder auch nicht (beispielsweise zusammengefasst) zwischen benachbarten Voxel 510. In einer weiteren Ausführungsform kann eine einzelne Abtaststelle 1010 an einer Ecke des Voxel 510-3 oder in der Mitte des Voxel 510-3 angeordnet sein. In einer weiteren Ausführungsform werden für jedes ausgewählte Grundelement 520 nur Abtaststellen 1010 analysiert, die an den Vertices der einen oder mehreren Voxel-Kanten, die von einem Grundelement 520 geschnitten werden, angeordnet sind.
  • Als nächstes berechnet im Schritt 1125 die Fragment-Verarbeitungseinheit 460 ein Abstand zwischen jeder Abtaststelle 1010 und einer Oberfläche des Grundelements 520-3. Die Position auf der Oberfläche des Grundelements 520-3, von der Gitterabstand aus berechnet wird, kann die kürzeste Distanz zwischen der Abtaststelle 1010 und dem Grundelement 520-3 repräsentieren. Auf der Grundlage des Abstands zwischen der Abtaststelle 1010 und der Oberfläche des Grundelements 520-3 kann ein skalarer Wert im Schritt 1130 ermittelt werden. Der skalare Wert kann proportional (oder gleich) sein zu dem berechneten Abstand. Ferner kann der skalare Wert auf der Grundlage einer Fläche des Grundelements 520, das von dem Voxel 510-3 geschnitten wird, berechnet werden (beispielsweise die Fläche der Schnittebene 1020). Ferner kann ein Vorzeichen (das heißt positiv oder negativ) jedem skalaren Wert auf der Grundlage dessen zugeordnet werden, ob die entsprechende Abtaststelle 1010 auf der Vorderseite 635 oder der Rückseite 630 des Grundelements 520-3 liegt. In der in den 10A und 10B gezeigten Ausführungsform werden positive skalare Werte für die Abtaststellen 1010 gespeichert, die als auf der Vorderseite 635 des Grundelements 520 liegend ermittelt werden (beispielsweise die Abtaststelle 1010-2), und es werden negative skalare Werte für Abtaststellen 1010 gespeichert, die als auf der Rückseite 630 eines Grundelements 520 liegend erachtet werden (beispielsweise die Abtaststelle 1010-1). Ferner kann ein Null-Wert jeder Abtaststelle 1010 zugeordnet werden, die als in einer Ebene des Grundelements 520 liegend erachtet wird (beispielsweise die Abtaststelle 1010-3).
  • Skalare Werte, die durch die Analyse mehrerer Grundelemente 520 in Bezug auf eine einzelne Abtaststelle 1010 berechnet werden, können von der Rasteroperationseinheit 465 zusammengefasst werden. Skalare Werte können zusammengefasst werden, wobei die flächenbasierte Gewichtung verändert wird, die jedem Grundelement 520 zugeordnet ist, wie dies zuvor beschrieben ist. In einer Ausführungsform wird nach der Berechnung eines oder mehrerer skalarer Werte für das Grundelement 520 im Schritt 1135 im Hinblick darauf eine Bestimmung durchgeführt, ob skalare Werte zuvor für die eine oder die mehreren Abtaststellen 1010 gespeichert waren. Beispielsweise können skalare Werte zuvor für die eine oder die mehreren Abtaststellen 1010 gespeichert worden sein, wenn ein oder mehrere andere Grundelemente 520 das Voxel 510-3 (oder ein benachbartes Voxel 510) schneiden und zuvor analysiert wurden. Wenn keine Ergebnisse für die Abtaststellen 1010 gespeichert worden sind, dann können die eine oder die mehreren skalaren Werte, die im Schritt 1130 bestimmt wurden, im Schritt 1140 gespeichert werden. Wenn ein oder mehrere skalare Werte zuvor für die eine oder die mehreren Abtaststellen 1010 gespeichert waren, dann können der bzw. die skalaren Werte, die im Schritt 1130 bestimmt wurden, mit dem oder den gespeicherten skalaren Werten im Schritt 1145 kombiniert werden, indem beispielsweise die skalaren Werte summiert werden. Im Schritt 1150 kann, wenn ein weiteres Grundelement 520 das Voxel 510-3 schneidet, dann das Grundelement 520 ausgewählt und analysiert werden, wobei im Schritt 1115 begonnen wird, und der bzw. die ermittelten skalaren Werte können mit dem einen oder mehreren gespeicherten Werten im Schritt 1145 kombiniert werden. Vor der Speicherung der berechneten skalaren Werte können die skalaren Werte, die zu dem Voxel 510-3 gehören, mit einem kleinen positiven (oder negativ) Wert (beispielsweise 1e – 7) initialisiert werden, so dass Voxel 510 nicht so in Erscheinung treten, dass sie Oberflächen enthalten (beispielsweise schneidende Grundelemente 520).
  • Sobald ein skalares Feld (beispielsweise mit einem vorzeichenbehafteten skalaren Wert für jede Abtaststelle 1010) berechnet worden ist, kann im Schritt 1155 die Fragment-Verarbeitungseinheit 460 das skalare Feld verwenden, um den Anteil des Voxel 510-3 zu ermitteln, der von dem einen oder den mehreren Grundelementen 520 geschnitten wird (d. h. der Anteil des Voxel 510-2 auf der Vorderseite 635 oder der Rückseite 630 des einen oder der mehreren Grundelemente 520), und/oder den Anteil des Voxel 519-3 (das heißt, Teilbelegung), der von dem einen oder den mehreren geometrischen Objekten, zu welchem das eine oder die mehreren Grundelemente 520 gehören, eingenommen wird. Die Fragment-Verarbeitungseinheit 460 kann ferner das skalare Feld verwenden, um Einschlusswerte (beispielsweise gerichteten Einschluss, Umgebungseinschluss und dergleichen) zu berechnen.
  • In einer Ausführungsform werden Werte für die Teilbelegung und den Einschluss für das Voxel 510-3 unter Anwendung einer impliziten Oberfläche, einer Linie, eines Punktes usw. ermittelt, an welchem das skalare Feld nach Abschätzung einen Wert von Null aufweist. Die Oberfläche mit Wert Null (oder Linien mit Wert Null) kann dann gemessen, projiziert usw. werden, um die Teilbelegung und den Einschluss zu ermitteln, wie dies zuvor mit Bezug zu den Techniken mit Oberflächengleichung der 8A9 beschrieben ist. Beispielsweise kann der Einschluss abgeschätzt werden, indem die Oberfläche mit dem Wert Null auf eine oder mehrere Ebenen projiziert wird. Ferner können viele andere Techniken eingesetzt werden, wovon einige gewisse Eigenschaften mit den zuvor mit Bezug zu den 59 beschriebenen Techniken aufweisen, um die Belegung bzw. Besetzung und den Einschluss mit dem skalaren Feld zu ermitteln, wie dies nachfolgend beschrieben ist.
  • In einer Technik wird für jedes Voxel 510 eine Durchsuchung einer Nachschlagtabelle ausgeführt, wobei die Vorzeichen der skalaren Werte (beispielsweise die Vorzeichen von skalaren Werten, die Abtaststellen 1010 an den Ecken des Voxel 510 zugeordnet sind) verwendet werden, um die Oberfläche des Voxel 510 mit einer Ebene mit geringer Genauigkeit abzuschätzen. Diese Technik kann vergleichbar sein zu dem Algorithmus mit voranschreitenden Würfeln. Die Belegung und der Einschluss können dann direkt mit einem oder mehreren Werten berechnet werden, die aus der Nachschlagtabelle abgerufen werden, ohne dass die Oberfläche des Voxel 510 berechnet werden muss.
  • In einer weiteren Technik kann der gerichtete Einschluss entlang einer Hauptachse abgeschätzt werden, indem die skalaren Werte, die an den Ecken einer Fläche des Voxel 510-3 angeordnet sind, die senkrecht zu der Hauptachse steht, analysiert werden. Es können dann eine oder mehrere Linien mit Wert null – entlang welcher die skalaren Werte zu null interpoliert werden – auf der Fläche unter Anwendung einer linearen Interpolation berechnet werden. Die Linien mit dem Wert null können verwendet werden, um den gerichteten Einschluss, der mit dem Voxel verknüpft ist, abzuschätzen. Beispielsweise kann ein Wert für den gerichteten Einschluss ermittelt werden, indem ein Verhältnis der Flächen auf jeder Seite der Linien mit Wert null berechnet wird, die auf einer Fläche des Voxel 510-3 gezeichnet wird. In einer noch weiteren Technik können die skalaren Werte, die mit einem Voxel 510 verknüpft sind, addiert werden, und die Summe der skalaren Werte kann verwendet werden, um einen Einschlusswert zu ermitteln. Beispielsweise gibt eine Summe von Null an, dass der Einschluss ungefähr 0,5 (oder 5% eingeschlossen) beträgt, eine positive Summe kann anzeigen, dass der Einschluss kleiner als 0,5 ist, und eine negative Summe kann anzeigen, dass der Einschluss größer als 0,5 ist.
  • Die Größe der Summe kann ferner den Grad angeben, mit welchem der Einschluss über oder unter 0,5 liegt.
  • In noch anderen Ausführungsformen kann ein einzelner skalarer Wert für jedes Voxel 510 ermittelt werden, und der skalare Wert kann direkt auf die Belegung des Voxel 510 abgebildet werden. Die Abbildung des skalaren Wertes auf die Belegung des Voxel 510 kann die Festlegung des skalaren Wertes (S) auf [0, 1, 1 – S] beinhalten. Beispielsweise kann die Belegung approximiert werden, indem der Kehrwert des skalaren Werts 1 – S auf den Bereich [0, 1] festgelegt wird. Diese Technik kann nützlich sein, wenn eine einzelne Abtaststelle 1010 in der Mitte des Voxel 510 angeordnet ist.
  • Obwohl die in den 6A11 dargestellten Techniken im Hinblick auf einzelne Voxel 510 geschrieben sind (beispielsweise 510-1, 510-2, 510-3), kann jede zuvor beschriebene Technik für die Erzeugung von Volumendarstellungen geometrischer Objekte (beispielsweise Gitter aus Grundelementen 520) angewendet werden, die eine beliebige Anzahl und Voxel 510 schneiden.
  • Zusammengefasst gilt: es sind drei Techniken zum Aufbau einer Darstellung mit Voxel-Einteilung eines geometrischen Objekts offenbart. Die fehlerbefreiende Technik mit Mehrfachabtastung für die Ausführung einer Voxel-Einteilung verteilt Abtaststellen bzw. Abtastpunkte in einem Voxel, ermittelt, welche Grundelemente das Voxel schneiden, und analysiert die schneidenden Grundelemente, um zu ermitteln, ob jede Abtaststelle innerhalb oder außerhalb des geometrischen Objekts liegt. Schneidende Grundelemente können in drei Dimensionen analysiert werden, indem alle Abtastungen durchlaufen werden und indem jede Abtastung im Vergleich zu einer oder mehreren dreidimensionalen Ebenengleichungen bewertet wird. Alternativ kann die Abdeckung von Abtaststellen für jedes schneidende Grundelement in zwei Dimensionen ermittelt werden, woran sich eine Tiefenprüfung der Spalte an Abtastungen über und/oder unter jeder abgedeckten Abtastung anschließt. Die resultierende Voxel-Maske wird dann auf eine oder mehrere Referenzebenen projiziert, um Einschlusswerte zu ermitteln, oder die Voxel-Maske wird analysiert, um einen Anteil des Voxel zu ermitteln, der von dem geometrischen Objekt eingenommen wird.
  • Ferner berechnet eine Technik zur Ausführung einer Voxel-Einteilung unter Anwendung von Oberflächengleichungen einen oder mehrere Oberflächenkoeffizienten (beispielsweise Ebenenkoeffizienten) für jedes Grundelement, das das Voxel schneidet. Mehrere Gruppen aus Ebenenkoeffizienten, die mehreren schneidenden Grundelementen entsprechen, werden zusammengefasst, um eine gemittelte Oberfläche für das Voxel 510-2 zu berechnen. Die gemittelte Oberfläche wird unter Anwendung einer zweidimensionalen Ebenengleichung oder unter Anwendung quadratischer Oberflächen mit höherer Ordnung abgeschätzt. Werte für die Teilbelegung und/oder den Einschluss werden dann mit der gemittelten Oberfläche berechnet. Die Berechnung der Teilbelegung kann die Ausführung von Kugel-Ebenen-Schnitten oder die Ausführung von Durchsuchungen von Tabellen unter Anwendung von Ebenen-Abschätzung mit geringer Genauigkeit beinhalten. Ferner können die mehreren Werte der Nachschlagtabelle interpoliert werden (beispielsweise unter Anwendung einer linearen Interpolation), um in genauerer Weise die Belegung abzuschätzen. Der Einschluss kann berechnet werden, indem die gemittelte Oberfläche auf das Voxel zugeschnitten wird und indem die zugeschnittene Oberfläche auf eine oder mehrere Referenzebenen projiziert wird.
  • Schließlich ermittelt eine Technik zur Ausführung einer Voxel-Einteilung unter Anwendung skalarer Felder einen Abstand zwischen jedem Grundelement und einem oder mehreren Referenzpunkten (beispielsweise Abtaststellen), die in dem Voxel verteilt sind. Abtaststellen können verteilt werden, beispielsweise an den Ecken des Voxel und/oder es kann eine einzelne Abtaststelle in der Mitte jedes Voxel angeordnet sein. Es wird ein vorzeichenbehafteter skalarer Wert in einen Daten-Array für jeden Abstand gespeichert, der zwischen einer Abtaststelle und dem Grundelement berechnet wird. Des weiteren können skalare Werte, die für eine gegebene Abtaststelle aufgezeichnet sind, für mehrere Grundelemente zusammengefasst werden, die das Voxel schneiden. Die Teilbelegung und/oder der Einschluss werden dann ermittelt, indem das bzw. die Vorzeichen und Beträge der skalaren Werte, die für die Abtaststelle aufgezeichnet sind, analysiert werden.
  • Ein Vorteil der offenbarten Techniken besteht darin, dass eine Darstellung mit Voxel-Einteilung eines geometrischen Objekts effizient aufgebaut und verwendet werden kann, um Werte für die Teilbelegung und/oder den Einschluss zu ermitteln. Die ermittelten Werte für die Belegung und/oder den Einschluss können dann verwendet werden, um nachfolgende Grafikoperationen oder Modellierungsberechnungen auszuführen, ohne dass viele Bildfehler und Ungenauigkeiten wie in konventionellen Vorgehensweisen bei der Voxel-Einteilung eingeführt werden. Ferner bieten die Voxel-Masken, die Oberflächengleichungen und die skalaren Felder, die hierin beschrieben sind, einen variablen Grad an Genauigkeit, Präzision und Verarbeitungsauslastung, die ausgewählt und angewendet werden können, um in Voxel eingeteilte Darstellungen geometrischer Objekte für eine breite Fülle von Anwendungen aufzubauen.
  • Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert werden. Das bzw. die Programme des Programmprodukts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können in einer Vielzahl von computerlesbaren Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne Einschränkung: (i) nichtbeschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen in einem Computer, etwa CD-ROM-Disketten, die von einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, ROM-Chips oder eine andere Art eines nicht flüchtigen Halbleiterspeichers), auf welchen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder ein Festplattenlaufwerk oder eine andere Art eines Halbleiterspeichers mit wahlfreiem Zugriff), auf welchen änderbare Information gespeichert ist.
  • Die Erfindung ist mit Bezug zu speziellen Ausführungsformen beschrieben worden. Der Fachmann erkennt jedoch, dass diverse Modifizierungen und Änderungen daran vorgenommen werden können, ohne von dem breiteren Grundgedanken und dem Schutzbereich der Erfindung abzuweichen, wie sie in den angefügten Patentansprüchen angegeben ist. Die vorhergehende Beschreibung und die Zeichnungen sind daher als anschaulich und nicht als beschränkend zu betrachten.
  • Daher ist der Schutzbereich der vorliegenden Erfindung durch die folgenden Patentansprüche festgelegt.

Claims (10)

  1. Ein Verfahren zur Ausführung einer Voxel-Einteilung mit: Ermitteln eines Voxel, das von einem ersten grafischen Grundelement geschnitten wird, das eine Vorderseite und eine Rückseite hat; Auswählen mehrerer Abtaststellen innerhalb des Voxel; Ermitteln für jede Abtaststelle, die in den mehreren Abtaststellen enthalten ist, ob die Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist; und für mindestens eine erste Abtaststelle, die in den mehreren Abtaststellen enthalten ist, Speichern eines ersten Ergebnisses in einer Voxel-Maske, das wiedergibt, ob die erste Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist.
  2. Das Verfahren nach Anspruch 1, wobei Ermitteln, ob die Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist, umfasst: Projizieren des ersten grafischen Grundelements auf eine Ebene, die mit einer Teilmenge an Abtaststellen, die in den mehreren Abtaststellen enthalten sind, verknüpft ist; Ausführen mindestens eine Abdeckungsoperation auf der Grundlage des projizierten ersten grafischen Grundelements, um eine oder mehrere abgedeckte Abtaststellen, die in der Teilgruppe aus Abtaststellen enthalten sind, zu ermitteln; und für jede abgedeckte Abtaststelle: Definieren einer Spalte an Abtaststellen, die zu der abgedeckten Abtaststelle gehört; und Ermitteln, ob jede Abtaststelle in der Spalte an Abtaststellen auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist.
  3. Das Verfahren nach Anspruch 2, wobei die Ebene senkrecht zu einer dominierenden Achse einer Normalen steht, die mit dem ersten grafischen Grundelement verknüpft ist.
  4. Das Verfahren nach Anspruch 1, wobei Ermitteln, ob die Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist, umfasst: Bewerten der Abtaststelle gegenüber einer Ebenengleichung, die durch den Schnitt des ersten grafischen Grundelements mit dem Voxel definiert ist.
  5. Das Verfahren nach Anspruch 1, das ferner umfasst: Berechnen, wieviel des Voxel auf der Rückseite des ersten grafischen Grundelements angeordnet ist, auf der Grundlage der Voxel-Maske.
  6. Das Verfahren nach Anspruch 1, das ferner umfasst: Auswählen einer oder mehrerer Abtaststellen, die auf der Rückseite des ersten grafischen Grundelements angeordnet sind; Projizieren der einen oder der mehreren Abtaststellen auf eine erste Ebene, um eine erste zweidimensionale Maske zu berechnen; Projizieren der einen oder der mehreren Abtaststellen auf eine zweite Ebene, um eine zweite zweidimensionale Maske zu berechnen; und Projizieren der einen oder der mehreren Abtaststellen auf eine dritte Ebene, um eine dritte zweidimensionale Maske zu berechnen.
  7. Das Verfahren nach Anspruch 6, das ferner umfasst: Ausführen einer Interpolationsoperation auf der Grundlage von zwei oder mehr der ersten zweidimensionalen Maske, der zweiten zweidimensionalen Maske und der dritten zweidimensionalen Maske, um einen gerichteten Einschluss zu berechnen.
  8. Das Verfahren nach Anspruch 1, das ferner umfasst: Ermitteln, dass das Voxel von einem zweiten grafischen Grundelement geschnitten wird, das eine Vorderseite und eine Rückseite hat; Auswählen der mehreren Abtaststellen innerhalb des Voxel; Ermitteln für jede Abtaststelle, die in den mehreren Abtaststellen enthalten ist, ob die Abtaststelle auf der Vorderseite des zweiten grafischen Grundelements oder auf der Rückseite des zweiten grafischen Grundelements angeordnet ist; und für mindestens die erste Abtaststelle, die in den mehreren Abtaststellen enthalten ist, Speichern eines zweiten Ergebnisses in der Voxel-Maske, das wiedergibt, ob die erste Abtaststelle auf der Vorderseite des zweiten grafischen Grundelements oder auf der Rückseite des zweiten grafischen Grundelements angeordnet ist.
  9. Das Verfahren nach Anspruch 8, wobei Speichern des zweiten Ergebnisses in der Voxel-Maske umfasst: Lesen des ersten Ergebnisses, das in der Voxel-Maske gespeichert ist, wobei das erste Ergebnis und das zweite Ergebnis mit der ersten Abtaststelle verknüpft sind; Erzeugen eines dritten Ergebnisses auf der Grundlage des ersten Ergebnisses und des zweiten Ergebnisses; und Speichern des dritten Ergebnisses in der Voxel-Maske, wobei das dritte Ergebnis mit der ersten Abtaststelle verknüpft ist.
  10. Eine Recheneinrichtung mit: einem Speicher; einer Grafikverarbeitungs-Pipeline, die mit dem Speicher verbunden und ausgebildet ist, eine Voxel-Einteilung auszuführen, durch: Ermitteln eines Voxel, das von einem ersten grafischen Grundelement geschnitten wird, das eine Vorderseite und eine Rückseite hat; Auswählen mehrerer Abtaststellen innerhalb des Voxel; Ermitteln für jede Abtaststelle, die in den mehreren Abtaststellen enthalten ist, ob die Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist; und für zumindest eine erste Abtaststelle, die in den mehreren Abtaststellen enthalten ist, Speichern eines ersten Ergebnisses in einer Voxel-Maske, das wiedergibt, ob die erste Abtaststelle auf der Vorderseite des ersten grafischen Grundelements oder auf der Rückseite des ersten grafischen Grundelements angeordnet ist.
DE201310021044 2013-03-14 2013-12-18 Erzeugung fehlerbefreiter Voxel-Daten Ceased DE102013021044A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/830,106 US20140267264A1 (en) 2013-03-14 2013-03-14 Generating anti-aliased voxel data
US13/830,106 2013-03-14

Publications (1)

Publication Number Publication Date
DE102013021044A1 true DE102013021044A1 (de) 2014-10-02

Family

ID=51503487

Family Applications (1)

Application Number Title Priority Date Filing Date
DE201310021044 Ceased DE102013021044A1 (de) 2013-03-14 2013-12-18 Erzeugung fehlerbefreiter Voxel-Daten

Country Status (4)

Country Link
US (1) US20140267264A1 (de)
CN (1) CN104050719A (de)
DE (1) DE102013021044A1 (de)
TW (1) TW201447813A (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9245376B2 (en) * 2013-05-14 2016-01-26 Roblox Corporation Lighting management in virtual worlds
US9715761B2 (en) * 2013-07-08 2017-07-25 Vangogh Imaging, Inc. Real-time 3D computer vision processing engine for object recognition, reconstruction, and analysis
US9984498B2 (en) * 2013-07-17 2018-05-29 Microsoft Technology Licensing, Llc Sparse GPU voxelization for 3D surface reconstruction
US9710960B2 (en) 2014-12-04 2017-07-18 Vangogh Imaging, Inc. Closed-form 3D model generation of non-rigid complex objects from incomplete and noisy scans
US10882185B2 (en) * 2017-02-07 2021-01-05 Veo Robotics, Inc. Dynamically determining workspace safe zones with speed and separation monitoring

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5369739A (en) * 1993-07-09 1994-11-29 Silicon Graphics, Inc. Apparatus and method for generating point sample masks in a graphics display system
CN102842141B (zh) * 2012-07-03 2015-03-11 东南大学 一种旋转x射线造影图像迭代重建方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CHEN, Y.: Robust and Accurate Boolean Operations on Polygonal Models. Proceedings of the 2007 ASME Design Engineering Technical Conferences and Computers and Information in Engineering Conference, 2007, Artikel DETC2007-35731, S. 1-13. *
HUANG, J. [et al.]: A complete distance field representation. Proceedings of the conference on Visualization '01, VIS’01, 2001, S. 247-254.
HUANG, J. [et al.]: A complete distance field representation. Proceedings of the conference on Visualization '01, VIS'01, 2001, S. 247-254. *

Also Published As

Publication number Publication date
US20140267264A1 (en) 2014-09-18
TW201447813A (zh) 2014-12-16
CN104050719A (zh) 2014-09-17

Similar Documents

Publication Publication Date Title
DE102013021046A1 (de) Erzeugung fehlerbefreiter Voxel-Daten
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102015113797B4 (de) Relative Kodierung für eine blockbasierte Begrenzungsvolumenhierarchie
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102013114090B4 (de) Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE102008034519B4 (de) Aufgeteilte Datenstruktur, und Verfahren zum Laden einer Partikel-basierten Simulation unter Verwendung der aufgeteilten Datenstruktur in GPU, usw.
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102019103059A1 (de) Hieb- und stichfester Strahl-Dreieck-Schnittpunkt
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE102015113240A1 (de) System, verfahren und computerprogrammprodukt für schattierung unter verwendung eines dynamischen objektraumgitters
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE102013022257A1 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
DE102016109905A1 (de) Stückweise lineare unregelmäßige Rasterisierung
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE112013005255T5 (de) Bedarfsweise Geometrie- und Beschleunigungsstrukturerzeugung
DE102013114373A1 (de) Konsistente Vertex-Einrastung für Rendering mit variabler Auflösung
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102013222685A1 (de) System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte
DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung
DE102013018136A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013020966A1 (de) Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06T0017100000

Ipc: G06T0015080000

R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final