DE102013222685B4 - System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte - Google Patents

System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte Download PDF

Info

Publication number
DE102013222685B4
DE102013222685B4 DE102013222685.3A DE102013222685A DE102013222685B4 DE 102013222685 B4 DE102013222685 B4 DE 102013222685B4 DE 102013222685 A DE102013222685 A DE 102013222685A DE 102013222685 B4 DE102013222685 B4 DE 102013222685B4
Authority
DE
Germany
Prior art keywords
depth map
hierarchical depth
level
pixel
resolution
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.)
Active
Application number
DE102013222685.3A
Other languages
English (en)
Other versions
DE102013222685A1 (de
Inventor
Morgan McGuire
David Patrick Luebke
Michael Thomas Mara
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 DE102013222685A1 publication Critical patent/DE102013222685A1/de
Application granted granted Critical
Publication of DE102013222685B4 publication Critical patent/DE102013222685B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/506Illumination models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/55Radiosity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2215/00Indexing scheme for image rendering
    • G06T2215/12Shadow map, environment map

Landscapes

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

Abstract

Verfahren, aufweisend:
Erzeugen einer hierarchischen Tiefe-Karte, wobei die hierarchische Tiefe-Karte zumindest zwei Level umfasst; und
Lesen eines Wertes, welcher mit einem Probe-Pixel assoziiert ist, von einem Ziel-Level der hierarchischen Tiefe-Karte basierend auf einer Differenz zwischen dem Probe-Pixel und einem Ziel-Pixel,
wobei der Ziel-Level der hierarchischen Tiefe-Karte berechnet wird, indem ein Logarithmus zur Basis zwei eines Verhältnisses eines Abstandes zwischen einer Schirmraum-Stelle des abgetasteten Pixels zu einer Schirmraum-Stelle eines Ziel-Pixels zu einem Schirmraum-Radius-Inkrement-Wert genommen wird.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft Computer-Grafik und insbesondere Algorithmen, welche Tiefe-Puffer verwenden.
  • HINTERGRUND
  • Tiefe-Puffer speichern eine Mehrzahl von Werten, welche eine Tiefe für Oberflächen von Objekten in einer dreidimensionalen Szene anzeigen. Tiefe-Puffer werden für viele Typen von Computer-Grafik-Render-Anwendungen implementiert. Ein Tiefe-Wert kann benutzt werden, um zu bestimmen, ob ein Objekt von anderen Objekten relativ zu einem bestimmten Sichtpunkt verdeckt ist (occluded). Typischerweise umfasst ein Tiefe-Puffer eine Mehrzahl von Werten, welche mit einer entsprechenden Mehrzahl von Pixeln in einem Digital-Bild assoziiert sind. Jeder Wert in dem Tiefe-Puffer kann die Tiefe des nahesten Objektes zu einem Sichtpunkt repräsentieren, entsprechend einem bestimmten Pixel.
  • Einige Algorithmen, wie etwa Schirmraum-Umgebung-Verdeckung-Algorithmen, tasten (sample) eine Mehrzahl von verschiedenen Werten innerhalb des Tiefe-Puffers ab, um einen Umgebungs-Verdeckungs-(ambient obscurance)-(AO)-Wert für jedes Pixel zu berechnen. Die Netto-Performance dieser Techniken leidet aufgrund einer großen Anzahl von verstreuten Lese-Operationen des Tiefe-Puffers, was eine niedrige Zwischenspeicher-Effizienz ergibt. Somit gibt es einen Bedarf zum Adressieren dieses Problems und/oder anderer Probleme, welche mit dem Stand der Technik assoziiert sind.
  • Die Veröffentlichung „Scalable Ambient Obscurance“ von McGuire et al. in den Proceedings der vierten ACM SIGGRAPH/Eurografik-Konferenz über Hochleistungsgrafik, der Eurografik-Assoziation, Seite 97-103, vom 25. Juni 2012 offenbart eine Variante des konventionellen Alchemie-Umgebungsverdunkelungs-(AO) Algorithmus, in welchem lediglich ein standardmäßiger Tiefen-Puffer für die Eingabe erforderlich ist, und der eine Aufwärtsskalierung zu hohen Auflösungen und Welt-Raum-Abtastradii vornimmt, um bekannte Einschränkungen in dem konventionellen AO-Algorithmus zu beheben, in welchem die Cache-Speicher-Effizienz abnimmt, wenn Abtastungen bzw. Proben entfernt von einem Pixel gesammelt werden.
  • ZUSAMMENFASSUNG
  • Ein System, Verfahren und Computer-Programm-Produkt sind zum Abtasten einer hierarchischen Tiefe-Karte bereitgestellt. Eine Herangehensweise zum Abtasten der hierarchischen Tiefe-Maske umfasst die Schritte eines Generierens einer hierarchischen Tiefe-Karte und eines Lesens eines Wertes, welcher mit einem Probe-Pixel (sample pixel) assoziiert ist, von einem Ziel-Level der hierarchischen Tiefe-Karte basierend auf einer Differenz zwischen dem Probe-Pixel und einem Ziel-Pixel. Die hierarchische Tiefe-Karte umfasst zumindest zwei Level. Der Ziel-Level der hierarchischen Tiefe-Karte wird berechnet, indem ein Logarithmus zur Basis zwei eines Verhältnisses eines Abstandes zwischen einer Schirmraum-Stelle des abgetasteten Pixels zu einer Schirmraum-Stelle eines Ziel-Pixels zu einem Schirmraum-Radius-Inkrement-Wert genommen wird.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
    • 1 illustriert ein Flussdiagramm eines Verfahrens zum Abtasten einer hierarchischen Tiefe-Karte in Übereinstimmung mit einer Ausführungsform;
    • 2 illustriert ein Flussdiagramm eines Verfahrens zum Implementieren eines Algorithmus für skalierbare Umgebungs-Verdeckung in Übereinstimmung mit einer Ausführungsform;
    • 3 illustriert eine hierarchische Tiefe-Karte in Übereinstimmung mit einer Ausführungsform;
    • 4 illustriert eine Mehrzahl von Probe-Pixeln für ein Ziel-Pixel in einem skalierbaren Umgebungs-Verdeckungs-Algorithmus in Übereinstimmung mit einer Ausführungsform;
    • 5 illustriert eine Parallel-Verarbeitungs-Einheit (PPU) gemäß einer Ausführungsform;
    • 6 illustriert den Streaming-Mehrfach-Prozessor von 5 gemäß einer Ausführungsform; und
    • 7 illustriert ein exemplarisches System, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert werden kann.
  • DETAILLIERTE BESCHREIBUNG
  • Viele verschiedene Typen von Render-Algorithmen (rendering algorithms) benutzen Tiefe-Puffer (d.h. Z-Puffer) in einer oder mehr Berechnungen als Teil des Algorithmus. Zum Beispiel erzeugen Umgebungs-Verdeckungs- (Ambient Occlusion) (AO)-Algorithmen einen Schattierungs-Effekt, um die Weise zu approximieren, in welcher Licht in der realen Welt strahlt. Die AO-Algorithmen bestimmen die Menge, mittels welcher nahe angeordnete Geometrie einen spezifischen Punkt auf einer Oberfläche verdeckt (occludes). Wenn die nahe gelegene Geometrie den Punkt verdeckt, kann dann der Punkt gerendert werden, um einen Schatten zu umfassen (z.B. mit einer niedrigeren Intensität gerendert werden). Wenn jedoch eine nahegelegene Geometrie den Punkt nicht verdeckt, dann kann der Punkt ohne einen Schatten gerendert werden (z.B. mit einer höheren Intensität gerendert werden). Es wird von einem gewöhnlichen Fachmann in der Technik geschätzt werden, dass ein Durchführen von Umgebungs-Verdeckung berechnet im Modell-Raum (d.h. mittels eines Abtastens jedes Objekts, um zu bestimmen, ob das Objekt den Punkt verdeckt) nicht in Echtzeit bei der vollen Hochdefinitions-Auflösung unter Benutzung von konventionellen GPUs durchgeführt werden kann, während interaktive Frame-Raten aufrechterhalten sind. Daher ist eine Technik, welche ausreichende Approximationen für einen vollen AO-Algorithmus erzeugt, Schirmraum-Umgebungs-Verdeckung (screen space ambient occlusion) (SSAO).
  • In SSAO-Algorithmen ist das Modell zuerst gerastert, um einen Tiefe-Puffer zu erzeugen, welcher jede Pixel-Stelle (oder Probe-Stelle, wenn der Tiefe-Puffer bei einer Sub-Pixel-Auflösung implementiert ist) mit einer Tiefe der Geometrie assoziiert, welche am nahesten zu dem Sichtpunkt für das Pixel ist. Sobald der Tiefe-Puffer erzeugt ist, kann eine approximative Umgebungs-Verdeckung für ein Pixel dadurch berechnet werden, dass eine Mehrzahl von nahegelegenen Pixeln abgetastet werden, um zu bestimmen, ob dieses Pixel wahrscheinlich von der nahegelegenen Geometrie verdeckt ist. In einigen SSAO-Algorithmen können sowohl die Tiefe und die Oberflächen-Normale für jeden Pixel benutzt werden, um die approximative Verdeckung zu bestimmen. Konventionelle SSAO-Algorithmen haben eine schwache Performance aufgrund der Streuung der abgetasteten Punkte in dem Tiefe-Puffer, was eine niedrige Zwischenspeicher-Effizienz ergibt und eine große Zahl von Lang-Latenz-Speicher-Zugriffs-Anfragen erzeugt.
  • Eine beispielhafte Technik zum Kodieren von Tiefe-Puffern ist offenbart, welche Performance von Algorithmen verbessert, welche eine große Zahl von verstreuten Einträgen in dem Tiefe-Puffer abtasten, um dadurch eine Zwischenspeicher-Effizienz zu verbessern und die Anzahl von Lang-Latenz-Speicher-Zugriffs-Anfragen zum Abtasten von nahegelegenen Einträgen zu vermindern.
  • 1 illustriert ein Flussdiagramm eines Verfahrens 100 zum Abtasten einer hierarchischen Tiefe-Karte in Übereinstimmung mit einer Ausführungsform. Bei Schritt 102 wird eine hierarchische Tiefe-Karte erzeugt. In einer Ausführungsform ist die hierarchische Tiefe-Karte ein Feld von Werten, welche zwei oder mehr Levels haben, wobei ein erster Level basierend auf einer Mehrzahl von Werten in einem Tiefe-Puffer populiert ist und wobei ein zweiter Level mit einer Untermenge von Werten von dem ersten Level populiert ist. Bei Schritt 104 wird ein Wert, welcher mit einem Probe-Pixel assoziiert ist, von einem Ziel-Level der hierarchischen Tiefe-Karte gelesen. In einer Ausführungsform ist der Ziel-Level auf einem Abstand des Probe-Pixels von einem Ziel-Pixel basiert. Es sollte bemerkt sein, dass, während verschiedene optionale Merkmale hierin im Zusammenhang mit der hierarchischen Tiefe-Karte ausgeführt sind, solche Merkmale nur für illustrative Zwecke ausgeführt sind und nicht betrachtet werden sollten, in irgendeiner Weise zu begrenzen.
  • 2 illustriert ein Flussdiagramm eines Verfahrens 200 zum Implementieren eines Algorithmus zur skalierbaren Umgebungs-Verdeckung (scalable ambient obscurance) (SAO), in Übereinstimmung mit einer Ausführungsform. Es sollte deutlich bemerkt sein, dass die folgende Information für illustrative Zwecke ausgeführt ist und nicht interpretiert werden sollte, in irgendeiner Weise zu begrenzen, da andere Algorithmen hierarchische Tiefe-Masken zusätzlich zu oder anstatt des SAO-Algorithmus benutzen können, welcher mittels des Flussdiagramms von 2 illustriert ist.
  • Bei Schritt 202 ist ein Tiefe-Puffer dadurch erzeugt, dass ein Hoch-Präzisions-Z-Durchgang (Z-pass) in einer Grafik-Verarbeitungs-Einheit (GPU) durchgeführt wird. In einer Ausführungsform ist der Hoch-Präzisions-Z-Durchgang als ein Nur-Tiefe-Vor-Durchgang (depth-only pre-pass) durch eine GPU durchgeführt. Ein Satz von Modell-Daten (d.h. Grafik-Primitive, wie etwa Dreiecke, Quader oder Dreiecks-Streifen) wird an eine GPU übermittelt. Die Modell-Daten werden transformiert und in Tiefe gerastert, um eine z-Koordinate für jedes Fragment zu erzeugen (d.h. ein Teil eines Pixels, welcher mit einem gegebenen Oberflächen-Objekt assoziiert ist). Die z-Koordinate wird gegen alle anderen z-Koordinaten getestet, welche mit dieser Pixel-Stelle assoziiert sind, um das naheste Objekt zu einem bestimmten Sichtpunkt zu bestimmen, und wenn die z-Koordinate das naheste Objekt ist, dann wird die z-Koordinate in dem Tiefe-Puffer bei einem Eintrag, welcher dieser Pixel-Stelle entspricht, gespeichert. Sobald alle der Modell-Daten gerastert worden sind, repräsentiert der resultierende Tiefe-Puffer die Länge eines Strahls von dem Sichtpunkt zu der nahegelegensten Oberfläche bei jeder Pixel-Stelle in einem gerasterten Bild.
  • Um die Genauigkeit von Resultaten in dem SAO-Algorithmus zu erhöhen, sollte darauf geachtet werden, den Tiefe-Puffer mit der höchstmöglichen Präzision zu populieren. In einer Ausführungsform kann die Präzision des Tiefe-Puffers dadurch erhöht werden, dass die folgenden Optimierungen implementiert werden. Eine Modell-Ansicht-Projektions-Matrix kann bei einer doppelten Präzision auf einem Host-Prozessor vor einem Umformen bzw. Werfen der Modell-Ansicht-Projektions-Matrix auf eine einfache Präzision für Transformationen berechnet werden, welche in Vertex-Schattierern (Vertex shaders) auf der GPU durchgeführt werden. Für die Modell-Ansicht-Projektions-Matrix kann eine ferne Abschneide-Ebene (far clipping plane) bei einer Tiefe von negativ unendlich (-∞) gewählt werden, was die Anzahl von Fließpunkt-Operationen vermindern kann, welche durchgeführt werden, wenn das Matrix-Produkt berechnet wird. Wenn Transformationen in der GPU berechnet werden, kann zusätzlich eine Hälfte eines Bits von Präzision gespart werden, indem Vektoren auf der Linken von Spalten-Haupt-Matrizen multipliziert werden (z.B. die Modell-Ansicht-Projektions-Matrix). Es wird geschätzt werden, dass die Optimierungen oben nur Vorschläge zum Verbessern der Genauigkeit des Algorithmus sind und nicht interpretiert werden sollten, in irgendeiner Weise zu begrenzen.
  • Bei Schritt 204 wird eine hierarchische Tiefe-Karte basierend auf dem Tiefe-Puffer erzeugt. In einer Ausführungsform ist der Tiefe-Puffer benutzt, um einen Basis-Level der hierarchischen Tiefe-Maske zu populieren. Typischerweise speichert der Tiefe-Puffer, welcher mittels der GPUs erzeugt ist, Tiefe-Werte als Fließpunkt-Werte zwischen Null und eins. Der Basis-Level der hierarchischen Tiefe-Karte konvertiert die Tiefe-Werte in dem Tiefe-Puffer auf Kamera-Raum-Werte, welche einen z-Wert zwischen der Stelle der nahen Abschneide-Ebene (zn) und der Stelle der fernen Abschneide-Ebene (zf) anzeigen. Aufeinanderfolgend höhere Level der hierarchischen Tiefe-Karte werden populiert, indem eine Untermenge von Werten von dem nächst niedrigeren Level der hierarchischen Tiefe-Maske ausgewählt wird. Die hierarchische Tiefe-Karte umfasst zumindest zwei Level, einen Basis-Level, welcher der vollen Auflösung des Digital-Bildes entspricht, und einen ersten Level, welcher einer Auflösung entspricht, welche geringer ist als die des Basis-Levels (z.B. die Hälfte der Auflösung des Basis-Levels). Die höheren Level der hierarchischen Tiefe-Karte (d.h. Level 1, Level 2, etc.) stellen sicher, dass räumlich verteilte Proben mit hoher Zwischenspeicher-Effizienz gelesen werden (d.h. angrenzende Pixel, welche in paralleler Weise mittels der GPU verarbeitet werden, werden typischerweise dieselben Proben von der hierarchischen Tiefe-Karte lesen, wenn Pixel weiter weg von der Ziel-Pixel-Stelle abgetastet werden). Weil ein kleiner Bereich jedes Levels der hierarchischen Tiefe-Karte in dem Zwischenspeicher verbleibt, werden weniger Lese-Anfragen an den Speicher übermittelt (d.h. DRAM), was zu einer höheren Bandbreite und zu einer niedrigen Latenz führt.
  • Bei Schritt 206 wird für jedes Ziel-Pixel eines Digital-Bildes, für welches der SAO-Algorithmus ausgeführt wird, eine Mehrzahl von Probe-Pixel ausgewählt. In einer Ausführungsform ist für jedes Ziel-Pixel, die Mehrzahl von Probe-Pixeln auf einer Halbkugel um einen Punkt C verteilt, welcher bei einem Punkt auf einer Oberfläche zentriert ist, welche mittels eines Strahls geschnitten ist, welcher von dem Sichtpunkt in einer Richtung projiziert ist, welche mit dem Ziel-Pixel assoziiert ist. In einer Ausführungsform ist der Punkt C von einem Wert zC rekonstruiert, welcher von dem Basis-Level der hierarchischen Tiefe-Karte bei einem Index gelesen ist, welcher mit dem Ziel-Pixel assoziiert ist, gegeben mittels einer x-Koordinate (x') und einer y-Koordinate (y'). Die x-Koordinate und y-Koordinate des Punktes C sind mittels der Gleichungen gegeben: x c = z c ( 1 P 0,2 P 0,0 2 ( x ' + 1 2 ) w P 0,0 )
    Figure DE102013222685B4_0001
    y c = z c ( 1 + P 1,2 P 1,2 2 ( y ' + 1 2 ) h P 1,1 )
    Figure DE102013222685B4_0002
    n ^ c = n o r m a l i z e ( C y ' + C x ' )
    Figure DE102013222685B4_0003
  • In Gleichungen 1 und 2 repräsentieren w und h die Breite und die Höhe des Digital-Bildes und P ist die Modell-Ansicht-Projektions-Matrix. Gleichungen 1 und 2 invertieren die Projektions-Matrix bei einem Pixel (x', y'), um einen Kamera-Raum-Positions-Punkt C zu finden. Gleichung 3 gibt die geschätzte Oberflächen-Normale bei Punkt C basierend auf dem Schirm-Raum-Gradienten von z, welcher die Orientierung der Halbkugel (half-ball) ergibt. Der Welt-Raum-Radius der Halbkugel r entspricht dem Schirm-Raum-Radius r', welcher mittels der Gleichung gegeben ist: r ' = r S ' Z c
    Figure DE102013222685B4_0004
  • In Gleichung 3 ist S' die Pixel-Größe eines Ein-Meter-Radius-Objekts bei z gleich dem Negativen von einem Meter. In einer Ausführungsform ist die Mehrzahl von Proben-Punkten in einem Spiral-Muster um das Ziel-Pixel platziert. Jedes Probe-Pixel (si) ist bei einem anderen Abstand (hi) von dem Ziel-Pixel gegeben mittels Gleichung 7, unten gezeigt, lokalisiert. Die Stelle jedes der Proben-Pixel kann mittels der folgenden Gleichungen gegeben sein: s i = x ' , y ' + h i ' u ^ i
    Figure DE102013222685B4_0005
    a i = 1 s ( i + 0.5 )
    Figure DE102013222685B4_0006
    h i ' = r ' a i ;   θ i = 2 π a i τ + φ
    Figure DE102013222685B4_0007
    u ^ i = cos θ , sin θ
    Figure DE102013222685B4_0008
    φ = 30 x ' y ' ¯ + 10 x ' y '
    Figure DE102013222685B4_0009
  • In Gleichung 7 ist die Konstante τ die Anzahl von Drehungen (turns) in der Spirale und eine Winkel-Verschiebung (angular offset) φ ist der Drehwinkel, welcher durch Gleichung 9 gegeben ist. In anderen Ausführungsformen kann die Mehrzahl von Probe-Pixeln zufällig auf der Oberfläche der Halbkugel verteilt sein. Es sollte jedoch bemerkt werden, dass eine zufällige Verteilung das Potential hat, die Ergebnisse zu verdrehen (skew), wenn die Mehrheit von Proben nur auf einem Teil der Halbkugel lokalisiert ist.
  • Bei Schritt 208 wird für jedes Probe-Pixel, welches mit einem Ziel-Pixel assoziiert ist, ein gefilterter Wert dadurch erzeugt, dass ein zweiseitiges (bilaterale) Filter auf die hierarchische Tiefe-Karte angewendet wird. Jedes Probe-Pixel ist mit einem bestimmten Level (mi) der hierarchischen Tiefe-Karte assoziiert. Ein Probe-Wert für das Probe-Pixel ist dadurch gegeben, dass ein Wert in dem bestimmten Level der hierarchischen Tiefe-Karte ausgewählt ist, welcher mit der Stelle des Probe-Pixels assoziiert ist, wie mittels der Gleichung gegeben ist: m i = l o g 2 ( h i q )
    Figure DE102013222685B4_0010
    z i = z m i ( s ^ i 2 m i )
    Figure DE102013222685B4_0011
  • In Gleichung 10 wird der Level (mi), welcher mit einem Probe-Pixel (si) assoziiert ist, auf einem Wert festgehalten, welcher größer ist als oder gleich ist wie Null und kleiner ist als oder gleich ist wie der höchste Level in der hierarchischen Tiefe-Karte. Konstante q' ist ein Schirm-Raum-Radius-Inkrement, welches den Abstand von dem Ziel-Pixel repräsentiert, bei welchem sich der Level der hierarchischen Tiefe-Karte, referenziert mittels des Probe-Pixels, auf einen verschiedenen Level der hierarchischen Tiefe-Karte verändert. In einer Ausführungsform ist das Verhältnis von hi' und q' aufgerundet auf die nächsthöhere ganze Zahl. Der optimale Wert für q' kann von der Architektur abhängen, welche den SAO-Algorithmus implementiert. Beispiel-Werte für q', welche zu genauen Umgebungs-Verdeckungs-Karten geführt haben, wie mittels einiger experimenteller Architekturen berechnet ist, sind zwischen 8 und 32.
  • Jedes Probe-Pixel si wird durch Anwenden von Gleichungen 1 und 2 auf zi (d.h. zC = zi) rekonstruiert. In einer Ausführungsform kann ein zweiseitiges 2x2-Filter auf die erzeugten Proben-Pixel angewendet werden, was vier gewichtete Werte mittelt, um die Varianz über eine kontinuierliche Oberfläche zu reduzieren (d.h. der Filterkern erzeugt den gefilterten Wert mit Gauss'schen Gewichten, welche mittels der Differenz in der Tiefe zwischen den erzeugten Probenpunkten und den nahegelegenen Pixeln moduliert sind).
  • Bei Schritt 210 wird eine Umgebungs-Verdeckungs-Karte für jedes der Pixel des Digital-Bildes mittels eines Filterns der Roh-Probe-Karte, erzeugt in Schritt 208, unter Benutzung eines beidseitigen Filters mit einer Anzahl von Abgriffen (taps) erzeugt. Das zweiseitige Filter stellt sicher, dass der finale Wert über Oberflächen geglättet ist (smoothed), während das Filter nicht über Tiefe-Diskontinuitäten angewendet wird. In einer Ausführungsform ist ein Zweidurchgangs-zweiseitiges eindimensionales Filter angewendet (ein horizontaler Durchgang und ein vertikaler Durchgang), welches sieben Abgriffe bzw. Verzweigungen in jedem Durchgang hat, was einen finalen AO-Wert basierend auf 196 Probe-Werten pro Ziel-Pixel erzeugt, (basierend auf dem 2x2-zweiseitigen Filter, welches in Schritt 208 angewendet ist, und dem 7x7-Abgriffen bzw. Verzweigungen in dem Zwei-Durchgang-zweiseitigen eindimensionalen Filter, welches in Schritt 210 angewendet ist). Jeder der Abgriffe kann dadurch ausgebreitet werden (spread out), das Pixel-Stellen um drei Pixel in jeder Richtung inkrementiert werden. In anderen Ausführungsformen kann eine andere Anzahl von Abgriffen oder Abstand zwischen Abgriffen in dem Zwei-Durchgang-zweiseitigen eindimensionalen Filter implementiert sein.
  • Illustrativere Information wird nun bezüglich verschiedener optionaler Architekturen und Merkmale ausgeführt, mit welchen das vorangehende Rahmenwerk implementiert werden kann oder nicht implementiert zu werden braucht, nach den Wünschen des Benutzers. Es sollte deutlich bemerkt werden, dass die folgende Information für illustrative Zwecke ausgeführt ist und nicht interpretiert werden sollte, in irgendeiner Weise zu begrenzen. Irgendwelche der folgenden Merkmale können optional mit oder ohne den Ausschluss von anderen Merkmalen, welche beschrieben sind, inkorporiert sein.
  • 3 illustriert eine hierarchische Tiefe-Karte 300 in Übereinstimmung mit einer Ausführungsform. Wie in 3 gezeigt ist, umfasst ein Basis-Level 310 (Z0) der hierarchischen Tiefe-Karte 300 eine Mehrzahl von Tiefe-Werten, welche mit einer Mehrzahl von Pixeln in einem Digital-Bild assoziiert sind. Wie in der Technik bekannt ist, kann ein Digital-Bild, welches eine zweidimensionale (2D) Ansicht eines Satzes von Geometrie-Daten repräsentiert, von einem Modell gerendert werden. Für jedes 3D-Objekt in dem Modell wird das Objekt (d.h. eine Primitive, wie etwa ein Dreieck oder ein Dreiecks-Streifen) in eine 2D-Ansichts-Ebene projiziert und eine Abdeckungs-Maske (coverage mask), welche den Schnitt einer Projektion des 3D-Objekts mit den Pixeln der 2D-Ansichts-Ebene definiert, wird bestimmt. Für jedes der abgedeckten Pixel wird die Tiefe der Oberfläche des 3D-Objekts bei einem Punkt, welcher dem Pixel entspricht, bestimmt und gegen die Tiefe von jedem der zuvor gerenderten 3D-Objekte verglichen, wie in einem Tiefe-Puffer gespeichert. Wenn die Tiefe der Oberfläche des 3D-Objekts näher an der Ansichts-Ebene ist als die Tiefe, welche in dem Tiefe-Puffer gespeichert ist, dann wird der Tiefe-Puffer aktualisiert und das Pixel ist gemäß den Vertex-Attributen für das Objekt gerendert (z.B. Farb-Attribute, Textur-Koordinaten, etc.).
  • Das Basis-Level 310 der hierarchischen Tiefe-Karte 300 wird von einem Tiefe-Puffer, welcher mit einem Digital-Bild assoziiert ist, populiert. In anderen Worten entspricht jeder der Tiefe-Werte in dem Basis-Level 310 einem z-Wert, welcher in dem Tiefe-Puffer für eines der Pixel des Digital-Bildes gespeichert ist. Zum Beispiel entspricht ein erster Tiefe-Wert, welcher bei Eintrag Z0 (0,0) in dem Basis-Level 310 lokalisiert ist, einem ersten Pixel in dem Digital-Bild, welches bei der oberen linken Ecke des Digital-Bildes lokalisiert ist. In einigen Ausführungsformen entspricht jeder der Tiefe-Werte einem Teil eines Pixels des Digital-Bildes, wie etwa Ausführungsformen, wo Mehr-Probe-Antialiasing (MSAA) in der Grafik-Pipeline implementiert ist.
  • Die hierarchische Tiefe-Karte 300 umfasst zusätzliche Level (z.B. Z1, Z2, etc.), welche eine Untermenge von Werten von dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 umfassen. Die Auflösung jedes der zusätzlichen Levels kann kleiner sein als der nächstniedrigere Level innerhalb der Hierarchie. Zum Beispiel ist in einer Ausführungsform die Auflösung des ersten Levels 320 der hierarchischen Tiefe-Karte 300 die Hälfte (sowohl vertikal als auch horizontal) von der des Basis-Levels 310 der hierarchischen Tiefe-Karte 300. In anderen Ausführungsformen kann die Auflösung von jedem aufeinanderfolgenden Level der hierarchischen Tiefe-Karte 300 um eine verschiedene Menge vermindert sein, wie etwa die Reduzierung der Auflösung um ein Viertel mit jedem nachfolgenden Level der hierarchischen Tiefe-Karte 300.
  • Wie in 3 gezeigt ist, umfasst die hierarchische Tiefe-Karte 300 einen ersten Level 320 (Z1) bei der Hälfte der Auflösung des Basis-Levels 310 der hierarchischen Tiefe-Karte 300. Jeder der Tiefe-Werte, welche in dem ersten Level 320 (Z1) gespeichert sind, entspricht einem einzelnen der Tiefe-Werte, welche in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 gespeichert sind. Ungleich einer Mip-Map, wo die Werte in den niedrigere- Auflösung-Mip-Maps als ein Mittel von mehreren Werten berechnet werden, welche von einer höhere-Auflösung-Mip-Map abgetastet sind, wird jeder der Werte in einem bestimmten Level der hierarchischen Tiefe-Karte 300 von einem von jeden N Werten (z.B. einer aus jeden 4 Werten) des vorherigen Levels in der Hierarchie ausgewählt.
  • In einer Ausführungsform werden die Werte, welche von dem nächstniedrigeren Level der hierarchischen Tiefe-Karte 300 ausgewählt werden, basierend auf einem rotierten Gittermuster (rotated grid pattern) ausgewählt. Eine Gleichung, welche die Auswahl von Werten gemäß einem solchen rotierten Gittermusters beherrscht, ist durch Gleichung 12 illustriert: z m + 1 x ' , y ' = z m 2 x ' + ( ( y ' & 0 b 1 ) 0 b 1 ¯ ) ,2 y ' + ( ( x ' & 0 b 1 ) 0 b 1 ¯ )
    Figure DE102013222685B4_0012
  • Mit anderen Worten wird ein Tiefe-Wert, welcher in einem m+1-Level der hierarchischen Tiefe-Karte 300 gespeichert ist, welcher eine x'-Koordinate und eine y'-Koordinate hat, von einem m-Level der hierarchischen Tiefe-Karte 300 ausgewählt, welcher (1) eine erste Koordinate als zweimal die x'-Koordinate plus ein exklusives bitweises OR von 1 und einem bitweisen AND der y'-Koordinate und eins berechnet ist; und (2) eine zweite Koordinate hat, welche als zweimal die y'-Koordinate plus ein exklusives bitweises OR von eins und ein bitweises AND der x'-Koordinate und eins berechnet ist. Das rotierte Gittermuster, welches oben ausgeführt ist, wählt vier Tiefe-Werte für jede 16 Tiefe-Werte in einem bestimmten Level der hierarchischen Tiefe-Karte 300 aus, um vier entsprechende Werte in dem nächsten darauffolgenden Level der hierarchischen Tiefe-Karte 300 zu erzeugen. Andere Ausführungsformen können die Tiefe-Werte basierend auf einem anderen Typ von Abbildung auswählen, wie etwa eine Abbildung, welche den oberen linken Wert in jedem 2x2-Feld von Pixeln auswählt, oder eine Abbildung, welche vier Tiefe-Werte für jede vierundsechzig Tiefe-Werte auswählt (in dem Fall, wo die Auflösung vervierfacht ist). Es wird betrachtet, dass andere Typen von Abbildungen innerhalb des Geltungsbereichs der vorliegenden Offenbarung sind.
  • 3 zeigt die Abbildung unter Benutzung des rotierten Gittermusters, welches durch Gleichung 12 illustriert ist. Wie in 3 gezeigt ist, entspricht ein erster Tiefe-Wert 325(0) in dem ersten Level 320 der hierarchischen Tiefe-Karte 300 einem entsprechenden ersten Tiefe-Wert 315(0) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300. Gemäß Gleichung 12 ist der erste Tiefe-Wert 325(0) mit Koordinaten (z.B. 0,0) für Eintrag Z1 (0,0) assoziiert, welcher dem Eintrag Z0 (1,1) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 entspricht. Ähnlich entspricht ein zweiter Tiefe-Wert 325(1) in dem ersten Level 320 der hierarchischen Tiefe-Karte 300 einem zweiten entsprechenden Tiefe-Wert 315(1) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300, ein dritter Tiefe-Wert 325(2) in dem ersten Level 320 der hierarchischen Tiefe-Karte 300 entspricht einem dritten entsprechenden Tiefe-Wert 315(2) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300, und ein vierter Tiefe-Wert 325(3) in dem ersten Level 320 der hierarchischen Tiefe-Karte 300 entspricht einem vierten entsprechenden Tiefe-Wert 315(3) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300. Der zweite Tiefe-Wert 325(1) ist mit Koordinaten (z.B. 1,0) für Eintrag Z1 (1,0) assoziiert, welcher dem Eintrag Z0 (3,3) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 entspricht. Der dritte Tiefe-Wert 325(2) ist mit Koordinate (z.B. 0,1) für Eintrag Z1 (0,1) assoziiert, welcher Eintrag Z0 (0,3) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 entspricht. Der zweite Tiefe-Wert 325(3) ist mit Koordinaten (z.B. 1,1) für Eintrag Z1 (1,1) assoziiert, welcher Eintrag Z0 (2,2) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 entspricht.
  • Die hierarchische Tiefe-Karte 300 umfasst auch einen zweiten Level 330 (Z2) bei der Hälfte der Auflösung des ersten Levels 320 der hierarchischen Tiefe-Karte 300. Mit anderen Worten ist der zweite Level 330 bei einem Viertel der Auflösung des Basis-Levels 310 der hierarchischen Tiefe-Karte 300. Die Tiefe-Werte, welche in Einträgen des zweiten Levels 330 gespeichert sind, entsprechen den Tiefe-Werten, welche in Einträgen des ersten Levels 320 der hierarchischen Tiefe-Karte 300 gemäß derselben Abbildung gespeichert sind, welche benutzt ist, um die Tiefe-Werte, welche in Einträgen des ersten Levels 320 gespeichert sind, auf Tiefe-Werte abzubilden, welche in Einträgen des Basis-Levels 310 der hierarchischen Tiefe-Karte 300 gespeichert sind. Zum Beispiel entspricht ein erster Tiefe-Wert 335(0), welcher in Eintrag Z2 (0,0) in dem zweiten Level 330 der hierarchischen Tiefe-Karte 300 gespeichert ist, einem vierten Tiefe-Wert 325(3), welcher in Eintrag Z1 (1,1) in dem ersten Level 320 der hierarchischen Tiefe-Karte 300 gespeichert ist. Der erste Tiefe-Wert 335(0), welcher in Eintrag Z2 (0,0) in dem zweiten Level 330 der hierarchischen Tiefe-Karte 300 gespeichert ist, entspricht auch einem vierten Tiefe-Wert 315(3), welcher in Eintrag Z0 (2,2) in dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 gespeichert ist. In einer Ausführungsform können die verschiedenen Levels der hierarchischen Tiefe-Karte in paralleler Weise erzeugt werden.
  • Obwohl es nicht gezeigt ist, können zusätzliche Level in der hierarchischen Tiefe-Karte bis zu einem finalen Level (d.h. einem K-ten Level) umfasst sein, welcher nur einen einzelnen Tiefe-Wert umfasst, welcher in Eintrag ZK (0,0) gespeichert ist. Spezifische Implementierungen können irgendeine Anzahl von Levels in der hierarchischen Tiefe-Karte 300 auslassen, solange die hierarchische Tiefe-Karte 300 zumindest einen zusätzlichen Level zusätzlich zu dem Basis-Level 310 umfasst.
  • 4 illustriert eine Mehrzahl von Probe-Pixeln 430 für ein Ziel-Pixel 320 in einem SAO-Algorithmus in Übereinstimmung mit einer Ausführungsform. Der SAO-Algorithmus hebt eine Technik zum Abtasten von Werten von der hierarchischen Tiefe-Karte 300 hervor, um eine Umgebung-Verdeckungs-Karte zu erzeugen, wie oben in dem Flussdiagramm von 2 beschrieben ist. Um einen Umgebungs-Verdeckungs-Wert für ein Ziel-Pixel 420 in einem Digital-Bild zu berechnen, tasten SAO-Algorithmen eine Mehrzahl von Punkten in einem Tiefe-Puffer ab, um zu bestimmen, ob nahegelegene Geometrie wahrscheinlich ist, einen Punkt auf der Oberfläche eines Objekts, entsprechend dem Ziel-Pixel, zu verdecken. Um den Umgebungs-Verdeckungs-Wert für das Ziel-Pixel 420 zu berechnen, tastet ein Prozess (d.h. ein oder mehr Threads) eine Mehrzahl von Stellen der hierarchischen Tiefe-Karte 300 ab, welche einer Mehrzahl von Probe-Pixel 430 nahe dem Ziel-Pixel 420 in dem Digital-Bild 400 entsprechen.
  • Wenn eine Probe von der hierarchischen Tiefe-Karte 300 gelesen wird, bestimmt in einer Ausführungsform ein Thread, von welchem Level mi der hierarchischen Tiefe-Karte 300 die Probe gelesen werden sollte, wie etwa durch Anwenden von Gleichung 10 auf die Stelle des Probe-Pixels 430. Die Kreise 410 repräsentieren den Teil des Schirmraums, welcher verschiedenen Levels der hierarchischen Tiefe-Karte 300 entspricht. Zum Beispiel repräsentiert der erste Kreis 410(0) ein (d.h. 2°) mal qi und hat einen Radius von 4 Pixeln. Der zweite Kreis 410(1) repräsentiert zwei (d.h. 21) mal qi und hat einen Radius von 8 Pixeln. Der dritte Kreis 410(2) repräsentiert vier (d.h. 22) mal qi und hat einen Radius von 16 Pixeln. Wie oben festgestellt ist, ist das Schirmraum-Radius-Inkrement qi typischerweise zwischen 8 und 32 für gute Resultate. Ein Schirmraum-Radius-Inkrement von vier Pixeln ist jedoch in 4 für illustrative Zwecke gezeigt.
  • Lesen eines Tiefe-Wertes für jedes Probe-Pixel 430, welches innerhalb des ersten Kreises 410(0) lokalisiert ist, wird dadurch durchgeführt, dass ein Wert von dem Basis-Level 310 der hierarchischen Tiefe-Karte 300 gelesen wird. Ein Lesen eines Tiefe-Wertes für jedes Probe-Pixel 430, welches zwischen dem ersten Kreis 410(0) und dem zweiten Kreis 410(1) lokalisiert ist, ist dadurch durchgeführt, dass ein Tiefe-Wert von dem ersten Level 320 der hierarchischen Tiefe-Karte 300 gelesen wird. Lesen eines Tiefe-Wertes für jedes Probe-Pixel 430, welches zwischen dem zweiten Kreis 410(1) und dem dritten Kreis 410(2) lokalisiert ist, wird dadurch durchgeführt, dass ein Tiefe-Wert von dem zweiten Level 320 der hierarchischen Tiefe-Karte gelesen wird, usw.
  • Wie z.B. in 4 gezeigt ist, kann ein Ziel-Pixel 420 eine x-Koordinate von 24 und eine y-Koordinate von 8 mit Bezug auf das obere linke Pixel des Digital-Bildes 400 haben (d.h. ein Pixel mit einer x-Koordinate von 0 und einer y-Koordinate von 0). Jedes der schattierten Pixel von 4 repräsentiert ein Probe-Pixel 430, welches in der Berechnung des Umgebungs-Verdeckungs-Wertes benutzt ist. Das Probe-Pixel 430(0) ist bei einer x-Koordinate von 30 und einer y-Koordinate von 7 mit Bezug auf das obere linke Pixel des Digital-Bildes 400 lokalisiert. Um zu bestimmen, von welchem Level der hierarchischen Tiefe-Karte 300 der Tiefe-Wert, welcher mit dem Probe-Pixel 430(0) assoziiert ist, gelesen werden soll, wird der Abstand des Probe-Pixels 430(0) zu dem Ziel-Pixel 420 berechnet. Wie in 4 gezeigt ist, ist der Abstand hi für Probe-Pixel 430(0) ungefähr 5 Pixel und der Wert zi für Probe-Pixel 430(0) wird von dem ersten Level 320 der hierarchischen Tiefe-Karte 300 gelesen.
  • 5 illustriert eine Parallel-Verarbeitungs-Einheit (PPU) 500 gemäß einer Ausführungsform. Während ein Parallel-Prozessor hierin als ein Beispiel der PPU 500 bereitgestellt ist, sollte es deutlich bemerkt werden, dass solch ein Prozessor nur für illustrative Zwecke ausgeführt ist und dass irgendein Prozessor eingesetzt werden kann, um denselben zu ergänzen und/oder denselben zu ersetzen. In einer Ausführungsform ist die PPU 500 konfiguriert, eine Mehrzahl von Threads gleichzeitig in zwei oder mehr Streaming-Mehrfach-Prozessoren (SMs) 550 auszuführen. Ein Thread (d.h. ein Thread von Ausführung) ist eine Instanziierung eines Satzes von Anweisungen, welche innerhalb eines bestimmten SM 550 ausführen. Jeder SM 550, welcher unten in größerem Detail im Zusammenhang mit 6 beschrieben ist, kann umfassen, ist jedoch nicht darauf begrenzt, einen oder mehrere Verarbeitungs-Kerne, eine oder mehr Lade/Speicher-Einheiten (LSUs), einen Level-eins-(L1)-Zwischenspeicher, gemeinsam benutzten Speicher, und dergleichen.
  • In einer Ausführungsform umfasst die PPU 500 eine Eingabe/Ausgabe-(I/O)-Einheit 505, welche konfiguriert ist, Kommunikationen (d.h. Befehle, Daten, etc.) von einer Zentral-Verarbeitungs-Einheit (CPU) (nicht gezeigt) über das Bus-System 502 zu übermitteln und zu empfangen. Die I/O-Einheit 505 kann eine Peripheral-Component-Interconnect-Express-(PCIe)-Schnittstelle für Kommunikationen über einen PCIe-Bus implementieren. In alternativen Ausführungsformen kann die I/O-Einheit 505 andere Typen von wohl bekannten Bus-Schnittstellen implementieren.
  • Die PPU 500 umfasst auch eine Host-Schnittstelle-Einheit 510, welche die Befehle dekodiert und die Befehle an die Gitter-Management-Einheit 515 oder andere Einheiten der PPU 500 übermittelt (z.B. Speicher-Schnittstelle 580), wie es die Befehle spezifizieren können. Die Host-Schnittstelle-Einheit 510 ist konfiguriert, Kommunikationen zwischen und unter den verschiedenen logischen Einheiten der PPU 500 zu leiten (route).
  • In einer Ausführungsform wird ein Programm, welches als ein Befehl-Strom kodiert ist, auf einen Puffer mittels der CPU geschrieben. Der Puffer ist ein Bereich im Speicher, z.B. Speicher 504 oder System-Speicher, welcher mittels der CPU als auch der PPU 500 zugreifbar ist (d.h. Lesen/Schreiben). Die CPU schreibt den Befehls-Strom auf den Puffer und übermittelt dann einen Zeiger auf den Start des Befehl-Stroms an die PPU 500. Die Host-Schnittstelle-Einheit 510 stellt der Gitter-Management-Einheit (GMU) 515 Zeiger auf einen oder mehr Ströme bereit. Die GMU 515 wählt einen oder mehr Ströme aus und ist konfiguriert, die ausgewählten Ströme als einen Pool von anhängigen Gittern zu organisieren. Der Pool von anhängigen Gittern kann neue Gitter umfassen, welche noch nicht zur Ausführung ausgewählt worden sind, und Gitter, welche teilweise ausgeführt worden sind und ausgesetzt worden sind.
  • Eine Arbeits-Verteilungs-Einheit 520, welche zwischen der GMU 515 und dem SMs 550 gekoppelt ist, managed einen Pool von aktiven Gittern, Auswählen und Absetzen von aktiven Gittern zur Ausführung mittels SMs 550. Anhängige Gitter werden zu dem aktiven Gitter-Pool mittels der GMU 515 transferiert, wenn ein anhängiges Gitter berechtigt ist, auszuführen, d.h. keine unaufgelösten Daten-Abhängigkeiten hat. Ein aktives Gitter wird auf den anhängigen Pool transferiert, wenn Ausführung des aktiven Gitters mittels einer Abhängigkeit blockiert ist. Wenn Ausführung eines Gitters vollendet ist, wird das Gitter von dem aktiven Gitter-Pool mittels der Arbeits-Verteilungs-Einheit 520 entfernt. Zusätzlich zum Empfangen von Gittern von der Host-Schnittstelle-Einheit 510 und der Arbeits-Verteilungs-Einheit 520 empfängt die GMU 510 auch Gitter, welche dynamisch mittels der SMs 550 während Ausführung eines Gitters erzeugt sind. Diese dynamisch erzeugten Gitter verbinden sich mit den anderen anhängigen Gitter in dem anhängigen Gitter-Pool.
  • In einer Ausführungsform führt die CPU einen Treiber-Kernel aus, welcher eine Anwendungs-Programmier-Schnittstelle (API) implementiert, welche einer oder mehr Anwendungen, welche auf der CPU ausführen, erlaubt, Operationen zur Ausführung auf der PPU 500 zu planen (schedule). Eine Anwendung kann Anweisungen (d.h. API-Aufrufe) umfassen, welche den Treiber-Kernel veranlassen, ein oder mehr Gitter zur Ausführung zu erzeugen. In einer Ausführungsform implementiert die PPU 500 eine SIMD (Einzel-Anweisung, Mehr-Daten)-Architektur, wobei jeder Thread-Block (d.h. Warp) in einem Gitter gleichzeitig auf einem verschiedenen Daten-Satz mittels verschiedener Threads in dem Thread-Block ausgeführt wird. Der Treiber-Kernel definiert Thread-Blocks, welche k bezogene Threads aufweisen, so dass Threads in demselben Thread-Block Daten durch gemeinsam benutzten Speicher austauschen können. In einer Ausführungsform weist ein Thread-Block 32 bezogene Threads auf und ein Gitter ist ein Feld von einem oder mehr Thread-Blocks, welche denselben Strom ausführen und die verschiedenen Thread-Blöcke können Daten durch einen globalen Speicher austauschen.
  • In einer Ausführungsform weist die PPU 500 X SMs 550(X) auf. Zum Beispiel kann die PPU 100 15 distinkte SMs 550 aufweisen. Jeder SM 550 ist Mehrprozess-gestützt (multi-threaded) und konfiguriert, eine Mehrzahl von Threads (z.B. 32 Threads) von einem bestimmten Thread-Block simultan auszuführen. Jeder der SMs 550 ist mit einem Level-zwei-(L2)-Zwischenspeicher 565 über eine Kreuzschiene 560 (oder einen anderen Typ von Zwischenverbindung-Netzwerk) verbunden. Der L2-Zwischenspeicher 565 ist mit einer oder mit mehr Speicher-Schnittstellen 580 verbunden. Speicher-Schnittstellen 580 implementieren 16-, 32-, 64-, 128-Bit-Daten-Busse, oder dergleichen, für einen Hochgeschwindigkeits-Datentransfer. In einer Ausführungsform weist die PPU 500 U Speicher-Schnittstellen 580(U) auf, wobei jede Speicher-Schnittstelle 580(U) mit einem entsprechenden Speicher-Gerät 504(U) verbunden ist. Zum Beispiel kann PPU 500 mit bis zu sechs Speicher-Geräten 504 verbunden sein, wie etwa Grafik-Doppel-Datenrate, Version 5, synchron-dynamisch-willkürlicher-Zugriff-Speicher (synchronous dynamic random access memory) (GDDR5, SDRAM).
  • In einer Ausführungsform implementiert die PPU 500 eine Mehr-Level-Speicher-Hierarchie. Der Speicher 504 ist außerhalb des Chips (off-chip) in SDRAM lokalisiert, gekoppelt mit der PPU 500. Daten von dem Speicher 504 können in dem L2-Zwischenspeicher 565 geholt und gespeichert werden, welcher Auf-Chip lokalisiert ist und zwischen den verschiedenen SMs 550 gemeinsam benutzt ist. In einer Ausführungsform implementiert jeder der SMs 550 auch einen L1-Zwischenspeicher. Der L1-Zwischenspeicher ist privater Speicher, welcher für einen bestimmten SM 550 dediziert ist. Jeder der L1-Zwischenspeicher ist mit dem gemeinsam benutzten L2-Zwischenspeicher 565 gekoppelt. Daten von dem L2-Zwischenspeicher 565 können in jedem der L1-Zwischenspeicher geholt und gespeichert werden zum Verarbeiten in den funktionellen Einheiten der SMs 550.
  • In einer Ausführungsform weist die PPU 500 eine Grafik-Verarbeitungs-Einheit (GPU) auf. Die PPU 500 ist konfiguriert, Befehle zu empfangen, welche Schattierungs-Programme zum Verarbeiten von Grafik-Daten spezifizieren. Grafik-Daten können als ein Satz von Primitiven, wie etwa Punkte, Linien, Dreiecke, Quader, Dreiecks-Streifen, und dergleichen definiert sein. Typischerweise umfasst eine Primitive Daten, welche eine Anzahl von Vertizes für die Primitive spezifizieren (z.B. ein Modell-Raum-Koordinaten-System) sowie Attribute, welche mit jedem Vertex der Primitive assoziiert sind. Die PPU 500 kann konfiguriert sein, die Grafik-Primitiven zu verarbeiten, um einen Frame-Puffer zu erzeugen (d.h. Pixel-Daten für jedes der Pixel der Anzeige). Der Treiber-Kernel implementiert eine Grafik-Verarbeitungs-Pipeline, wie etwa die Grafik-Verarbeitungs-Pipeline, welche durch OpenGL API definiert ist.
  • Eine Anwendung schreibt Modell-Daten für eine Szene (d.h. eine Sammlung von Vertizes und Attributen) an Speicher. Die Modell-Daten definieren jedes der Objekte, welche auf einer Anzeige sichtbar sein kann. Die Anwendung macht dann einen API-Aufruf an den Treiber-Kernel, welcher die Modell-Daten anfragt, welche zu rendern und anzuzeigen sind. Der Treiber-Kernel liest die Modell-Daten und schreibt Befehle an den Puffer, um ein oder mehr Operationen durchzuführen, um die Modell-Daten zu verarbeiten. Die Befehle können verschiedene Schattierungs-Programme einschließlich eines oder mehrerer von einem Vertex-Schattierer, Punkt- (hull)-Schattierer, Geometrie-Schattierer, Pixel-Schattierer, etc. kodieren. Zum Beispiel kann die GMU 515 einen oder mehrere SMs 550 konfigurieren, um ein Vertex-Schattierungs-Programm auszuführen, welches eine Anzahl von Vertizes verarbeitet, welche mittels der Modell-Daten definiert sind. In einer Ausführungsform kann die GMU 515 verschiedene SMs 550 konfigurieren, verschiedene Schattierungs-Programme gleichzeitig auszuführen. Zum Beispiel kann eine erste Untermenge von SMs 550 konfiguriert sein, ein Vertex-Schattierungs-Programm auszuführen, während eine zweite Untermenge von SMs 550 konfiguriert sein kann, ein Pixel-Schattierungs-Programm auszuführen. Die erste Untermenge von SMs 550 verarbeitet Vertex-Daten, um verarbeitete Vertex-Daten zu erzeugen, und schreibt die verarbeiteten Vertex-Daten an den L2-Zwischenspeicher 565 und/oder den Speicher 504. Nachdem die prozessierten Vertex-Daten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Schirmraum transformiert sind), um Fragment-Daten zu erzeugen, führt die zweite Untermenge von SMs 550 einen Pixel-Schattierer aus, um verarbeitete Fragment-Daten zu erzeugen, welche dann mit anderen verarbeiteten Fragment-Daten gemischt (blended) werden und auf den Frame-Puffer in Speicher 504 geschrieben werden. Das Vertex-Schattierungs-Programm und das Pixel-Schattierungs-Programm können gleichzeitig ausführen, können verschiedene Daten von derselben Szene in einer Pipeline-Weise prozessieren, bis alle der Modell-Daten für die Szene an den Frame-Puffer gerendert worden sind. Dann werden die Inhalte des Frame-Puffers zu einer Anzeige-Steuerung zur Anzeige auf einem Anzeige-Gerät übermittelt.
  • Die PPU 500 kann in einem Schreibtisch-Computer, einem Laptop-Computer, einem Tablet-Computer, einem Smartphone (z.B. ein drahtloses, handgehaltenes Gerät), persönlicher digitaler Assistent (PDA), eine Digitalkamera, einem handgehaltenen elektronischen Gerät und dergleichen umfasst sein. In einer Ausführungsform ist die PPU 500 auf einem einzelnen Halbleiter-Substrat verkörpert. In einer anderen Ausführungsform ist die PPU 500 in einem System-auf-einem-Chip (SoC) zusammen mit einer oder mehr anderen Logik-Einheiten umfasst, wie etwa eine Reduced-Instruction-Set-Computer (RISC)-CPU, eine Speicher-Management-Einheit (MMU), ein Digital-zu-Analog-Konverter (DAC), und dergleichen.
  • In einer Ausführungsform kann die PPU 500 auf einer Grafik-Karte umfasst sein, welche ein oder mehr Speicher-Geräte 504 umfasst, wie etwa GDDR5 SDRAM. Die Grafik-Karte kann konfiguriert sein, mit einem PCIe-Fach auf einer Mutter-Platine eines Schreibtisch-Computers eine Schnittstelle zu bilden, welcher z.B. einen Northbridge-Chipsatz und einen Southbridge-Chipsatz umfasst. In noch einer anderen Ausführungsform kann die PPU 500 eine integrierte-Grafik-Verarbeitungs-Einheit (iGPU) sein, welche in dem Chipsatz (d.h. Northbridge) der Mutter-Platine umfasst ist.
  • 6 illustriert einen Streaming-Mehr-Prozessor 550 von 5 gemäß einer Ausführungsform. Wie in 6 gezeigt ist, umfasst der SM 550 einen Anweisungs-Zwischenspeicher 605, eine oder mehr Planer-Einheiten 610, eine Register-Datei 620, ein oder mehr Verarbeitungs-Kerne 650, eine oder mehr Doppel-Präzisions-Einheiten (DPUs) 651, eine oder mehr Spezial-FunktionsEinheiten (SFUs) 652, eine oder mehr Lade/Speicher-Einheiten (LSUs) 653, ein Zwischenverbindungs-Netzwerk 680, einen gemeinsam benutzten Speicher/L1-Zwischenspeicher 670, und eine oder mehr Textur-Einheiten 690.
  • Wie oben beschrieben ist, setzt die Arbeits-Verteilungs-Einheit 520 aktive Gitter zur Ausführung auf einer oder mehr SMs 550 der PPU 500 ab (dispatches). Die Planer-Einheit 610 empfängt die Gitter von der Arbeit-Verteilungs-Einheit 520 und managed ein Anweisungs-Planen für einen oder mehr Thread-Blocks jedes aktiven Gitters. Die Planer-Einheit 610 plant Threads zur Ausführung in Gruppen von parallelen Threads, wobei jede Gruppe ein Warp genannt ist. In einer Ausführungsform umfasst jeder Warp 32 Threads. Die Planer-Einheit 610 kann eine Mehrzahl von verschiedenen Thread-Blocks managen, Allozieren der Thread-Blocks an Warps zur Ausführung und dann Planen von Anweisungen von der Mehrzahl von verschiedenen Warps auf den verschiedenen funktionalen Einheiten (d.h. Kerne 650, DPUs 651, SFUs 652, und LSUs 653) während jedes Takt-Zyklus.
  • In einer Ausführungsform umfasst jede Planer-Einheit 610 eine oder mehr Anweisungs-Absetz-Einheiten 615. Jede Absetz-Einheit 615 ist konfiguriert, Anweisungen an eine oder mehr der funktionalen Einheiten zu übermitteln. In der in 6 gezeigten Ausführungsform umfasst die Planer-Einheit 610 zwei Absetz-Einheiten 615, welche ermöglichen, dass zwei verschiedene Anweisungen von demselben Warp während jedes Takt-Zyklus abgesetzt werden. In alternativen Ausführungsformen kann jede Planer-Einheit 610 eine einzelne Absetz-Einheit 615 oder zusätzliche Absetz-Einheiten 615 umfassen.
  • Jeder SM 650 umfasst eine Register-Datei 620, welche einen Satz von Registern für die funktionalen Einheiten des SM 650 bereitstellt. In einer Ausführungsform ist die Register-Datei 620 zwischen jeder der funktionalen Einheiten derartig geteilt, dass jeder funktionalen Einheit ein dedizierter Teil der Register-Datei 620 alloziert ist. In einer anderen Ausführungsform ist die Register-Datei 620 zwischen den verschiedenen Warps, welche mittels des SM 550 ausgeführt sind, geteilt. Die Register-Datei 620 stellt temporären Speicher für Operanden bereit, welche mit den Daten-Pfaden der funktionalen Einheiten verbunden sind.
  • Jeder SM 550 weist L Verarbeitungs-Kerne 650 auf. In einer Ausführungsform umfasst der SM 550 eine große Zahl (z.B. 192, etc.) von distinkten Verarbeitungs-Kernen 650. Jeder Kern 650 ist eine vollständig in einer Pipeline angeordnete (fully-pipelined), Einfach-Präzisions-Verarbeitungs-Einheit, welche eine Fließpunkt-Arithmetik-Logik-Einheit und eine Ganzzahl-Arithmetik-Logik-Einheit umfasst. In einer Ausführungsform implementiert die Fließpunkt-Arithmetik-Logik-Einheit den IEEE 754-2008-Standard für Fließpunkt-Arithmetik. Jeder SM 550 weist auch M DPUs 651 auf, welche Doppel-Präzisions-Fließpunkt-Arithmetik implementieren, N SFUs 652, welche spezielle Funktionen durchführen (z.B. Kopiere Rechteck, Pixel-Misch-Operationen, und dergleichen) und P LSUs 653, welche Lade- und Speicher-Operationen zwischen dem gemeinsam benutzten Speicher/L1-Zwischenspeicher 670 und der Register-Datei 620 implementieren. In einer Ausführungsform umfasst der SM 550 64 DPUs 651, 32 SFUs 652, und 32 LSUs 653.
  • Jeder SM 550 umfasst ein Zwischenverbindungs-Netzwerk 680, welches jede der funktionalen Einheiten mit der Register-Datei 620 und dem gemeinsam benutzten Speicher/L1-Zwischenspeicher 670 verbindet. In einer Ausführungsform ist das Zwischenverbindungs-Netzwerk 680 eine Kreuzschiene, welche konfiguriert sein kann, um irgendeine der funktionalen Einheiten mit irgendeinem der Register in der Register-Datei 620 oder den Speicher-Stellen in dem gemeinsam benutzten Speicher/L1-Zwischenspeicher 670 zu verbinden.
  • In einer Ausführungsform ist der SM 550 innerhalb einer GPU implementiert. In solch einer Ausführungsform weist der SM 550 J Textur-Einheiten 690 auf. Die Textur-Einheiten 690 sind konfiguriert, Textur-Karten (d.h. ein 2D-Feld von Texels) von dem Speicher 504 zu laden und die Textur-Karten abzutasten, um abgetastete Textur-Werte zur Benutzung in Schattierungs-Programmen zu erzeugen. Die Textur-Einheiten 690 implementieren Textur-Operationen, wie etwa Anti-Aliasing-Operationen unter Benutzung von Mip-Maps (d.h. Textur-Karten von variierendem Detail-Level). In einer Ausführungsform umfasst der SM 550 16 Textur-Einheiten 690.
  • Die PPU 500, welche oben beschrieben ist, kann konfiguriert sein, hochparallele Berechnungen viel schneller als konventionelle CPUs durchzuführen. Parallel-Berechnung hat Vorteile in Grafik-Verarbeitung, Daten-Kompression, Biometrik, Stream-Verarbeitungs-Algorithmen und dergleichen.
  • Zum Beispiel kann eine Anwendung in Speicher 104 konfiguriert sein, die hierarchische Tiefe-Karte 300 unter Benutzung von PPU 500 zu erzeugen. In einer Ausführungsform übermittelt die Anwendung Befehle an PPU 500 durch den Treiber-Kernel, was die PPU 500 veranlasst, einen Tiefe-Puffer für eine dreidimensionale Szene zu erzeugen. Die Anwendung kann dann den Tiefe-Puffer lesen (von Speicher 104 oder mittels eines Abfragens von PPU 500 durch den Treiber-Kernel), um die hierarchische Tiefe-Karte 300 zu erzeugen. In einer Ausführungsform kann die hierarchische Tiefe-Karte 300 als eine Textur-Karte kodiert sein und die Schritte des SAO-Algorithmus können in paralleler Weise für verschiedene Ziel-Pixel des Digital-Bildes mittels eines Implementierens eines Pixel-Schattierers, welcher auf PPU 500 ausführt, durchgeführt werden. Die Threads des Pixel-Schattierers können einem bestimmten Ziel-Pixel des Digital-Bildes entsprechen und die Umgebungs-Verdeckungs-Karte kann mittels PPU 500 erzeugt sein.
  • 7 illustriert ein exemplarisches System 700, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert sein kann. Wie gezeigt ist, ist ein System 700 bereitgestellt, welches zumindest einen Zentral-Prozessor 701 umfasst, welcher mit einem Kommunikations-Bus 702 verbunden ist. Der Kommunikations-Bus 702 kann unter Benutzung irgendeines geeigneten Protokolls implementiert werden, wie etwa PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), Hyper-Transport, oder irgendein anderes Bus- oder Punkt-zu-Punkt-Kommunikation-Protokoll(e). Das System 700 umfasst auch einen Hauptspeicher 704. Steuer-Logik (Software) und Daten sind in dem Hauptspeicher 704 gespeichert, welcher die Form eines Speichers mit willkürlichem Zugriff (RAM) annehmen kann.
  • Das System 700 umfasst auch Eingabe-Geräte 712, einen Grafik-Prozessor 706 und eine Anzeige 708, d.h. einen konventionellen CRT (KathodenStrahl-Röhre), LCD (Flüssigkristall-Anzeige), LED (Licht emittierende Diode), Plasma-Anzeige oder dergleichen. Benutzer-Eingabe kann von den Eingabe-Geräten 712 empfangen werden, z.B. Tastatur, Maus, Berührfeld, Mikrofon, und dergleichen. In einer Ausführungsform kann der Grafik-Prozessor 706 eine Mehrzahl von Schattierungs-Modulen, ein Raster-Modul, etc. umfassen. Jedes der vorangehenden Module kann sogar auf einer einzelnen Halbleiter-Plattform situiert sein, um eine Grafik-Verarbeitungs-Einheit (GPU) zu bilden.
  • In der vorliegenden Beschreibung bezieht sich eine einzelne Halbleiter-Plattform auf eine einzelne unitäre Halbleiter-basierte integrierte Schaltung oder Chip. Es sollte bemerkt sein, dass der Ausdruck einzelne Halbleiter-Plattform sich auch auf Mehr-Chip-Module mit einer erhöhten Konnektivität beziehen kann, welche Auf-Chip-Operation simulieren, und welche wesentliche Verbesserungen über ein Benutzen einer konventionellen Zentral-Verarbeitungs-Einheit (CPU) und Bus-Implementierung machen. Natürlich können die verschiedenen Module auch separat oder in verschiedenen Kombinationen von Halbleiter-Plattformen nach den Wünschen des Benutzers situiert sein.
  • Das System 700 kann auch einen sekundären Speicher 710 umfassen. Der sekundäre Speicher 710 umfasst z.B. ein Festplatte-Laufwerk und/oder ein entfernbares Speicher-Laufwerk, welches ein Floppydisk-Laufwerk repräsentiert, ein Magnetband-Laufwerk, ein Kompaktdisk-Laufwerk, digitale versatile Disk-(DVD)-Laufwerk, Aufzeichnungs-Laufwerk, Universal-Serial-Bus-(USB)-Flash-Speicher. Das entfernbare Speicher-Laufwerk liest von und/oder schreibt auf eine entfernbare Speicher-Einheit in einer wohl bekannten Weise.
  • Computer-Programme oder Computer-Steuerlogik-Algorithmen können in dem Hauptspeicher 704 und/oder dem sekundären Speicher 710 gespeichert sein. Solche Computer-Programme, wenn ausgeführt, befähigen das System 700, verschiedene Funktionen durchzuführen. Der Speicher 704, Speicherung 710 und/oder irgendein anderer Speicher sind mögliche Beispiele von Computer-lesbaren Medien.
  • In einer Ausführungsform kann die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren in dem Kontext des ZentralProzessors 701, Grafik-Prozessors 706, und integrierte Schaltung (nicht gezeigt) implementiert sein, welche befähigt ist von zumindest einem Teil der Fähigkeiten von sowohl dem Zentral-Prozessor 701 als auch dem Grafik-Prozessor 706, ein Chip-Satz (d.h. eine Gruppe von integrierte Schaltungen, welche ausgelegt sind, als eine Einheit zum Durchführen betreffender Funktionen zu arbeiten und verkauft zu werden, etc.), und/oder irgendeine andere integrierte Schaltung für diesen Zweck.
  • Noch weiter kann die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren in dem Zusammenhang eines Allgemein-Computer-Systems, eines Schaltungsplatte-Systems, eine Spielkonsole-Systems, welches für Unterhaltungs-Zwecke dediziert ist, eines Anwendungs-spezifischen Systems, und/oder irgendeines anderen gewünschten Systems implementiert sein. Zum Beispiel kann das System 700 die Form eines Schreibtisch-Computers, Laptop-Computers, Servers, Arbeitsstation, Spielkonsole, eingebettetes System und/oder irgendeinen anderen Typ von Logik annehmen. Noch weiter kann das System 600 die Form von verschiedenen anderen Geräten annehmen, einschließlich, aber nicht darauf beschränkt, ein persönlicher-digitaler-Assistenten-(PDA)-Gerät, ein mobiles Telefongerät, ein Fernseher, etc.
  • Ferner kann, während es nicht gezeigt ist, das System 700 mit einem Netzwerk (z.B. ein Telekommunikations-Netzwerk, Lokalbereichs-Netzwerk (LAN), drahtloses Netzwerk, Fernbereichs-Netzwerk (WAN) wie etwa das Internet, Peer-to-Peer-Netzwerk, Kabel-Netzwerk, oder dergleichen) für Kommunikations-Prozesse gekoppelt sein.
  • Während verschiedene Ausführungsformen oben beschrieben worden sind, sollte es verstanden sein, dass sie nur als Beispiel und nicht als Begrenzung präsentiert worden sind. Somit sollte die Breite und der Geltungsbereich der bevorzugten Ausführungsform nicht mittels der oben beschriebenen beispielhaften Ausführungsformen begrenzt sein, sondern sollte nur in Übereinstimmung mit den folgenden Ansprüchen und ihren Äquivalenten definiert sein.

Claims (17)

  1. Verfahren, aufweisend: Erzeugen einer hierarchischen Tiefe-Karte, wobei die hierarchische Tiefe-Karte zumindest zwei Level umfasst; und Lesen eines Wertes, welcher mit einem Probe-Pixel assoziiert ist, von einem Ziel-Level der hierarchischen Tiefe-Karte basierend auf einer Differenz zwischen dem Probe-Pixel und einem Ziel-Pixel, wobei der Ziel-Level der hierarchischen Tiefe-Karte berechnet wird, indem ein Logarithmus zur Basis zwei eines Verhältnisses eines Abstandes zwischen einer Schirmraum-Stelle des abgetasteten Pixels zu einer Schirmraum-Stelle eines Ziel-Pixels zu einem Schirmraum-Radius-Inkrement-Wert genommen wird.
  2. Verfahren gemäß Anspruch 1, wobei die hierarchische Tiefe-Karte aufweist: einen Basis-Level bei einer ersten Auflösung; und einen ersten Level bei einer zweiten Auflösung, wobei die zweite Auflösung geringer ist als die erste Auflösung.
  3. Verfahren gemäß Anspruch 2, wobei die zweite Auflösung die Hälfte der Auflösung der ersten Auflösung ist.
  4. Verfahren gemäß Anspruch 2, wobei die hierarchische Tiefe-Karte ferner einen zweiten Level bei einer dritten Auflösung aufweist, wobei die dritte Auflösung geringer ist als die zweite Auflösung.
  5. Verfahren gemäß Anspruch 2, wobei der Basis-Level eine Mehrzahl von Werten speichert, wobei jeder Wert mit einem verschiedenen Pixel eines Digital-Bildes assoziiert ist, und wobei der erste Level eine Untermenge von Werten, welche von dem Basis-Level ausgewählt sind, speichert.
  6. Verfahren gemäß Anspruch 5, wobei die Untermenge von Werten basierend auf einem rotierten Gittermuster ausgewählt ist.
  7. Verfahren gemäß Anspruch 6, wobei das rotierte Gittermuster mittels einer Funktion beherrscht ist, welche einen Wert bei einem bestimmten Level der hierarchischen Tiefe-Karte auf einen ausgewählten Wert bei dem nächstniedrigeren Level der hierarchischen Tiefe-Karte abbildet, wobei der Wert assoziiert ist mit einer ersten Koordinate und einer zweiten Koordinate und wobei der ausgewählte Wert mit einer dritten Koordinate assoziiert ist, welche gleich ist der Summe von zweimal die erste Koordinate und einem exklusiven Bit-weisen OR von eins und einem Bit-weisen AND der zweiten Koordinate und eins und einer vierten Koordinate, welche gleich ist der Summe von zweimal der zweiten Koordinate und einem exklusiven Bit-weisen OR von eins und einem Bit-weisen AND der ersten Koordinate und eins assoziiert ist.
  8. Verfahren gemäß Anspruch 1, wobei der Schirmraum-Radius-Inkrement-Wert basierend auf zumindest einem der folgenden bestimmt ist: eine Auflösung eines Digital-Bildes, eine Anzahl von Kernen einer Grafik-Verarbeitungs-Einheit, welche konfiguriert ist, auf die hierarchische Tiefe-Karte in paralleler Weise zuzugreifen, und eine Größe eines Zwischenspeichers, welcher konfiguriert ist, temporär Teile der hierarchischen Tiefe-Karte zu speichern.
  9. Verfahren gemäß Anspruch 1, wobei Erzeugen der hierarchischen Tiefe-Karte aufweist: Rendern einer Mehrzahl von dreidimensionalen Objekten in einem Grafik-Prozessor, um einen Tiefe-Puffer zu erzeugen; Populieren eines Basis-Levels der hierarchischen Tiefe-Karte basierend auf den Werten in dem Tiefe-Puffer; und Erzeugen eines ersten Levels der hierarchischen Tiefe-Karte mittels eines Auswählens einer Untermenge von Werten von dem Basis-Level der hierarchischen Tiefe-Karte.
  10. Verfahren gemäß Anspruch 1, ferner aufweisend: Auswählen einer Mehrzahl von Probe-Pixeln, welche mit dem Ziel-Pixel assoziiert sind; für jedes bestimmte Probe-Pixel der Mehrzahl von Probe-Pixeln: Bestimmen eines entsprechenden Levels der hierarchischen Tiefe-Karte für das bestimmte Probe-Pixel, und Lesen eines Probe-Wertes für das bestimmte Probe-Pixel von dem Ziel-Level der hierarchischen Tiefe-Karte.
  11. Verfahren gemäß Anspruch 10, ferner aufweisend Anwenden eines zweiseitigen Filters auf ein 2x2-Feld von Probe-Werten entsprechend einem 2x2-Feld von Ziel-Pixeln, um einen gefilterten Probe-Wert zu erzeugen.
  12. Verfahren gemäß Anspruch 11, ferner aufweisend Erzeugen einer Umgebungs-Verdeckungs-Karte mittels eines Anwendens eines Zwei-Durchgang-zweiseitigen-Filters, welcher eine Anzahl von Abgriffen auf eine Karte von gefilterten Probe-Werten hat, welche von der hierarchischen Tiefe-Karte gelesen sind.
  13. Verfahren gemäß Anspruch 12, wobei die Anzahl von Abgriffen, welche auf jeden Durchgang des Zwei-Durchgang-zweiseitigen-Filters angewendet ist, gleich 7 ist.
  14. Nicht-transitorisches Computer-lesbares Speichermedium, welches Anweisungen speichert, welche, wenn mittels eines Prozessors ausgeführt, den Prozessor veranlassen, die Schritte gemäß einem der Ansprüche 1-13 durchzuführen.
  15. System, aufweisend: einen Prozessor, welcher konfiguriert ist, um die Schritte eines der Ansprüche 1-13 auszuführen.
  16. System gemäß Anspruch 15, wobei der Prozessor eine Grafik-Verarbeitungs-Einheit aufweist, welche eine Mehrzahl von Verarbeitungs-Kernen umfasst.
  17. System gemäß Anspruch 16, wobei zwei oder mehr der Verarbeitungs-Kerne konfiguriert sind, Werte von der hierarchischen Tiefe-Karte in paralleler Weise zu lesen.
DE102013222685.3A 2012-11-26 2013-11-07 System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte Active DE102013222685B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/685,599 US9111393B2 (en) 2012-11-26 2012-11-26 System, method, and computer program product for sampling a hierarchical depth map
US13/685,599 2012-11-26

Publications (2)

Publication Number Publication Date
DE102013222685A1 DE102013222685A1 (de) 2014-06-12
DE102013222685B4 true DE102013222685B4 (de) 2024-03-21

Family

ID=50772878

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013222685.3A Active DE102013222685B4 (de) 2012-11-26 2013-11-07 System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte

Country Status (4)

Country Link
US (1) US9111393B2 (de)
CN (1) CN103838548A (de)
DE (1) DE102013222685B4 (de)
TW (1) TWI514315B (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102223064B1 (ko) * 2014-03-18 2021-03-04 삼성전자주식회사 영상 처리 장치 및 방법
JP6478492B2 (ja) * 2014-06-27 2019-03-06 キヤノン株式会社 画像処理装置およびその方法
CN104517313B (zh) * 2014-10-10 2017-12-05 无锡梵天信息技术股份有限公司 基于屏幕空间的环境光遮蔽的方法
US9704056B2 (en) * 2015-04-02 2017-07-11 Qualcomm Incorporated Computing hierarchical computations for computer vision calculations
US10372968B2 (en) * 2016-01-22 2019-08-06 Qualcomm Incorporated Object-focused active three-dimensional reconstruction
TWI605416B (zh) * 2016-10-25 2017-11-11 晨星半導體股份有限公司 影像處理裝置、影像處理方法及其非暫態電腦可讀取儲存媒體
CN110914777B (zh) * 2016-12-30 2023-05-26 辉达公司 用于自主车辆的高清地图以及路线存储管理系统
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
CN107730578B (zh) * 2017-10-18 2021-07-23 阿里巴巴(中国)有限公司 光环境遮蔽图的渲染方法、生成效果图的方法和设备
CN108182656B (zh) * 2017-12-28 2021-04-30 深圳市创梦天地科技有限公司 一种图像处理方法及终端
US11995854B2 (en) * 2018-12-19 2024-05-28 Nvidia Corporation Mesh reconstruction using data-driven priors
CN115375820B (zh) * 2022-10-24 2023-03-24 腾讯科技(深圳)有限公司 顶点环境光遮蔽值的确定方法、应用方法、装置及设备

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6518966B1 (en) * 1998-03-11 2003-02-11 Matsushita Institute Industrial Co., Ltd. Method and device for collision detection and recording medium recorded with collision detection method
EP2339540B1 (de) * 2003-05-30 2012-07-18 Pacific Data Images LLC Wiedergabe weicher Schatten durch Tiefenkarten
US7333119B1 (en) * 2004-11-02 2008-02-19 Nvidia Corporation System and method for virtual coverage anti-aliasing
US8130227B2 (en) * 2006-05-12 2012-03-06 Nvidia Corporation Distributed antialiasing in a multiprocessor graphics system
US7969438B2 (en) * 2007-01-23 2011-06-28 Pacific Data Images Llc Soft shadows for cinematic lighting for computer graphics
US8390621B2 (en) * 2007-01-24 2013-03-05 Take Two Interactive Software, Inc. System and method for calculating multi-resolution dynamic ambient occlusion
US7948500B2 (en) * 2007-06-07 2011-05-24 Nvidia Corporation Extrapolation of nonresident mipmap data using resident mipmap data
US7940268B2 (en) * 2007-06-29 2011-05-10 Microsoft Corporation Real-time rendering of light-scattering media
US7940269B2 (en) * 2007-06-29 2011-05-10 Microsoft Corporation Real-time rendering of light-scattering media
EP2194504A1 (de) * 2008-12-02 2010-06-09 Koninklijke Philips Electronics N.V. Erzeugung einer Tiefenkarte
US9177381B2 (en) * 2010-12-22 2015-11-03 Nani Holdings IP, LLC Depth estimate determination, systems and methods

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MCGUIRE, M. [et al.]: Scalable ambient obscurance. In: Proceedings of the Fourth ACM SIGGRAPH / Eurographics conference on High-Performance Graphics, Eurographics Association, Aire-la-Ville, Switzerland, S. 97-103, veröffentlicht am 25.6.2012 (s. Altersnachweis).

Also Published As

Publication number Publication date
CN103838548A (zh) 2014-06-04
US20140146045A1 (en) 2014-05-29
DE102013222685A1 (de) 2014-06-12
TWI514315B (zh) 2015-12-21
US9111393B2 (en) 2015-08-18
TW201439976A (zh) 2014-10-16

Similar Documents

Publication Publication Date Title
DE102013222685B4 (de) System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte
DE102013114090B4 (de) Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms
US10229529B2 (en) System, method and computer program product for implementing anti-aliasing operations using a programmable sample pattern table
US9355483B2 (en) Variable fragment shading with surface recasting
DE102018114929B4 (de) System und verfahren für ein rendering eines lichtfeldes
US9478066B2 (en) Consistent vertex snapping for variable resolution rendering
DE102015113240A1 (de) System, verfahren und computerprogrammprodukt für schattierung unter verwendung eines dynamischen objektraumgitters
DE102018113845A1 (de) Systeme und Verfahren zum Trainieren von neuronalen Netzwerken mit dünnbesetzten Daten
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
US9230363B2 (en) System, method, and computer program product for using compression with programmable sample locations
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
US9230362B2 (en) System, method, and computer program product for using compression with programmable sample locations
US9305324B2 (en) System, method, and computer program product for tiled deferred shading
DE102013218594A1 (de) System, Verfahren und Computerprogrammprodukt zur parallelen Rekonstruktion eines gesampelten Suffixarrays
US9905037B2 (en) System, method, and computer program product for rejecting small primitives
US9721381B2 (en) System, method, and computer program product for discarding pixel samples
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE102018128699A1 (de) Einstellen einer Winkelabtastrate während eines Renderings unter Verwendung von Blickinformationen
DE102017109472A1 (de) Stereo-mehrfach-projektion implementiert unter verwendung einer graphikverarbeitungs-pipeline
DE102020108526A1 (de) Adaptive pixelabtastreihenfolge für zeitlich dichtes rendern
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE102021104310A1 (de) Reservoir-basiertes räumlich-zeitliches resampling nach wichtigkeit unter verwendung einer globalen beleuchtungsdatenstruktur
DE112019001978T5 (de) Verbesserung des realismus von szenen mit wasseroberflächen beim rendern
DE102021120604A1 (de) Dynamische bildglättung basierend auf netzwerkbedingungen
DE102013114286B4 (de) Oberflächenverarbeitung mit Mehrfachabtastung unter Verwendung von Abtastuntergruppen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R082 Change of representative

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

R018 Grant decision by examination section/examining division