DE102023124837A1 - Reduzierung falsch positiver Strahltraversierungen in einer Begrenzungsvolumen-Hierarchie - Google Patents

Reduzierung falsch positiver Strahltraversierungen in einer Begrenzungsvolumen-Hierarchie Download PDF

Info

Publication number
DE102023124837A1
DE102023124837A1 DE102023124837.5A DE102023124837A DE102023124837A1 DE 102023124837 A1 DE102023124837 A1 DE 102023124837A1 DE 102023124837 A DE102023124837 A DE 102023124837A DE 102023124837 A1 DE102023124837 A1 DE 102023124837A1
Authority
DE
Germany
Prior art keywords
node
ray
bounding
intersects
traversal
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.)
Pending
Application number
DE102023124837.5A
Other languages
English (en)
Inventor
Gregory Muthler
John Burgess
Magnus Andersson
Ian Kwong
Edward Biddulph
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 DE102023124837A1 publication Critical patent/DE102023124837A1/de
Pending 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/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/30Clipping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection

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

Es werden Techniken offenbart, die auf einen Strahlenverfolgungs-Hardware-Beschleuniger zum Traversieren einer hierarchischen Beschleunigungsstruktur mit reduzierten falsch-positiven Strahlenschnittpunkten anwendbar sind. Die Reduzierung falsch positiver Ergebnisse kann auf einem oder mehreren des selektiven Durchführens eines sekundären Schnitttests mit höherer Präzision für ein Begrenzungsvolumen, des Identifizierens und des Culling von Begrenzungsvolumen, die zu einem Punkt entarten, und des parametrischen Clipping von Strahlen beruhen, die bestimmte konfigurierte Abstandsschwellenwerte überschreiten.

Description

  • Querverweis auf verwandte Patente und Anmeldungen
  • Diese Anmeldung ist mit den folgenden gemeinsam erteilten US-Patenten und Patentanmeldungen verwandt, deren gesamter Inhalt durch Bezugnahme aufgenommen wird:
    • US-Patent Nr. 10,235,338 mit dem Titel „Short Stack Traversal of Tree Data Structures“;
    • US-Patent Nr. 9,582,607 mit dem Titel „Block-Based Bounding Volume Hierarchy“;
    • US-Patent Nr. 9,552,664 mit dem Titel „Relative Encoding For A Block-Based Bounding Volume Hierarchy“;
    • US-Patent Nr. 9,569,559 mit dem Titel „Beam Tracing“;
    • US-Patent Nr. 10,025,879 mit dem Titel „Tree Data Structures Based on a Plurality of Local Coordinate Systems“;
    • US-Patent Nr. 10,866,990 mit dem Titel „Block-Based Lossless Compression of Geometrie Data“;
    • US-Patent Nr. 10,580,196 mit dem Titel „Method for Continued Bounding Volume Hierarchy Traversal on Intersection Without Shader Intervention“;
    • US-Patent Nr. 11,157,414 mit dem Titel „Method for Efficient Grouping of Cache Requests for Datapath Scheduling“;
    • US-Patent Nr. 11,138,009 mit dem Titel „A Robust, Efficient Multiprocessor-Coprocessor Interface“;
    • US-Patent Nr. 10,867,429 mit dem Titel „Query-Specific Behavioral Modification of Tree Traversal“;
    • US-Patent Nr. 10,825,230 mit dem Titel „Conservative Watertight Ray Triangle Intersection“;
    • US-Patent Nr. 10,740,952 mit dem Titel „Method for Handling Out-of-Order Opaque and Alpha Ray/Primitive Intersections“;
    • US-Patent Nr. 10,885,698 mit dem Titel „Method for Forward Progress and Programmable Timeouts of Tree Traversal Mechanisms in Hardware“;
    • US-Patentanmeldung Nr. 16/898,98 mit dem Titel „Enhanced Techniques for Traversing Ray Tracing Acceleration Structures“;
    • US-Patent Nr. 11,302,056 mit dem Titel „Techniques for Traversing Data Employed in Ray Tracing“; und
    • US-Patent Nr. 11,282,261 mit dem Titel „Ray Tracing Hardware Acceleration with Alternative World Transforms“.
  • Gebiet
  • Die vorliegende Technologie betrifft Computergrafik und insbesondere Strahlverfolger. Insbesondere betrifft die Technologie die Hardware-Beschleunigung der Computergrafik-Verarbeitung einschließlich der Strahlenverfolgung. Die hier beschriebene, nicht einschränkende Technologie betrifft auch effiziente Strahlenschnitttests, die falsch positive Schnittpunkte reduzieren.
  • Hintergrund
  • Bei der Strahlenverfolgung wird ein Strahl in eine Szene geworfen und festgestellt, ob und wo dieser Strahl die Geometrie der Szene schneidet. Dieser grundlegende Sichtbarkeitstest durch Strahlenverfolgung ist das grundlegende Primitiv, das einer Vielzahl von Rendering-Algorithmen und -Techniken in der Computergrafik zugrunde liegt. Im Allgemeinen ist die Strahlenverfolgung ein Rendering-Verfahren, bei dem Strahlen verwendet werden, um die Sichtbarkeit verschiedener Elemente in der Szene zu bestimmen. Die Strahlenverfolgung wird in einer Vielzahl von Rendering-Algorithmen verwendet, beispielsweise bei der Pfadverfolgung und dem Metropolis-Lichttransport. In einem Beispielalgorithmus simuliert die Strahlenverfolgung die Physik des Lichts, indem es den Lichttransport durch die Szene modelliert, um alle globalen Effekte (einschließlich beispielsweise Reflexionen von glänzenden Oberflächen) mithilfe der Strahlenoptik zu berechnen. Bei solchen Anwendungen der Strahlenverfolgung kann versucht werden, jeden einzelnen von vielen Hunderten oder Tausenden von Lichtstrahlen zu verfolgen, die sich von möglicherweise mehreren Lichtquellen durch die dreidimensionale Szene bis zum Blickpunkt bewegen. Häufig werden diese Strahlen relativ zum Auge durch die Szene verfolgt und anhand einer Datenbank mit der gesamten Geometrie der Szene geprüft. Die Strahlen können vorwärts von den Lichtquellen zum Auge oder rückwärts vom Auge zu den Lichtquellen verfolgt werden, oder sie können verfolgt werden, um zu sehen, ob Pfade, die von der virtuellen Kamera ausgehen und am Auge beginnen, eine klare Sichtlinie haben. Beim Test wird entweder der nächstgelegene Schnittpunkt ermittelt (um festzustellen, was vom Auge aus sichtbar ist) oder es werden Strahlen von der Oberfläche eines Objekts in Richtung einer Lichtquelle verfolgt, um festzustellen, ob etwas dazwischen liegt, das die Übertragung von Licht zu diesem Punkt im Raum blockieren würde. Da die Strahlen den Lichtstrahlen in der Realität ähneln, ermöglichen sie eine Reihe von realistischen Effekten, die mit vielen anderen 3D-Grafiktechnologien nicht möglich sind. Da jeder Lichtstrahl von jeder Lichtquelle innerhalb der Szene ausgewertet wird, während er durch jedes Objekt in der Szene läuft, können die resultierenden Bilder so aussehen, als wären sie in der Realität fotografiert worden. Dementsprechend werden diese Strahlenverfolgung-Verfahren seit langem in professionellen Grafikanwendungen wie Design und Film verwendet, wo sie sich gegenüber dem rasterbasierten Rendering durchgesetzt haben.
  • Die Strahlenverfolgung kann verwendet werden, um festzustellen, ob etwas entlang eines Strahls sichtbar ist (beispielsweise, Prüfung auf Verdeckungen zwischen einem schattierten Punkt auf einem geometrischen Primitiv und einem Punkt auf einer Lichtquelle) und kann auch zur Auswertung von Reflexionen verwendet werden (was beispielsweise die Durchführung einer Traversierung beinhalten kann, um die nächstgelegene sichtbare Oberfläche entlang einer Sichtlinie zu bestimmen, so dass Software, die auf einem Streaming-Prozessor läuft, eine Materialschattierungsfunktion auswerten kann, die dem getroffenen Objekt entspricht - was wiederum einen oder mehrere zusätzliche Strahlen in die Szene entsprechend den Materialeigenschaften des durchschnittenen Objekts auslösen kann), um das Licht zu bestimmen, das entlang des Strahls zurück in Richtung Auge gelangt. Bei der klassischen Strahlenverfolgung nach Whitted werden die Strahlen vom Standpunkt aus durch das Pixelraster in die Szene geschossen, aber auch andere Traversierungen sind möglich. Normalerweise wird für jeden Strahl das nächstgelegene Objekt gefunden. Dieser Schnittpunkt kann dann als beleuchtet oder im Schatten liegend bestimmt werden, indem ein Strahl von ihm zu jeder Lichtquelle in der Szene geschossen wird und festgestellt wird, ob sich Objekte dazwischen befinden. Undurchsichtige Objekte blockieren das Licht, während transparente Objekte das Licht abschwächen. Von einem Schnittpunkt aus können weitere Strahlen erzeugt werden. Beispielsweise werden Strahlen in Reflexionsrichtung erzeugt, wenn die sich schneidende Oberfläche glänzend oder spiegelnd ist. Der Strahl kann die Farbe des ersten durchschnittenen Objekts annehmen, dessen Schnittpunkt wiederum auf Schatten geprüft wird. Dieser Reflexionsprozess wird rekursiv wiederholt, bis eine Rekursionsgrenze erreicht ist oder der potenzielle Beitrag nachfolgender Abpraller unter einen Schwellenwert fällt. Für transparente, feste Objekte können auch Strahlen in Brechungsrichtung erzeugt werden, die ebenfalls rekursiv ausgewertet werden. Die Raytracing-Technologie ermöglicht es einem Grafiksystem somit, physikalisch korrekte Reflexionen und Schatten zu entwickeln, die nicht den Beschränkungen und Artefakten von Scan-Konvertierungstechniken unterliegen.
  • Die größte Herausforderung bei der Strahlenverfolgung war im Allgemeinen die Geschwindigkeit. Bei der Strahlenverfolgung muss das Grafiksystem für jedes Bild jeden der vielen Millionen Lichtstrahlen berechnen und analysieren, die auf jede Oberfläche der Szene auftreffen (und möglicherweise von ihr reflektiert werden). In der Vergangenheit war es unmöglich, diese enorme Berechnungskomplexität in Echtzeit durchzuführen.
  • Ein Grund dafür, dass moderne GPU-3D-Grafikpipelines schattierte, mit Texturen versehene Oberflächen so schnell rendern können, ist die effiziente Nutzung der Kohärenz. Bei der herkömmlichen Scan-Konvertierung wird davon ausgegangen, dass alles durch ein gemeinsames Fenster in einer gemeinsamen Bildebene betrachtet und auf einen einzigen Aussichtspunkt projiziert wird. Jedes Dreieck oder ein anderes Primitiv wird durch die Grafikpipeline geschickt und deckt eine bestimmte Anzahl von Pixeln ab. Alle zugehörigen Berechnungen können für alle Pixel, die von diesem Dreieck gerendert werden, gemeinsam durchgeführt werden. Rechteckige Pixelkacheln, die kohärenten, durch das Fenster verlaufenden Sichtlinien entsprechen, können somit Gruppen von Threads entsprechen, die im selben Streaming-Prozessor im Gleichschritt laufen. Bei allen Pixeln, die zwischen die Kanten des Dreiecks fallen, wird davon ausgegangen, dass es sich um dasselbe Material handelt, auf dem derselbe Shader läuft und das benachbarte Gruppen von Texeln von denselben Texturen abruft. Im Gegensatz dazu können Strahlen beim Strahlenverfolgung an einem gemeinsamen Punkt beginnen oder enden (eine Lichtquelle oder eine virtuelle Kameralinse), aber während sie sich durch die Szene ausbreiten und mit verschiedenen Materialien interagieren, weichen sie schnell voneinander ab. Beispielsweise führt jeder Strahl eine Suche nach dem nächstgelegenen Objekt durch. Die Ergebnisse können zwar in gewissem Umfang zwischengespeichert und gemeinsam genutzt werden, aber da jeder Strahl potenziell auf verschiedene Objekte treffen kann, ist die Art von Kohärenz, die GPUs herkömmlich in Verbindung mit texturierten, schattierten Dreiecken nutzen, nicht gegeben (z. B. gibt es keinen gemeinsamen Aussichtspunkt, kein Fenster und keine Bildebene für Strahlenverfolgung). Dies macht die Strahlenverfolgung rechnerisch viel anspruchsvoller als andere grafische Ansätze - und daher viel schwieriger auf interaktiver Basis durchzuführen.
  • Im Jahr 2010 nutzte NVIDIA den hohen Grad an Parallelität von NVIDIA-GPUs und anderen hochparallelen Architekturen, um die Strahlverfolgungs-Engine OptiX™ zu entwickeln. Siehe Parker et al., „OptiX: A General Purpose Ray Tracing Engine" (ACM Transactions on Graphics, B. 29, Nr. 4, Artikel 66, Juli 2010). Neben den Verbesserungen der APIs (Anwendungsprogrammierschnittstellen) bestand einer der Fortschritte von OptiX™ in der Verbesserung der Beschleunigungsdatenstrukturen, die für die Suche nach einem Schnittpunkt zwischen einem Strahl und der Szenengeometrie verwendet werden. Bei solchen Beschleunigungsdatenstrukturen handelt es sich in der Regel um Raum- oder Objekthierarchien, die vom Algorithmus zur Traversierung von Strahlen verwendet werden, um effizient nach Primitiven zu suchen, die einen bestimmten Strahl potenziell schneiden können. OptiX™ bietet eine Reihe von verschiedenen Beschleunigungsstrukturtypen, aus denen die Anwendung wählen kann. Jede Beschleunigungsstruktur im Knotengraphen kann von einem anderen Typ sein, so dass Kombinationen von hochwertigen statischen Strukturen mit dynamisch aktualisierten Strukturen möglich sind.
  • Die programmierbare OptiX™- Strahlverfolgungs-Pipeline brachte erhebliche Fortschritte, war aber im Allgemeinen immer noch nicht in der Lage, auf relativ preiswerten Computerplattformen für komplexe 3D-Szenen interaktive Reaktionen auf Benutzereingaben in Echtzeit zu liefern. Seitdem hat NVIDIA Hardware-Beschleunigungsfunktionen für die Strahlverfolgung entwickelt. Siehe z. B. US 9,582,607 ; US 9,569,559 ; US 20160070820 ; US 20160070767 ; und die anderen oben genannten US-Patente und Patentanmeldungen.
  • Eine grundlegende Aufgabe der meisten Strahlverfolger besteht darin, einen Strahl gegen alle Primitive (in einer Ausführungsform üblicherweise Dreiecke) in der Szene zu testen und je nach Anwendungsfall entweder den nächstgelegenen Treffer (entsprechend der entlang des Strahls gemessenen Entfernung) oder einfach den ersten (nicht unbedingt nächstgelegenen) Treffer zu melden. Der naive Algorithmus wäre eine O(n)-Brute-Force-Suche. Aufgrund der großen Anzahl von Primitiven in einer 3D-Szene beliebiger Komplexität ist es jedoch für einen Strahlverfolger in der Regel nicht effizient oder machbar, jedes geometrische Primitiv in der Szene auf einen Schnittpunkt mit einem bestimmten Strahl zu testen.
  • Durch die Vorverarbeitung der Szenengeometrie und den Aufbau einer geeigneten Beschleunigungsdatenstruktur im Voraus ist es jedoch möglich, die durchschnittliche Komplexität auf O(log n) zu reduzieren. Beschleunigungsdatenstrukturen, wie z. B. eine Begrenzungsvolumen-Hierarchie oder BVH, ermöglichen eine schnelle Entscheidung darüber, welche Begrenzungsvolumen ignoriert werden können, welche Begrenzungsvolumens durchschnittene geometrische Primitive enthalten können und welche durchschnittenen geometrischen Primitive für die Visualisierung wichtig sind und welche nicht. Die Verwendung einfacher Volumen, wie z. B. Rahmen, zur Aufnahme komplexerer Objekte führt zu einer höheren Rechen- und Speichereffizienz, die es ermöglicht, die Strahlenverfolgung in Echtzeit durchzuführen.
  • Die 1A-1C veranschaulichen das Strahlenverfolgungs-Schnitttesten im Zusammenhang mit einem Begrenzungsvolumen 110, der ein geometrisches Netz 120 enthält. 1A zeigt einen Strahl 102 in einem virtuellen Raum mit den Begrenzungsvolumen 110 und 115. Um festzustellen, ob der Strahl 102 die Geometrie im Netz 120 schneidet, könnte jedes geometrische Primitiv (z. B. ein Dreieck) direkt gegen den Strahl 102 getestet werden. Um den Prozess jedoch zu beschleunigen (da das Objekt viele Tausende geometrischer Primitive enthalten könnte), wird der Strahl 102 zunächst anhand der Begrenzungsvolumen 110 und 115 getestet. Wenn der Strahl 102 ein Begrenzungsvolumen nicht schneidet, schneidet er auch keine Geometrie innerhalb des Begrenzungsvolumens, und die gesamte Geometrie innerhalb des Begrenzungsvolumens kann für die Zwecke dieses Strahls ignoriert werden. Da in 1A der Strahl 102 das Begrenzungsvolumen 110 verfehlt, muss die Geometrie des Netzes 120 innerhalb dieses Begrenzungsvolumens nicht auf Schnittpunkte geprüft werden. Das Begrenzungsvolumen 115 wird zwar von dem Strahl 102 durchschnitten, enthält aber keine Geometrie, so dass kein weiterer Test erforderlich ist.
  • Wenn andererseits ein Strahl wie der in 1B gezeigte Strahl 104 ein Begrenzungsvolumen 110 schneidet, das eine Geometrie enthält, dann kann der Strahl die Geometrie innerhalb des Begrenzungsvolumens schneiden oder auch nicht, so dass weitere Tests an der Geometrie selbst durchgeführt werden müssen, um mögliche Schnittpunkte zu finden. Da die Strahlen 104, 106 in den 1B und 1C ein Begrenzungsvolumen 110 schneiden, das Geometrie enthält, müssen weitere Tests durchgeführt werden, um festzustellen, ob (und welche) der Primitive innerhalb des Begrenzungsvolumens geschnitten werden. In 1B würde ein weiterer Test der Schnittpunkte mit den Primitiven anzeigen, dass der Strahl 104 zwar durch das Begrenzungsvolumen 110 verläuft, aber keine der Geometrien schneidet, die das Begrenzungsvolumen einschließt (alternativ könnte, wie oben erwähnt, das Begrenzungsvolumen 110 volumetrisch weiter unterteilt werden, so dass ein Schnittpunkttest des Begrenzungsvolumens verwendet werden könnte, um festzustellen, dass der Strahl keine Geometrie schneidet, oder genauer gesagt, welche geometrischen Primitive der Strahl möglicherweise schneidet).
  • 1C zeigt eine Situation, in der der Strahl das Begrenzungsvolumen 110 schneidet und eine Geometrie enthält, die der Strahl 106 durchschneidet. Um die Strahlverfolgung in Echtzeit durchzuführen, testet ein Schnittpunkttester jedes geometrische Primitiv innerhalb des durchschnittenen Begrenzungsvolumens 110, um festzustellen, ob der Strahl dieses geometrische Primitiv durchschneidet.
  • Eine Beschleunigungsdatenstruktur oder Beschleunigungsstruktur („AS“), die üblicherweise von modernen Strahlverfolgern verwendet wird, ist eine Begrenzungsvolumen-Hierarchie (BVH), die verschachtelte achsenausgerichtete Begrenzungsrahmen aufweist. Die Blattknoten der BVH enthalten die Primitive (z. B. Dreiecke), die auf Schnittpunkte geprüft werden. Die BVH wird meist durch eine Graph- oder Baumstruktur dargestellt.
  • Die BVH AS repräsentiert und/oder referenziert das 3D-Modell eines Objekts oder einer Szene auf eine Art und Weise, die dabei hilft, schnell zu entscheiden, welchen Teil des Objekts oder der Szene ein bestimmter Strahl wahrscheinlich durchschneiden wird, und große Teile der Szene, die die Strahlen nicht durchschneiden werden, schnell zu verwerfen. Die BVH-Datenstruktur stellt eine Szene oder ein Objekt mit einem Begrenzungsvolumen dar und unterteilt das Begrenzungsvolumen in immer kleinere Begrenzungsvolumen, die in Blattknoten enden, die geometrische Primitive enthalten. Die Begrenzungsvolumen sind hierarchisch aufgebaut, d. h. die oberste Ebene umschließt die darunter liegende Ebene, diese wiederum die nächsttiefere und so weiter. Auf jeder Ebene kann die Aggregation der Nachfolger-Begrenzungsvolumen eines Vorgänger-Begrenzungsvolumens den durch das Vorgänger-Begrenzungsvolumen definierten Raum vollständig ausfüllen, muss es aber nicht. In einer Ausführungsform können Blattknoten andere Blattknoten in der Begrenzungsvolumen-Hierarchie potenziell überlappen. Bei der Strahlenverfolgung ist die Suche nach dem nächstgelegenen Schnittpunkt (oder bei Schatten, einem beliebigen Schnittpunkt) für einen Strahl typischerweise O(log n) für n Objekte, wenn eine solche AS verwendet wird. Beispielsweise haben Begrenzungsvolumen-Hierarchien (BVHs), wie sie üblicherweise für moderne Datenstrukturen zur Beschleunigung von Strahlenverfolgung verwendet werden, ein Suchverhalten der Ordnung O(log n).
  • Die RTX-Plattform von NVIDIA umfasst eine Strahlverfolgungs-Technologie, die Inhaltserstellern und Spieleentwicklern Rendering in Echtzeit und in Kinoqualität ermöglicht. Siehe https://developer.nvidia.com/rtx/raytracing. In vielen oder den meisten Implementierungen, einschließlich NVIDIA RT Cores, verwenden die Begrenzungsvolumen einer AS, wie in 1A-1C gezeigt, achsenausgerichtete Begrenzungsrahmen („AABBs“), die kompakt gespeichert (sie können mit nur sechs Werten angegeben werden) und effizient auf Strahlenschnitte getestet werden können. Wenn der Strahlverfolger den BVH-Baum nach unten traversiert, schließt er nicht schneidende Begrenzungsrahmen aus der Suche aus und unterteilt schneidende Begrenzungsrahmen in immer kleinere Volumen, bis er ein Blattknoten-Begrenzungsrahmen antrifft, der die Geometrie einschließt. Strahl-Begrenzungsvolumen-Schnitttests an AABB-Begrenzungsrahmen sind in der Regel kostengünstig. Wenn ein Strahl den Begrenzungsrahmen eines Blattknotens schneidet, wird die zugrunde liegende Geometrie, die der Begrenzungsrahmen des Blattknotens umschließt, mit einem Strahl-Geometrie-Schnittpunkttest geprüft. Wenn ein Strahl das Begrenzungsvolumen des Blattknotens nicht schneidet, muss die zugrunde liegende Geometrie innerhalb des Begrenzungsvolumens des Blattknotens nicht anhand des Strahls geprüft werden. Wie die 1A-1C zeigen, erhöht eine Hierarchie von AABBs den Culling-Effekt eines einzelnen AABB-Begrenzungsrahmen-Tests. Dies ermöglicht eine effiziente Traversierung und eine schnelle Reduzierung auf die interessierende Geometrie.
  • Die BVH AS für eine Anwendung kann zahlreiche Begrenzungsrahmen enthalten. Außerdem muss die räumliche Beziehung zwischen den Begrenzungsrahmen und der Geometrie nicht exakt sein (und wird es im Allgemeinen auch nicht). Das heißt, ein Begrenzungsrahmen muss die Geometrie, die er umschließt, vollständig enthalten (ein negatives Ergebnis für den Schnittpunkt zwischen Strahl und Begrenzungsrahmen bedeutet also, dass der Strahl keine Geometrie innerhalb des Begrenzungsvolumens schneidet), aber das Begrenzungsvolumen kann (und ist in der Regel) größer als die darin enthaltene Geometrie sein. Um Speicherplatz und Bandbreite effizienter zu nutzen, werden die Parameter, die die Begrenzungsvolumen spezifizieren (z. B. Vertexkoordinaten von Rahmen, die Begrenzungsvolumen darstellen), in der Regel als numerische Daten mit geringer Genauigkeit gespeichert, die gerundet wurden, um sicherzustellen, dass der Begrenzungsrahmen die Geometrie vollständig enthält. Vertexkoordinaten, die als numerische Daten mit geringer Genauigkeit gespeichert werden, benötigen weniger Speicherplatz als hochpräzise Daten, wodurch die BVH komprimierter gespeichert werden kann. Beispielsweise belegen die Vertexkoordinaten einer bestimmten Anzahl von Begrenzungsvolumen im numerischen 8-Bit-Präzisionsdatenformat nur 1/4 des Platzes, den die gleiche Anzahl von Begrenzungsvolumen im numerischen 32-Bit-Präzisionsdatenformat einnimmt.
  • Für einen Schnittpunkt zwischen Strahl und Rahmen muss festgestellt werden, ob der Strahl auf eine beliebige Oberfläche des Begrenzungsvolumens trifft. Ein Strahl hat eine infinitesimale Breite. Wenn ein Strahl betrachtet wird, dessen Ursprung weit vom Begrenzungsvolumen entfernt ist, kann die Entfernung des Strahlursprungs zu Rundungsfehlern führen, die gelegentlich zu Fällen führen, in denen der Schnittpunkttest aufgrund der Verwendung von Zahlen mit geringer Genauigkeit in den Vertexkoordinaten des Begrenzungsvolumens zu einem „Fehlschlag“ führt, obwohl eine Darstellung desselben Begrenzungsvolumens mit höherer Genauigkeit zu einem „Treffer“ geführt hätte. Da bei der Traversierung von Strahlen alle Begrenzungsvolumen, die beim Schnittpunkttest nicht gefunden wurden, aus der Traversierung dieses Strahls entfernt werden, führt ein ungenauer Fehlschlag dazu, dass fälschlicherweise die gesamte Geometrie entfernt wird, die von dem entfernten Begrenzungsvolumen eingeschlossen ist. Eine solche fälschlicherweise entfernte Geometrie kann zu unerwünschten Artefakten in der gerenderten Szene führen (z. B. fehlerhaftes Rendern von Strahleneffekten auf einer solchen Geometrie).
  • Um ein solches fehlerhaftes Culling von Geometrien aufgrund weit entfernter Strahlenursprünge zu vermeiden oder zu reduzieren, haben einige NVIDIA-Strahlverfolgungs-Implementierungen eine „Aufblähung“ des Strahls vor dem Schnittpunkttest eingeführt. Die Traversierung kann verbessert werden, indem sichergestellt wird, dass ein Strahl, der ein Dreieck treffen kann, auch den Begrenzungsrahmen treffen muss, der dieses Dreieck konservativ umgibt. Zusätzlich zur Bereitstellung konservativer Begrenzungsrahmen ist es jedoch auch möglich, dem unendlich kleinen Strahl ein endliches Querschnittsvolumen für den Schnittpunkttest zwischen Strahl und Begrenzungsrahmen zu geben. Die Aufblähung führt dazu, dass der Strahl eher wie ein konische Strahlenbündel betrachtet wird, das als Punkt am Strahlenursprung beginnt und mit der Entfernung breiter wird. In 1D ist der Strahl 108 als ein konisches Strahlenbündel 109 dargestellt, das am Strahlursprung 107 beginnt und mit der Entfernung an Umfang zunimmt. Das Strahlenbündel - das (im Gegensatz zum Strahl) ein Volumen hat - ist toleranter gegenüber weniger genau definierten Eckpunkten des Begrenzungsrahmens. Wie in 1D gezeigt, schneidet der Strahl 108 zwar nicht das Begrenzungsvolumen 110, aber der Strahl 109, der den „aufgeblähten“ Strahl bildet, schneidet das Begrenzungsvolumen 110. In den oben erwähnten NVIDIA-Strahlverfolgungs-Implementierungen hat diese Technik der Aufblähung des Strahls in den meisten Fällen zu einer erfolgreichen Verringerung falsch negativer Schnittpunkte zwischen Strahl und Begrenzungsrahmen geführt, wodurch die durch die Komprimierung der Begrenzungsrahmen-Eckpunkte verursachten Fehler kompensiert werden.
  • Bei der Verwendung einer solchen Strahlenaufblähung kann jedoch die Breite des Strahlenbündels am Schnittpunkt zu groß werden, je weiter der Strahlenursprung von dem betrachteten Begrenzungsvolumen entfernt ist, und eine Reihe von Begrenzungsvolumen zusätzlich zu den Begrenzungsvolumen umfassen, die von dem entsprechenden Strahl geschnitten werden und/oder kurz davor stehen, geschnitten zu werden. Wäre beispielsweise das Strahlenbündel 109 in 1D breiter (d. h. weil der Strahlursprung weiter vom Begrenzungsvolumen entfernt wäre), könnte es auch das Begrenzungsvolumen 130 durchschneiden, obwohl der Strahl 108 dieses Begrenzungsvolumen eindeutig nicht durchschneidet. In solchen Fällen einer zu breiten Strahlenbündelbreite sind alle Begrenzungsvolumen, die vom Strahlenbündel geschnitten werden, aber vom entsprechenden Strahl nicht geschnitten worden wären, „falsch-positive Schnitte“, da solche falsch geschnittenen Begrenzungsvolumen keine Geometrie umfassen, die schließlich von der Traversierung des Strahls geschnitten werden würde. Solche falsch-positiven Schnittpunkte führen zwar nicht zu Bildartefakten, können aber zu erheblicher Ineffizienz in Form von unnötigen zusätzlichen Tests führen.
  • Eine Strahlverfolgung traversiert die BVH-Hierarchie, indem sie in jedes durchschnittene Begrenzungsvolumen hinabsteigt. Wenn die Traversierung die Blattknoten des BVH erreicht, werden die Strahlen-Geometrie-Tests in der Regel mit Daten höherer Präzision durchgeführt, um Treffer und Fehlschläge genau zu bestimmen. Daher werden die Ergebnisse der Strahlen-Geometrie-Tests nicht durch Begrenzungsrahmen-Darstellungen mit geringerer Genauigkeit beeinträchtigt. Falsch positive Treffer bei Begrenzungsvolumen können jedoch dazu führen, dass unnötige Strahl-Begrenzungsvolumen- und Strahl-Primitiv-Schnitttest durchgeführt werden, wodurch sich die Verarbeitungskosten und die Zeit für die Traversierung der Strahlen unnötig erhöhen. Bei großen Entfernungen vom Strahlenursprung kann die Strahlenaufblähung so groß werden, dass der Strahl-Begrenzungsvolumen-Schnitttest nicht mehr ausreicht, um etwas zu finden. Stellen Sie sich beispielsweise einen Laser vor, der auf der Erdoberfläche auf den Mond gerichtet ist. Da der Laserstrahl aus kollimiertem Licht besteht, bleibt er auf seinem Weg durch die Erdatmosphäre eng gebündelt. Der Mond ist jedoch etwa 384.000 km von der Erde entfernt. Aufgrund der Lichtstreuung über eine solche Entfernung wird der Laserstrahl, wenn er den Mond erreicht, auf einen Durchmesser von etwa 7 km aufgebläht sein. Würde derselbe Laserstrahl auf den Mars gerichtet (etwa 55 Millionen Kilometer von der Erde entfernt), könnte die daraus resultierende Aufblähung des Laserstrahls den gesamten Planeten umfassen.
  • Im Zusammenhang mit der Strahlaufblähung in Strahlverfolgern bedeutet dies, dass zu viele Begrenzungsvolumen geschnitten werden, unter denen es möglicherweise keine tatsächlichen geometrischen Schnittpunkte gibt. Die übermäßige Traversierung sowohl bei Strahl-Begrenzungsvolumen-Schnitten als auch bei Strahl-Primitiv-Schnitten kann zu so starken Leistungseinbrüchen führen, dass man sie als „Leistungsklippen“ bezeichnen kann.
  • Frühere oder alternative Lösungen für die Wasserdichtigkeitsgarantie könnten Begrenzungsrahmen mit voller Genauigkeit statt verlustbehafteter Schnittpunkttests mit geringer Präzision verwenden. Ein solcher Ansatz hat den Vorteil, dass weniger (oder gar keine) konservative Strahlenaufblähung erforderlich ist. Wie bereits erwähnt, haben Begrenzungsrahmen-Darstellungen mit höherer Genauigkeit jedoch den Nachteil, dass sie höhere Hardwarekosten für die Speicherung und den mathematischen Datenpfad verursachen, was die Traversierung von Strahlen verlangsamen kann.
  • Um die Strahlverfolgung in Echtzeit effizienter zu gestalten, ist es wünschenswert, in bestimmten Szenarien, beispielsweise wenn der Ursprung eines Strahls weit vom Begrenzungsvolumen entfernt ist, die Zahl der falsch-positiven Strahl-Rahmen-Schnitte zu reduzieren.
  • Kurzbeschreibung der Zeichnungen
    • Die 1A-1C zeigen beispielhaft vereinfachte Tests zur Strahlenverfolgung, um festzustellen, ob der Strahl durch ein Begrenzungsvolumen verläuft, das eine Geometrie enthält, und ob der Strahl eine Geometrie innerhalb des Begrenzungsvolumens schneidet.
    • 1D zeigt ein Beispielszenario, bei dem vor dem Schnitttest eine „Aufblähung“ in einen Strahl eingeführt wird.
    • 2 zeigt ein beispielhaftes, nicht einschränkendes Strahlverfolgungs-Grafiksystem mit Hardwarebeschleunigung gemäß einigen beispielhaften Ausführungsformen.
    • 3A zeigt einen Teil einer beispielhaften Beschleunigungsdatenstruktur.
    • 3B zeigt, wie die beispielhafte Beschleunigungsdatenstruktur von 3A modifiziert werden kann, um bestimmte programmierbare Strahlenoperationen auf Kosten eines erhöhten Speicherbedarfs zu unterstützen.
    • 4A ist ein Flussdiagramm einer beispielhaften, nicht einschränkenden Strahlverfolgungs-Grafikpipeline gemäß einigen Ausführungsformen.
    • 4B ist ein Flussdiagramm von beispielhaften, nicht einschränkenden hardwarebasierten Strahlverfolgungs-Operationen gemäß einigen Ausführungsformen.
    • Die 5A und 5B zeigen detailliertere Strahlverfolgungs-Pipelines gemäß einigen Ausführungsformen.
    • 6 zeigt einen vereinfachten, nicht einschränkenden Traversierungs-Coprozessor, der eine Baumtraversierungseinheit (TTU) aufweist, wie in einigen Ausführungsformen dargestellt.
    • 7 stellt einen Prozess zum Reduzieren von falsch-positiven Traversierungen dar, wobei der Prozess gemäß einigen Ausführungsformen eines oder mehrere der Techniken des Transformationsrahmentests, des Punktentartungs-Culling und des Strahl-Clipping umfassen kann.
    • 8 stellt einen Prozess zum Reduzieren von falsch-positiven Traversierungen unter Verwendung der Technik des Transformationsrahmentests dar, wie es in einigen Ausführungsformen eingesetzt wird.
    • Die 9A und 9B zeigen eine Knotendatenstruktur zur Aufnahme von Parametern zur Verwendung in der in 8 gezeigten Transformationsrahmen-Testtechnik, gemäß einigen Ausführungsformen.
    • Die 10A, 10B und 10C stellen einen Slab-Test dar, der bei einem Strahl-Begrenzungsvolumen-Schnitttest gemäß einigen Ausführungsformen verwendet werden kann.
    • 11 stellt einen Prozess zum Reduzieren von falsch-positiven Traversierungen von Strahlen mit Hilfe der Technik des Punktentartungs-Culling dar, wie es in einigen Ausführungsformen eingesetzt wird.
    • Die 12A und 12B zeigen Datenstrukturen mit Parametern zur Verwendung in der in 11 gezeigten digitalen Punkt-Culling-Technik, gemäß einigen Ausführungsformen
    • 13 stellt einen Prozess zum Reduzieren von falsch-positiven Traversierungen mit Hilfe der Technik des Strahlen-Culling gemäß einigen Ausführungsformen dar.
    • 14A stellt konzeptionell die Technik der Strahlen-Clipping gemäß einigen Ausführungsformen dar.
    • 14B zeigt Datenstrukturen mit Parametern für die in 13 gezeigte Technik des Strahlen-Clipping gemäß einigen Ausführungsformen.
    • 15 zeigt eine beispielhafte Parallelverarbeitungseinheit eine GPU, wie sie in einigen Ausführungsformen verwendet wird.
    • 16A stellt ein Beispiel für einen allgemeinen Verarbeitungscluster (GPC) innerhalb der Parallelverarbeitungseinheit von 15 dar, wobei jeder Streaming-Multiprozessor im allgemeinen Verarbeitungscluster mit einer Hardware-Strahlenverfolgungs-Beschleunigungsvorrichtung gekoppelt ist, wie in einigen Ausführungsformen vorgesehen.
    • 16B stellt eine beispielhafte Speicherpartitionseinheit der Parallelverarbeitungseinheit von 15 dar.
    • 17 stellt einen beispielhaften Streaming-Multiprozessor der 16A dar.
    • 18A ist ein beispielhaftes konzeptionelles Diagramm eines Verarbeitungssystems, das unter Verwendung der Parallelverarbeitungseinheit (PPU) von 15 implementiert wird.
    • 18B ist ein Blockdiagramm eines beispielhaften Systems, in dem die verschiedenen Architekturen und/oder Funktionen der verschiedenen vorherigen Ausführungsformen implementiert werden können.
  • Detaillierte Beschreibung von nicht-einschränkenden Ausführungsformen
  • Die bereits hocheffizienten Strahlverfolgungs-Fähigkeiten der Nvidia RTX-Technologie, die ein hardwarebeschleunigte Testen von Strahlen gegen die hierarchisch angeordneten Begrenzungsrahmen ermöglicht, die Objektgeometrien in einer Szene und auch die zugrunde liegenden Objektgeometrien umfassen, können noch weiter verbessert werden, indem falsch-positive Strahl-Begrenzungsvolumen-Schnitte reduziert werden, die, wie oben beschrieben, zu erheblichen Mengen an unnötigen BVH-Traversierungen und Schnitttests führen können.
  • Bestimmte beispielhafte Ausführungsformen dieser Offenbarung stellen eine Coprozessor-Hardwarevorrichtung für die Strahlenverfolgung mit bereit, die eine hardwarebeschleunigte Strahlenverfolgung mit reduzierten falsch-positiven Strahl-Begrenzungsvolumen-Schnittpunkten ermöglicht. Obwohl Techniken wie die Durchführung aller Schnittpunkttests in vollpräziser Gleitkommaarithmetik dazu beitragen können, falsch-positive Schnittpunkte zu reduzieren, erhöhen solche Techniken erheblich den Speicherplatz, der für die Speicherung der Begrenzungsvolumen-Informationen erforderlich ist, und den Hardwarebereich, der für die Schaltung zur Verarbeitung vollpräziser Schnittpunktberechnungen erforderlich ist. In der Coprozessor-Hardware, die so konfiguriert ist, dass sie in jedem Zyklus viele (z. B. 24) Strahl-Begrenzungsvolumen-Schnitte durchführt, kann der zusätzliche Schaltungsbereich, der für die Implementierung der vollen Präzision (z. B. 32-Bit-Gleitkommaberechnung gegenüber 8-Bit-Gleitkommaberechnung) für alle Strahl-Begrenzungsvolumen-Schnitte erforderlich ist, unerschwinglich werden. In dieser Offenbarung werden drei Techniken beschrieben, die in Kombination oder einzeln eingesetzt werden können, um falsch-positive Strahl-Begrenzungsvolumen-Schnitte zu reduzieren, ohne die Schaltungsfläche wesentlich zu vergrößern.
  • Die erste der drei Techniken wird hier als „Transformformations-Rahmentest“ (TBT) bezeichnet. Bei der TBT-Technik ist die Strahlverfolgungs-Coprozessor-Hardwarevorrichtung so konfiguriert, dass sie für ausgewählte Knoten des BVH einen Strahl-Begrenzungsvolumen-Schnitttest durchführt, wobei eine numerische Darstellung der Vertexkoordinaten mit höherer Präzision und eine Schaltung verwendet wird, die für mathematische Berechnungen mit höherer Präzision konfiguriert ist, bevor entschieden wird, ob dieser Knoten durchlaufen werden soll, und einen Strahl-Begrenzungsvolumen-Schnitttest durchführt, wobei eine Schaltung verwendet wird, die für mathematische Berechnungen mit niedrigerer Präzision konfiguriert ist, wobei die Vertexkoordinaten des Begrenzungsvolumen in der numerischen Darstellung mit niedrigerer Präzision definiert sind. Wenn der genauere Schnittpunkttest mit höherer Genauigkeit zu einem Fehlschlag führt, wird der Knoten ohne Traversierung ausgewertet. Eine Traversierung des Knotens, die einen Schnitttest mit der niedrigeren Genauigkeit beinhaltet, kann nur erfolgen, wenn der genauere Schnitttest einen Treffer ergibt. Auf diese Weise werden alle falsch-positiven Strahl-Begrenzungsvolumen-Schnittpunkte, wie in 1D in Bezug auf das Begrenzungsvolumen 110 gezeigt, eliminiert. Die sich daraus ergebende Verringerung falsch-positiver Strahl-Begrenzungsvolumen-Schnittpunkte kann beispielsweise ein effizienteres Rendering von Strahlverfolgung in Echtzeit ermöglichen. Das TBT-Verfahren ermöglicht eine Kombination aus verlustbehafteten Schnittpunkttests mit geringer Genauigkeit, um eine bessere Leistung zu erzielen, und einem Test mit voller Genauigkeit, um übermäßige Fehlalarme zu vermeiden.
  • Die zweite der drei Techniken wird hier als „Punktentartungs-Culling“ (PDC) bezeichnet. Bei der PDC-Technik können Gruppen von einem oder mehreren Knoten des BVH ausgemerzt werden, wenn das diesen Gruppen zugeordnete Begrenzungsvolumen im Hinblick auf die Entfernung des Strahlenursprungs zu einem Punkt entartet. Ein „Punkt“, wie er hier verwendet wird, ist ein geometrischer Punkt, der innerhalb realistischer Grenzen der Fließkommagenauigkeit ein Volumen von Null hat. Durch das Ausblenden eines Begrenzungsvolumens, das zu einem Punkt entartet, können falsch-positive Schnittpunkte reduziert werden, da Geometrien, die von einem Begrenzungsvolumen, das zu einem Punkt entartet, umschlossen werden, ebenfalls Punkte sind und solche Punkte nicht vom Strahl geschnitten werden. Die PDC-Technik ermöglicht die Verwendung von Informationen über die nachfolgenden Schnitttests, um Begrenzungsvolumen-Schnitte auszusortieren, die nachweislich nichts unter ihnen schneiden, die diesen spezifischen Schnitttest verwenden.
  • Die dritte der drei Techniken wird hier als „Strahlen-Clipping“ bezeichnet. Die Strahlen-Clipping ist ein Verfahren, bei dem, wenn der Strahlenursprung über einen vorkonfigurierten Abstandsschwellenwert hinausgeht, der Strahlenursprung parametrisch näher an das Begrenzungsvolumen herangeführt wird, so dass die Ausbreitung nicht zu einem breiten Strahl führt. Durch die Verringerung der Ausdehnung führt die Technik der Strahlen-Clipping zu weniger falsch-positiven Schnittpunkten. In einigen Ausführungsformen vermeidet das Strahlen-Clipping Umläufe zwischen dem Hardware-Beschleunigungs-Coprozessor und dem Prozessor, um Strahlen auf einen Begrenzungsrahmen der Instanz zu beschneiden und dadurch die notwendige Ausdehnung sowohl für die Strahl-Begrenzungsrahmen- als auch für Strahl-Dreiecksprimitiv-Schnitttests zu reduzieren.
  • Beispielhafte Ausführungsformen sehen vor, dass für ausgewählte Knoten des BVH die Vertexkoordinaten in einem numerischen Format mit höherer Genauigkeit angegeben werden, zusätzlich zu den Vertexkoordinaten, die im üblichen numerischen Format mit niedrigerer Genauigkeit definiert sind. In einigen Ausführungsformen wird der mit dem zusätzlichen Schnittpunkttest (dem Test mit höherer Genauigkeit) für die ausgewählten Knoten verbundene Zeitaufwand reduziert, indem dieser Test im Wesentlichen parallel zu einer anderen Operation in dieser Traversierung durchgeführt wird.
  • Die drei oben genannten Techniken können in Kombination oder einzeln eingesetzt werden, um falsch-positive Traversierungen zu reduzieren. Die hier beschriebenen Ausführungsformen können verwendet werden, um die falsch-positiven Traversierungen sowohl bei Strahl-Begrenzungsvolumen-Schnitten als auch bei Strahl-Primitiv-Schnitten zu reduzieren, die zu den oben erwähnten drastischen Leistungseinbrüchen führen, die auf übermäßige Traversierungen zurückzuführen sind, wobei sie auch mit Wasserdichtigkeitsgarantien konsistent sind, die für Schnitttests erforderlich sind.
  • Beispielhaftes System-Blockdiagramm
  • 2 zeigt ein Beispiel für ein interaktives Echtzeit-Strahlenverfolgungs-Grafiksystem 200 zur Erzeugung von Bildern unter Verwendung von dreidimensionalen (3D) Daten einer Szene oder eines Objekts (von Objekten), einschließlich der Beschleunigungsdatenstruktur, die wie unten beschrieben aufgebaut ist.
  • Das System 200 umfasst eine Eingabevorrichtung 210, einen oder mehrere Prozessoren 220, eine oder mehrere Grafikverarbeitungseinheiten (GPU(s)) 230, einen Speicher 240 und eine oder mehrere Anzeigen 250. Das in 2 gezeigte System kann jeden Formfaktor annehmen, einschließlich, aber nicht beschränkt auf einen PersonalComputer, ein Smartphone oder ein anderes intelligentes Gerät, ein Videospielsystem, ein tragbares Virtual- oder Augmented-Reality-System, ein Cloud-basiertes Computersystem, ein in einem Fahrzeug montiertes Grafiksystem, ein System-on-a-Chip (SoC) usw.
  • Der Prozessor 220 kann eine Multicore-Zentraleinheit (CPU) sein, die eine Anwendung in Echtzeit interaktiv als Reaktion auf die Eingabevorrichtung 210 ausführt, deren Ausgabe Bilder für die Anzeige auf dem Display 250 enthält. Bei der Anzeige 250 kann es sich um jede Art von Anzeige handeln, wie z. B. eine stationäre Anzeige, eine am Kopf befestigte Anzeige, wie z. B. eine Bildschirmbrille oder eine Brille, andere Arten von am Körper zu tragenden Anzeigen, eine in der Hand gehaltene Anzeige, eine in einem Fahrzeug montierte Anzeige, usw. Beispielsweise kann der Prozessor 220 eine Anwendung basierend auf den von der Eingabevorrichtung 210 (z. B. einem Joystick, einem Trägheitssensor, einem Umgebungslichtsensor usw.) empfangenen Eingaben ausführen und die GPU 230 anweisen, Bilder zu erzeugen, die den Anwendungsfortschritt für die Anzeige auf dem Display 250 zeigen.
  • Basierend auf der Ausführung der Anwendung auf dem Prozessor 220 kann der Prozessor Anweisungen an den Grafikprozessor 230 zur Erzeugung von Bildern unter Verwendung der im Speicher 240 gespeicherten 3D-Daten erteilen. Der Grafikprozessor 230 enthält spezielle Hardware zur Beschleunigung der Bilderzeugung in Echtzeit. Beispielsweise ist der Grafikprozessor 230 in der Lage, Informationen für Tausende oder Millionen von Grafikprimitiven (Polygonen) in Echtzeit zu verarbeiten, da der Grafikprozessor in der Lage ist, sich wiederholende und hochparallele spezialisierte Rechenaufgaben wie die Polygon-Scan-Konvertierung viel schneller durchzuführen als herkömmliche softwaregesteuerte CPUs. Beispielsweise kann die GPU 230 im Gegensatz zum Prozessor 220, der über mehrere Kerne mit viel CacheSpeicher verfügt, die jeweils einige Software-Threads verarbeiten können, Hunderte oder Tausende von parallel laufenden Rechenkernen oder „Streaming-Multiprozessoren“ (SMs) 232 umfassen.
  • In einer beispielhaften Ausführungsform umfasst der Grafikprozessor 230 eine Vielzahl programmierbarer Hochleistungsprozessoren, die als „Streaming-Multiprozessoren“ („SMs“) 232 bezeichnet werden können, und eine hardwarebasierte Grafikpipeline mit einer Grafik-Primitiv-Engine 234 und einer Raster-Engine 236. Diese Komponenten des Grafikprozessors 230 sind so konfiguriert, dass sie eine Bildwiedergabe in Echtzeit mit einer Technik namens „Scan Conversion Rasterization“ durchführen, um dreidimensionale Szenen auf einem zweidimensionalen Display 250 anzuzeigen. Bei der Rasterisierung werden geometrische Bausteine (z. B. Punkte, Linien, Dreiecke, Quads, Netze usw.) einer 3D-Szene auf Pixel der Anzeige abgebildet (häufig über einen Bildpufferspeicher).
  • Die GPU 230 wandelt die geometrischen Bausteine (d. h. Polygonprimitive wie Dreiecke) des 3D-Modells in Pixel des 2D-Bildes um und weist jedem Pixel einen Anfangsfarbwert zu. Die Grafikpipeline kann Schattierungs-, Transparenz-, Textur- und/oder Farbeffekte auf Teile des Bildes anwenden, indem sie die Farbwerte der Pixel definiert oder anpasst. Die endgültigen Pixelwerte können mit Anti-Aliasing versehen, gefiltert und dem Display 250 zur Anzeige bereitgestellt werden. Viele Software- und Hardware-Fortschritte im Laufe der Jahre haben die subjektive Bildqualität unter Verwendung von Rasterungstechniken bei Bildwechselfrequenzen verbessert, die für Echtzeit-Grafiken (d. h. 30 bis 60 Frames pro Sekunde) bei hohen Anzeigeauflösungen wie 4096 x 2160 Pixel oder mehr auf einem oder mehreren Displays 250 erforderlich sind.
  • Damit die GPU 230 die Strahlverfolgung in Echtzeit effizient durchführen kann, bietet sie eine oder mehrere „TTUs“ 238, die mit einem oder mehreren SMs 232 gekoppelt sind. Die TTU 238 umfasst Hardwarekomponenten, die für die Durchführung (oder Beschleunigung) von Operationen konfiguriert sind, die üblicherweise in Strahlverfolgungs-Algorithmen verwendet werden. Ein Ziel der TTU 238 ist es, die bei der Strahlenverfolgung verwendeten Operationen so weit zu beschleunigen, dass sie die Leistungsfähigkeit der Strahlenverfolgung für Echtzeit-Grafikanwendungen (z. B. Spiele) nutzbar macht und qualitativ hochwertige Schatten, Reflexionen und globale Beleuchtungen ermöglicht. Die von der TTU 238 erzeugten Ergebnisse können zusammen mit oder alternativ zu anderen grafikbezogenen Operationen verwendet werden, die in der GPU 230 durchgeführt werden.
  • Insbesondere können die SMs 232 und die TTU 238 zusammenarbeiten, um Strahlen in ein 3D-Modell zu werfen und zu feststellen, ob und wo dieser Strahl die Geometrie des Modells schneidet. Die Strahlenverfolgung simuliert direkt das Licht, das sich durch eine virtuelle Umgebung oder Szene bewegt. Die Ergebnisse der Strahlenschnitte werden zusammen mit der Oberflächentextur, der Blickrichtung und/oder den Beleuchtungsbedingungen zur Bestimmung der Pixelfarbwerte verwendet. Die von den SMs 232 in Zusammenarbeit mit der TTU 238 durchgeführte Strahlenverfolgung ermöglicht es, dass computergenerierte Bilder Schatten, Reflexionen und Brechungen in einer Weise erfassen, die von Fotos oder Videos der realen Welt nicht zu unterscheiden ist. Da Strahlverfolgungs-Techniken noch rechenintensiver sind als die Rasterung, was zum Teil auf die große Anzahl der zu verfolgenden Strahlen zurückzuführen ist, kann die TTU 238 einige der rechenintensiveren Aspekte dieses Prozesses in der Hardware beschleunigen.
  • Unter der Vorrausetzung eines wie oben beschriebenen BVH führt die TTU 238 eine Baumsuche durch, bei der jeder vom Strahl besuchte Knoten im Baum ein Begrenzungsvolumen für jeden absteigenden Zweig oder jedes absteigende Blatt hat, und der Strahl besucht nur die absteigenden Zweige oder Blätter, deren entsprechendes Begrenzungsvolumen er durchschneidet. Auf diese Weise testet die TTU 238 explizit nur eine kleine Anzahl von Primitiven auf Schnittpunkte, nämlich diejenigen, die sich in den vom Strahl geschnittenen Blattknoten befinden. In den nicht einschränkenden Beispielen beschleunigt die TTU 238 sowohl die Baumtraversierung (einschließlich der Strahlvolumen-Tests) als auch die Strahl-Primitiv-Tests. Als Teil der Traversierung kann sie auch mindestens eine Ebene von Instanztransformationen verarbeiten, indem sie einen Strahl von Weltraumkoordinaten in das Koordinatensystem eines Instanznetzes transformiert. In den nicht einschränkenden Beispielen führt die TTU 238 all dies in MIMD-Manier durch, was bedeutet, dass Strahlen innerhalb der TTU unabhängig behandelt werden.
  • In den beispielhaften, nicht einschränkenden Ausführungsformen arbeitet die TTU 238 als Diener (Coprozessor) der SMs (Streaming-Multiprozessoren) 232. Mit anderen Worten: Die TTU 238 arbeitet in den beispielhaften, nicht einschränkenden Ausführungsformen nicht unabhängig, sondern folgt den Befehlen der SMs 232, um bestimmte rechenintensive Aufgaben im Zusammenhang mit Raytracing wesentlich effizienter auszuführen, als dies die SMs 232 selbst tun könnten. In anderen Ausführungsformen oder Architekturen könnte die TTU 238 mehr oder weniger autonom sein.
  • In den gezeigten Beispielen empfängt die TTU 238 Befehle über SM 232-Anweisungen und schreibt die Ergebnisse zurück in eine SM-Registerdatei. In vielen Anwendungsfällen (z. B. bei undurchsichtigen Dreiecken mit höchstens zwei Instanzierungsebenen) kann die TTU 238 die Strahlverfolgungs-Abfrage ohne weitere Interaktion mit dem SM 232 durchführen. Kompliziertere Abfragen (z. B. mit alphagetesteten Dreiecken, anderen Primitiven als Dreiecken oder mehr als zwei Instanzierungsebenen) können mehrere Hin- und Rückfahrten erfordern (obwohl die hier beschriebene Technologie die Notwendigkeit solcher „Hin- und Rückfahrten“ für bestimmte Arten von Geometrien reduziert, indem sie die TTU 238 mit erweiterten Fähigkeiten ausstattet, um die Prüfung von Strahlengrenzen und Volumenschnittpunkten selbständig durchzuführen, ohne den aufrufenden SM um Hilfe bitten zu müssen). Neben der Verfolgung von Strahlen ist die TTU 238 in der Lage, allgemeinere räumliche Abfragen durchzuführen, bei denen ein AABB oder das extrudierte Volumen zwischen zwei AABBs den Platz des Strahls einnimmt. Die TTU 238 ist zwar besonders für die Beschleunigung von Aufgaben im Zusammenhang mit der Strahlenverfolgung geeignet, kann aber auch für andere Aufgaben als die Strahlenverfolgung verwendet werden.
  • Die TTU 238 testet somit autonom jeden Strahl anhand einer Vielzahl von Begrenzungsvolumen und kann alle Begrenzungsvolumen, die sich nicht mit diesem Strahl schneiden, ausschließen. Ausgehend von einem Wurzelknoten, der alles in der Szene begrenzt, testet der Co-Prozessor für die Traversierung jeden Strahl anhand kleinerer (sich möglicherweise überschneidender) Nachfolger-Begrenzungsvolumen, die wiederum die absteigenden Zweige des BVH begrenzen. Der Strahl folgt den Nachfolgerzeigern für die Begrenzungsvolumen, auf die der Strahl trifft, zu anderen Knoten, bis die Blätter oder Endknoten (Volumen) des BVH erreicht sind.
  • Sobald die TTU 238 die Beschleunigungsdatenstruktur durchläuft, um einen End- oder „Blatt“-Knoten (der durch ein oder mehrere Begrenzungsvolumen dargestellt werden kann) zu erreichen, der den Strahl schneidet und ein geometrisches Primitiv enthält, führt sie einen beschleunigten Strahl-Primitiv-Schnittpunkttest durch, um festzustellen, ob der Strahl dieses Primitiv (und damit die von diesem Primitiv definierte Objektoberfläche) schneidet. Der Strahl-Primitiv-Test kann zusätzliche Informationen über die Primitive liefern, die der Strahl schneidet und die zur Bestimmung der für die Schattierung und Visualisierung erforderlichen Materialeigenschaften der Oberfläche verwendet werden können. Die rekursive Traversierung durch die Beschleunigungsdatenstruktur ermöglicht es dem Traversierungs-Coprozessor, alle Objektprimitive zu ermitteln, die der Strahl schneidet, oder das nächstgelegene Primitiv (aus der Perspektive des Betrachtungspunkts), das der Strahl schneidet (was in einigen Fällen das einzige Primitiv ist, das vom Betrachtungspunkt entlang des Strahls sichtbar ist). Siehe z. B., Lefrancois et al, NVIDIA Vulkan Ray Tracing Tutorial, Dezember 2019, https://developer.nvidia.com/rtx/raytracing/vkray.
  • In beispielhaften Ausführungsformen ist die TTU 238 so konfiguriert, dass sie falsch-positive Traversierungen der Beschleunigungsdatenstruktur reduziert, indem sie eine oder mehrere der Techniken „Transformationsrahmen“, „Punktentartungs-Culling“ und „Strahlen-Clipping“ in Hardware implementiert. In beispielhaften Ausführungsformen enthält die Beschleunigungsdatenstruktur Knoten und/oder Complets, die vom Ersteller des BVH mit Informationen programmiert werden, die bei der Implementierung einer oder mehrerer der Techniken Transformationsrahmen, Punktentartungs-Culling und Strahlen-Clipping in Hardware verwendet werden.
  • Aufbau einer Begrenzungsvolumen-Hierarchie
  • Wie oben beschrieben, weist eine Beschleunigungsdatenstruktur eine Hierarchie von Begrenzungsvolumen (Begrenzungsvolumen-Hierarchie oder BVH) auf, die rekursiv immer kleinere Unterteilungen von Begrenzungsvolumen kapselt. Das größte volumetrische Begrenzungsvolumen kann als „Wurzelknoten“ bezeichnet werden. Die kleinsten Unterteilungen einer solchen Hierarchie von Begrenzungsvolumen („Blattknoten“) enthalten Elemente. Bei den Elementen kann es sich um Primitive (z. B. Polygone wie Dreiecke) handeln, die Oberflächen des Objekts definieren. Ein Element kann aber auch eine Kugel sein, die eine ganz neue Ebene der Welt enthält, die als Element existiert, weil sie nicht zum BVH hinzugefügt wurde (man denke an das Halsband der Katze aus „Men in Black“, das eine ganze Miniaturgalaxie enthielt). Wenn der Gegenstand Primitive aufweist, testet der Traversierungs-Coprozessor bei Erreichen eines sich schneidenden Blattknotens die Strahlen anhand der mit dem Blattknoten verbundenen Primitive, um festzustellen, welche Objektflächen die Strahlen schneiden und welche Objektflächen entlang des Strahls sichtbar sind.
  • Das Aufbauen einer BVH kann in zwei Teilen erfolgen: statisch und dynamisch. In vielen Anwendungen wird eine komplexe Szene vorverarbeitet, und die BVH wird basierend auf der statischen Geometrie der Szene erstellt. Dann wird mit Hilfe der interaktiven Grafikerzeugung, einschließlich dynamisch erzeugter und manipulierter beweglicher Objekte, ein weiterer Teil des BVH (oder ein zusätzliches, verknüpftes BVH) in Echtzeit (z. B. in jedem Bild) von einem Treiber oder einer anderen Software, die auf dem interaktiven Echtzeit-Grafiksystem läuft, aufgebaut. Die BVH-Konstruktion muss nicht hardwarebeschleunigt sein (obwohl sie es in einigen nicht einschränkenden Ausführungsformen sein kann), sondern kann unter Verwendung hochoptimierter Softwareroutinen implementiert werden, die auf Streaming-Multiprozessoren (SMs) (z. B. SM 232) und/oder CPU (z. B. CPU 220) und/oder anderen Entwicklungssystemen, z. B. während der Entwicklung einer Anwendung, laufen.
  • In der ersten Phase der Konstruktion der BVH-Beschleunigungsstruktur werden der Begrenzungsrahmen der referenzierten Geometrie erfasst. Dies wird erreicht, indem für jedes geometrische Primitiv in einem Objekt eine Begrenzungsrahmen-Prozedur ausgeführt wird, die eine konservative achsenausgerichtete Begrenzungsrahmen (AABB) für ihr Eingabeprimitiv zurückgibt. Die Ausrichtung von Begrenzungsrahmen an den Achsen der relevanten Koordinatensysteme für die Geometrie sorgt für eine höhere Effizienz geometrischer Echtzeit-Operationen wie Schnittpunkttests und Koordinatentransformationen, beispielsweise im Vergleich zu orientierten Begrenzungsrahmen (OBBs), Begrenzungskugeln oder anderen Ansätzen. Fachleute werden jedoch verstehen, dass die beispielhaften, nicht einschränkenden Ansätze auch auf teurere Begrenzungskonstrukte wie OBBs, Begrenzungskugeln und andere Begrenzungsvolumentechnologien angewendet werden können.
  • Bereits unterteilte Begrenzungsvolumen, die mindestens einen Teil der Geometrie in einer Szene enthalten, können noch weiter rekursiv unterteilt werden - wie das Auftauchen einer Reihe immer kleinerer Katzen aus den Hüten in Dr. Seuss' The Cat In The Hat Comes Back (1958). Die Anzahl und die Konfigurationen der rekursiven Unterteilungen hängen von der Komplexität und der Konfiguration des zu modellierenden 3D-Objekts sowie von anderen Faktoren wie der gewünschten Auflösung, dem Abstand des Objekts vom Standpunkt usw. ab. Ein Beispiel für ein Unterteilungsschema ist die so genannte 8-stufige Unterteilung oder „Octree“, bei der jedes Volumen in acht kleinere Volumen einheitlicher Größe unterteilt wird, aber es sind auch viele andere räumliche Hierarchien und Unterteilungsschemata bekannt, wie z. B. ein binärer Baum, ein vierstufiger Baum, ein k-d Baum, ein binärer Raumunterteilungs- (BSP) Baum und eine Begrenzungsvolumen-Hierarchie (BVH) Baum. Siehe z. B. USP 9,582,607 .
  • Auf einer bestimmten Ebene der Unterteilung (die für verschiedene Teile des BVH unterschiedlich sein kann) stößt der BVH-Konstruktionsprozess auf die Geometrie, die das zu modellierende gekapselte Objekt ausmacht. In Analogie zu einem Baum sind die aufeinanderfolgenden volumetrischen Unterteilungen der Stamm, die Äste, die Zweige und die Zweige, und die Geometrie wird schließlich an den Spitzen des Baumes, nämlich den Blättern, sichtbar. An diesem führt der BVH-Konstruktionsprozess, beispielsweise bei nicht einschränkenden Ausführungsformen, eine Optimierung durch, um mit Hilfe heuristischer oder anderer analytischer Techniken (die in einigen Ausführungsformen auch künstliche Intelligenz und/oder neuronale Netze umfassen können) diejenigen Blattknoten ausfindig zu machen, die im Hinblick auf die in ihnen enthaltene Geometrie schlecht passen.
  • Dieser Prozess wird so lange fortgesetzt, bis alle Begrenzungsvolumen, die Geometrie enthalten, ausreichend unterteilt sind, um eine angemessene Anzahl von geometrischen Primitiven pro Begrenzungsrahmen zu erhalten. Der Echtzeit-Strahlenverfolger, der die BVH verwendet, bestimmt die Schnittpunkte zwischen Strahl und Primitiv, indem er die räumlichen xyz-Koordinaten der Vertices jedes Primitivs mit den xyz-Koordinaten des Strahls vergleicht, um festzustellen, ob der Strahl und die Oberfläche, die das Primitiv definiert, den gleichen Raum einnehmen. Der Strahl-Primitiv-Schnittpunkt-Test kann sehr rechenintensiv sein, da es viele Dreiecke zu prüfen gibt. In vielen Fällen kann es effizienter sein, eine weitere volumetrische Unterteilung vorzunehmen und dadurch die Anzahl der Primitive in jedem „Blattknoten“ auf etwa 16 oder weniger zu begrenzen.
  • Der sich daraus ergebende komprimierte Baum, der komprimierte Bäumchen („Complets“) aufweist, wird in eine Datenstruktur im Speicher zur späteren Verwendung durch die Grafikverarbeitungshardware/-software, z. B. während der Echtzeit-Grafikverarbeitung, die die Strahlverfolgung in Echtzeit einschließt, ausgeschrieben.
  • Die 3A und 3B zeigen ein rekursiv unterteiltes Begrenzungsvolumen einer 3D-Szene (3A) und eine entsprechende Baumdatenstruktur (3B), auf die der Strahlverfolger zugreifen und die für hardwarebeschleunigte Operationen verwendet werden kann. Die Baumdatenstruktur kann im Speicher abgelegt und bei Bedarf basierend auf Abfragen abgerufen werden.
  • Die Aufteilung der Begrenzungsvolumen kann in einer hierarchischen Baumdatenstruktur dargestellt werden, wobei das große Begrenzungsvolumen durch einen übergeordneten Knoten des Baums und die kleineren Begrenzungsvolumen durch Nachfolger-Knoten des Baums dargestellt werden, die im übergeordneten Knoten enthalten sind. Die kleinsten Begrenzungsvolumen werden als Blattknoten in der Baumstruktur dargestellt und identifizieren ein oder mehrere geometrische Primitive, die in diesen kleinsten Begrenzungsvolumen enthalten sind.
  • Die Baumstruktur enthält eine Vielzahl von Knoten, die in einer Hierarchie angeordnet sind. Die Wurzelknoten N1 der Baumstruktur entsprechen dem Begrenzungsvolumen N1, das alle Primitive O1-O8 einschließt. Der Wurzelknoten N1 kann die Vertices des Begrenzungsvolumens N1 und die Nachfolgerknoten des Wurzelknotens identifizieren.
  • In 3A ist das Begrenzungsvolumen N1 in die Begrenzungsvolumen N2 und N3 unterteilt. Die Nachfolgerknoten N2 und N3 der Baumstruktur von 3B entsprechen den in 3A gezeigten Begrenzungsvolumen N2 und N3 und stellen diese dar. Die Nachfolgerknoten N2 und N3 in der Baumstruktur bezeichnen die Vertices der jeweiligen Begrenzungsvolumen N2 und N3 im Raum. Jedes der Begrenzungsvolumen N2 und N3 ist in diesem speziellen Beispiel weiter unterteilt. Das Begrenzungsvolumen N2 ist in die enthaltenen Begrenzungsvolumen N4 und N5 unterteilt. Das Begrenzungsvolumen N3 ist in die enthaltenen Begrenzungsvolumen N6 und N7 unterteilt. Das Begrenzungsvolumen N7 umfasst zwei Begrenzungsvolumen N8 und N9. Das Begrenzungsvolumen N8 umfasst die Dreiecke O7 und O8, und das Begrenzungsvolumen N9 umfasst die Blattbegrenzungsvolumen N10 und N11 als seine Nachfolger- Begrenzungsvolumen. Das Blattbegrenzungsvolumen N10 umfasst einen Primitiv-Bereich (z. B. einen Dreiecksbereich) O10 und das Blattbegrenzungsvolumen N11 umfasst einen Elementbereich O9. Die entsprechenden Nachfolgerknoten N4, N5, N6, N8, N10 und N11 der Baumstruktur in 3B entsprechen den Begrenzungsvolumen N4, N5, N6, N8, N10 und N11 aus 3A und stellen diese im Raum dar.
  • Der Baum in 3B ist in diesem speziellen Beispiel nur drei bis sechs Ebenen tief, so dass die Volumen N4, N5, N6, N8, N10 und N11 „Blattknoten“ darstellen - d. h. Knoten im Baum, die keine Nachfolgerknoten haben. 3A zeigt, dass die Blattknoten, die die Volumen N4, N6 und N8 begrenzen, jeweils zwei Dreiecke der Geometrie in der Szene enthalten. Beispielsweise enthält die volumetrische Unterteilung N4 die Dreiecke O1 und O2; die volumetrische Unterteilung N6 enthält die Dreiecke O5 und O6; und die volumetrische Unterteilung N8 enthält die Dreiecke O7 und O8. 3A zeigt ferner, dass das Blattknoten-Begrenzungsvolumen N5 einen einzelnen Zylinder O3 enthält, wie in der Abbildung gezeigt, der keine gute Anpassung für das AABB-Begrenzungsvolumen N5 darstellt, das in gestrichelten Linien gezeigt wird. Dementsprechend testet die TTU 238 in einer beispielhaften, nicht einschränkenden Ausführungsform statt des größeren AABB-Begrenzungsvolumens N5 für den Schnittpunkttest von Strahl und Begrenzungsvolumen den Strahl anhand einer Vielzahl kleinerer AABB-Begrenzungsvolumen, die so angeordnet, positioniert, dimensioniert und ausgerichtet sind, dass sie besser zum Zylinder O3 passen.
  • Die in 3B dargestellte Baumstruktur stellt diese Blattknoten N4, N5, N6 und N7 dar, indem sie mit den entsprechenden Primitiven O1-O8 der Szenengeometrie verknüpft werden. Um auf diese Szenengeometrie zuzugreifen, durchläuft die TTU 238 die Baumdatenstruktur in 3B bis hin zu den Blattknoten. Im Allgemeinen können und werden die verschiedenen Teile des Baums unterschiedlich tief sein und eine unterschiedliche Anzahl von Primitiven enthalten. Blattknoten, die mit volumetrischen Unterteilungen verbunden sind, die keine Geometrie enthalten, müssen nicht explizit in der Baumdatenstruktur dargestellt werden (d. h. der Baum wird „beschnitten“).
  • Gemäß einigen Ausführungsformen kann der Teilbaum mit der Wurzel N7 einen Satz von Begrenzungsvolumen oder eine BVH darstellen, der in einem anderen Koordinatenraum definiert ist als die den Knoten N1-N3 entsprechenden Begrenzungsvolumen. Befindet sich das Begrenzungsvolumen N7 in einem anderen Koordinatenraum als sein übergeordnetes Begrenzungsvolumen N3, kann ein Instanzknoten N7', der die zur Durchquerung des Teilbaums mit der Wurzel N7 erforderliche Strahlentransformation bereitstellt, den Rest des Baums mit dem Teilbaum mit der Wurzel N7 verbinden. Der Instanzknoten N7' verbindet das den Knoten N1-N3 entsprechende Begrenzungsvolumen oder BVH mit den den Knoten N7 usw. entsprechenden Begrenzungsvolumen oder BVH, indem er die Transformation vom Koordinatenraum von N 1-N3 (z. B. Weltraum, Weltkoordinatenraum) zum Koordinatenraum von N7 usw. (z. B. Objektraum, Objektkoordinatenraum) definiert.
  • In einigen Ausführungsformen ist der Baum oder Teilbaum mit der Wurzel N1 mit einem übergeordneten Knoten N1' verbunden, der ein Instanzknoten ist. Der Instanzknoten N1' kann eine Transformation zur Transformation eines Strahls von einem Koordinatenraum in einen anderen Koordinatenraum enthalten oder damit verbunden sein. In einigen Ausführungsformen kann N1' eine Transformation vom Weltraum in einen alternativen Weltraum spezifizieren und kann als „Instanzknoten der obersten Ebene“ bezeichnet werden, wie er im oben erwähnten US-Patent Nr. 11,282,261 beschrieben.
  • Weitere Einzelheiten finden Sie unter https://developer.nvidia.com/rtx/raytracing/dxr/DX12-Raytracing-tutorial-Part-1, wo die oberen (TLAS) und unteren (BLAS) Ebenen einer Beschleunigungsdatenstruktur und die Möglichkeiten zur Erstellung eines BVH unter Verwendung dieser Ebenen beschrieben werden. In einer Beispielimplementierung hierin kann für jedes Objekt oder jeden Satz von Objekten ein BLAS-Begrenzungsvolumen um das/die Objekt(e) herum definiert werden - und im Falle einer sich bewegenden Geometrie können mehrere Begrenzungsvolumen für verschiedene Zeitpunkte definiert werden. Diese Begrenzungsvolumen befinden sich im Objektraum und können das Objekt bzw. die Objekte eng umschließen. Die resultierende BLAS enthält die vollständige Definition der Geometrie, die so organisiert ist, dass Strahlenschnittpunkte mit dieser Geometrie effizient gefunden werden können.
  • Die BLAS ist im Objektraum definiert. Bei der Erstellung eines BVH werden alle diese einzelnen Objekte (die sich jeweils in ihrem eigenen Objektraum befinden) und die zugehörigen Teilbäumchen mit Hilfe von Transformationen in den Weltraum gebracht. Das BVH legt also für jeden BLAS-Teilbaum Transformationen vom Objektraum in den Weltraum fest. Shader verwenden diese Transformationen, um jedes Objekt in die 3D-Szene im Weltraum zu übersetzen, zu drehen und zu skalieren.
  • Das BVH definiert inzwischen die TLAS-Begrenzungsvolumen im Weltraum. Die TLAS kann als eine Beschleunigungsdatenstruktur über einer Beschleunigungsdatenstruktur betrachtet werden. Die oberste TLAS-Ebene ermöglicht somit Begrenzungsvolumen und Strahl-Complet-Tests und benötigt in einer Ausführungsform keine Transformationen, da der Strahl im Weltraum angegeben wird. In der hier vorgestellten, nicht einschränkenden Ausführungsform können die TLAS-Begrenzungsvolumen für bewegte Objekte jedoch auch mit mehreren räumlichen Positionen zeitlich kodiert werden, damit Hardware-Schaltungen eine bestimmte räumliche Position zum Zeitpunkt eines Strahls für die Zwecke der Prüfung von Strahl-Begrenzungsvolumen berechnen können.
  • Wenn das Strahlverfolgungs-System bis zu einem bestimmten Punkt im Baum abwärts wandert und auf einen Instanzknoten trifft, wechselt der Modus von TLAS (im Weltraum) zu BLAS (im Objektraum). Die Objektknoten sind in einer Ausführungsform im Objektraum definiert, ebenso wie die BLAS-Begrenzungsvolumen (die sich von den TLAS-Begrenzungsvolumen unterscheiden können). Die Transformationsinformation im Complet wird verwendet, um den Strahl vom Weltraum in den Objektraum zu transformieren und mit dem BLAS-Teilbaum zu vergleichen. In einer Ausführungsform kann dieselbe Interpolationshardware, die zum TLAS-Strahl-Begrenzungsvolumen-Schnitttesten verwendet wird, auch zum BLASStrahl-Begrenzungsvolumen-Schnitttesten verwendet werden - und zur Vertexinterpolation und zum Strahl-Primitiv-Schnitttestesten auf BLAS-Ebene kann eine andere (z. B. präzisere) Hardware bereitgestellt werden.
  • Die oben beschriebene Beschleunigungsstruktur kann von softwarebasierten Grafikpipeline-Prozessen, die auf einem herkömmlichen Allzweckcomputer laufen, vorteilhaft genutzt werden. Die gegenwärtig offenbart nicht-einschränkenden Ausführungsformen implementieren jedoch vorteilhaft die oben beschriebenen Techniken im Zusammenhang mit einer hardwarebasierten Grafikverarbeitungseinheit, die einen Hochleistungsprozessor wie einen oder mehrere Streaming-Multiprozessoren („SMs“) und einen oder mehrere Traversierungs-Coprozessoren oder „Baumtraversierungseinheiten“ („TTUs“) -- Untereinheiten eines oder einer Gruppe von Streaming-Multiprozessor-SMs einer 3D-Grafikverarbeitungspipeline - umfasst. Im Folgenden werden der allgemeine Aufbau und die Funktionsweise eines solchen Systems beschrieben, das eine TTU 238 umfasst, die bestimmte Prozesse zur Unterstützung der interaktiven Strahlenverfolgung beschleunigt, die Strahl-Begrenzungsvolumen-Schnitttests, Strahl-Primitiv-Schnitttests und Strahlen-„Instanz“-Transformationen für die Strahlenverfolgung in Echtzeit und andere Anwendungen umfassen.
  • Beispielhafte Strahlverfolgungs-Prozesse
  • 4A zeigt eine beispielhafte Strahlverfolgungs-Shading-Pipeline 400, die von SM 232 ausgeführt und von TTU 238 beschleunigt werden kann. Die Strahlverfolgungs-Shading-Pipeline 400 beginnt damit, dass der SM 232 die Strahlerzeugung 410 aufruft und eine entsprechende Strahlverfolgungs-Anforderung an die TTU 238 sendet. Die Strahlverfolgungs-Anforderung identifiziert einen einzelnen in die Szene geworfenen Strahl und bittet die TTU 238, nach Schnittpunkten mit einer Beschleunigungsdatenstruktur zu suchen, die der SM 232 ebenfalls angibt. Die TTU 238 durchläuft (4A Block 420) die Beschleunigungsdatenstruktur, um Schnittpunkte oder potenzielle Schnittpunkte zwischen dem Strahl und den volumetrischen Unterteilungen und zugehörigen Dreiecken zu bestimmen, die die Beschleunigungsdatenstruktur repräsentiert. Potenzielle Schnittpunkte können durch die Suche nach Begrenzungsvolumen in der Beschleunigungsdatenstruktur identifiziert werden, die von dem Strahl geschnitten werden. Nachkommen von nicht geschnittenen Begrenzungsvolumen müssen nicht untersucht werden.
  • Für Dreiecke innerhalb der durchschnittenen Begrenzungsvolumen führt der TTU 238-Block 620 (siehe 6) einen Schnittprozess 430 durch, um festzustellen, ob der Strahl die Primitive schneidet. Die TTU 238 gibt die Schnittpunktinformationen an den SM 232 zurück, der als Reaktion auf die Schnittpunktbestimmung eine „Any Hit“-Schattierungsoperation 530 durchführen kann. Beispielsweise kann der SM 232 eine Texturabfrage für ein durchschnittenes Primitiv durchführen (oder von anderer Hardware durchführen lassen) und basierend auf dem entsprechenden Texelwert entscheiden, wie ein Pixel, das den Strahl visualisiert, schattiert werden soll. Der SM 232 behält solche Ergebnisse im Auge, da die TTU 238 mehrere Schnittpunkte mit verschiedenen Geometrien in der Szene in beliebiger Reihenfolge zurückgeben kann.
  • 4B ist ein Flussdiagramm, das beispielhafte Strahlverfolgungs-Operationen zusammenfasst, die die TTU 238 wie oben beschrieben in Zusammenarbeit mit dem/den SM(s) 232 durchführt. Die in 4B dargestellten Operationen werden von der TTU 238 in Zusammenarbeit mit einem SM 232 durchgeführt. So kann die TTU 238 die Identifikation eines Strahls vom SM 232 und einen Traversierungsstatus erhalten, der einen oder mehrere Knoten in einem oder mehreren BVHs aufzählt, die der Strahl traversieren muss. Die TTU 238 bestimmt, welche Begrenzungsvolumen einer BVH-Datenstruktur der Strahl durchschneidet (der „Strahl-Complet“-Test 472). Die TTU 238 kann anschließend auch feststellen, ob der Strahl ein oder mehrere Primitive in den durchschnittenen Begrenzungsvolumen schneidet und welche Dreiecke geschnitten werden (der „Strahl-Primitiv-Test“ 478) - oder die SM 232 kann diesen Test in Software durchführen, wenn er für die TTU zu kompliziert ist, um ihn selbst durchzuführen. In nicht einschränkenden Beispielen spezifizieren Complets Wurzel- oder Innenknoten (d. h. Volumen) der Begrenzungsvolumen-Hierarchie mit Nachfolgern an, die andere Complets oder Blattknoten eines einzigen Typs pro Complet sind.
  • Zunächst prüft die TTU 238 den Zustand der Traversierung des Strahls. Ist der Stapel, den die TTU 238 für den Strahl unterhält, leer, ist die Traversierung abgeschlossen. Befindet sich ein Eintrag oben auf dem Stapel, stellt der Co-Prozessor 238 für die Traversierung eine Anfrage an das Speicher-Subsystem, um diesen Knoten abzurufen. Der Traversierungs-Coprozessor 238 führt dann einen Begrenzungsrahmen-Test 472 durch, um festzustellen, ob ein Begrenzungsvolumen einer BVH-Datenstruktur von einem bestimmten, vom SM 232 angegebenen Strahl durchschnitten wird (Schritt 472, 474). Wenn der Begrenzungsrahmen-Test feststellt, dass das Begrenzungsvolumen nicht von dem Strahl durchschnitten wird („Nein“ in Schritt 474), sind keine weiteren Tests für die Visualisierung erforderlich, und die TTU 238 kann dieses Ergebnis an die anfordernde SM 232 zurückgeben. Denn wenn ein Strahl ein Begrenzungsvolumen verfehlt (wie in 1A in Bezug auf das Begrenzungsvolumen 110), dann verfehlt der Strahl alle anderen kleineren Begrenzungsvolumen innerhalb des getesteten Begrenzungsvolumens und alle Primitive, die dieses Begrenzungsvolumen enthält.
  • Wenn der von der TTU 238 durchgeführte Begrenzungsrahmen-Test ergibt, dass das Begrenzungsvolumen durch den Strahl geschnitten wird („Ja“ in Schritt 474), bestimmt die TTU, ob das Begrenzungsvolumen in kleinere Begrenzungsvolumen unterteilt werden kann (Schritt 476). In einer beispielhaften Ausführungsform führt die TTU 238 nicht unbedingt selbst eine Unterteilung durch. Vielmehr hat jeder Knoten im BVH ein oder mehrere Nachfolger (wobei jeder Nachfolger ein Blatt oder ein Zweig im BVH ist). Für jeden Nachfolger gibt es ein oder mehrere Begrenzungsvolumen und einen Zeiger, der zu einem Zweig oder einem Blattknoten führt. Wenn ein Strahl einen Knoten mit TTU 238 verarbeitet, prüft er sich selbst anhand der Begrenzungsvolumen der Nachfolger des Knotens. Der Strahl schiebt nur Stapel-Einträge auf seinen Stapel für die Zweige oder Blätter, deren repräsentative Begrenzungsvolumen getroffen wurden. Wenn ein Strahl einen Knoten in der Beispiel-Variante abruft, prüft er nicht das Begrenzungsvolumen des Knotens, sondern die Begrenzungsvolumen der Nachfolger des Knotens. Die TTU 238 schiebt die Knoten, deren Begrenzungsvolumen von einem Strahl getroffen werden, auf den Traversierungsstapel des Strahls in einer durch die Strahlenkonfiguration bestimmten Reihenfolge. Beispielsweise ist es möglich, die Knoten in der Reihenfolge, in der sie im Speicher erscheinen, oder in der Reihenfolge, in der sie entlang der Länge des Strahls erscheinen, oder in einer anderen Reihenfolge auf den Traversierungsstapel zu schieben. Wenn es weitere Unterteilungen des Begrenzungsvolumens gibt („Ja“ in Schritt 476), wird auf diese weiteren Unterteilungen des Begrenzungsvolumens zugegriffen, und der Begrenzungsrahmentest wird für jedes der sich ergebenden unterteilten Begrenzungsvolumen durchgeführt, um festzustellen, welche unterteilten Begrenzungsvolumen vom Strahl durchschnitten werden und welche nicht. In diesem rekursiven Prozess können einige der Begrenzungsvolumen durch den Test 474 eliminiert werden, während andere Begrenzungsvolumen zu noch weiteren und weiteren Unterteilungen führen können, die durch die rekursive Anwendung der Schritte 472-476 von TTU 238 auf Schnittpunkte geprüft werden.
  • Sobald die TTU 238 feststellt, dass es sich bei den vom Strahl durchschnittenen Begrenzungsvolumen um Blattknoten handelt („Nein“ in Schritt 476), führt die TTU 238 und/oder SM 232 einen Primitivschnitttest (z. B. Dreieck) 478 durch, um festzustellen, ob der Strahl Primitive in den durchschnittenen Begrenzungsvolumen durchschneidet und welche Primitive der Strahl durchschneidet. Die TTU 238 führt also eine Traversierung in der Tiefe der durchschnittenen absteigenden Zweigknoten durch, bis Blattknoten erreicht werden. Die TTU 238 verarbeitet die Blattknoten. Handelt es sich bei den Blattknoten um Primitiv-Bereiche, prüft die TTU 238 oder die SM 232 sie anhand des Strahls. Handelt es sich bei den Blattknoten um Instanzknoten, wendet die TTU 238 oder das SM 232 die Instanztransformation an. Handelt es sich bei den Blattknoten um Elementbereiche, gibt die TTU 238 sie an das anfordernde SM 232 zurück. In den nicht einschränkenden Beispielen kann der SM 232 die TTU 238 anweisen, verschiedene Arten von Strahlenschnitttests durchzuführen und unterschiedliche Ergebnisse zu melden, je nachdem, welche Operationen von einer Anwendung (oder einem Software-Stapel, auf dem die Anwendung läuft) kommen und vom SM an die TTU weitergeleitet werden. Beispielsweise kann der SM 232 der TTU 238 befehlen, das nächstgelegene sichtbare Primitiv zu melden, das durch den Schnittpunkttest aufgedeckt wird, oder alle Primitive zu melden, die der Strahl schneidet, unabhängig davon, ob es sich um das nächstgelegene sichtbare Primitiv handelt. Das SM 232 kann diese unterschiedlichen Ergebnisse für verschiedene Arten der Visualisierung verwenden. Oder der SM 232 kann den Strahlen-Primitivschnittpunkt-Test selbst durchführen, sobald die TTU 238 die Ergebnisse des Strahlen- Complet-Tests gemeldet hat. Sobald die TTU 238 mit der Verarbeitung der Blattknoten fertig ist, kann es sein, dass andere Verzweigungsknoten (die zuvor auf den Stapel des Strahls geschoben wurden) zu prüfen sind.
  • Beispielhafte Implementierung einer Instanzierungspipeline durch TTU 238 und SM 232
  • Im Folgenden wird beschrieben, wie die TTU 238 in beispielhaften Ausführungsformen die Instanzierung und die damit verbundenen Transformationen durchführt
  • Das detailliertere Flussdiagramm einer Strahlverfolgungs-Pipeline in 5A zeigt den Datenfluss und die Interaktion zwischen den Komponenten für einen repräsentativen Anwendungsfall: Verfolgung von Strahlen gegen eine Szene, die geometrische Primitive enthält, wobei Instanztransformationen in der Hardware verarbeitet werden. In einem nicht einschränkenden Beispiel ist die Strahlverfolgungs-Pipeline in 5A im Wesentlichen softwaredefiniert (was in Beispielen bedeutet, dass sie von den SMs 232 bestimmt wird), macht jedoch ausgiebigen Gebrauch von der Hardwarebeschleunigung durch die TTU 238. Zu den Schlüsselkomponenten gehören die SM 232 (und der Rest der Rechenpipeline), die TTU 238 (die als Coprozessor für die SM dient) sowie der L1-Cache und das nachgeschaltete Speichersystem, aus dem die TTU BVH- und Dreiecksdaten abruft.
  • Die in 5A dargestellte Pipeline zeigt, dass die Begrenzungsvolumen-Hierarchieerzeugung 502 im Voraus von einem Entwicklungssystem durchgeführt werden kann. Sie zeigt auch, dass die Strahlerzeugung und -Verteilung 504 vom SM 232 oder einer anderen Software in diesem Beispiel durchgeführt oder gesteuert wird, ebenso wie die Schattierung (die Beleuchtung und Texturierung umfassen kann). Die Beispielpipeline umfasst eine Traversierung des BVH-Baums 506 auf „oberster Ebene“, eine Strahlentransformation 514, eine Traversierung des BVH-Baums 518 auf „unterster Ebene“ und eine Schnittmenge aus Strahlen und Dreiecken (oder anderen Primitiven) 526, die jeweils von der TTU 238 ausgeführt werden. Diese müssen nicht in der gezeigten Reihenfolge ausgeführt werden, da das Handshaking zwischen der TTU 238 und dem SM 232 bestimmt, was die TTU 238 in welcher Reihenfolge tut..
  • Der SM 232 legt der TTU 238 jeweils einen oder mehrere Strahlen vor. Jeder Strahl, den der SM 232 der TTU 238 zur Traversierung vorlegt, kann die geometrischen Parameter des Strahls, den Traversierungsstatus sowie die Strahlflags, Modusflags und Strahloperationsinformationen des Strahls enthalten. In einer beispielhaften Ausführungsform stellt eine Strahlenoperation (RayOp) einen arithmetischen und/oder logischen Hilfstest bereit oder weist diesen auf, um einen Schnittpunkt zu unterdrücken, außer Kraft zu setzen und/oder zu speichern. (Siehe US-Patent Nr. 10,867,429 ). Der Traversierungs-Stapel kann auch von der SM 232 verwendet werden, um bestimmte Zustandsinformationen an die TTU 238 zur Verwendung bei der Traversierung zu übermitteln. Eine neue Strahlenabfrage kann mit einem expliziten Traversierungsstapel gestartet werden. Für einige Abfragen kann jedoch eine kleine Anzahl von Stapel-Initialisierern vorgesehen werden, um die neue Abfrage eines bestimmten Typs zu beginnen, wie beispielsweise: Traversierung ausgehend von einer Complet; Schnittpunkt eines Strahls mit einem Bereich von Dreiecken; Schnittpunkt eines Strahls mit einem Bereich von Dreiecken, gefolgt von einer Traversierung ausgehend von einem Complet; Abruf von Eckpunkten aus einem Dreieckspuffer für ein bestimmtes Dreieck usw. In einigen Ausführungsformen verbessert die Verwendung von Stapel-Initialisierern anstelle einer expliziten Stapel-Initialisierung die Leistung, da Stapel-Initialisierer weniger Register des Streaming-Prozessors erfordern und die Anzahl der Parameter verringern, die vom Streaming-Prozessor an die TTU übertragen werden müssen.
  • In dem in 5A gezeigten Beispiel führt die TTU 238 eine Baumtraversierung auf der obersten Ebene 506 und eine Baumtraversierung auf der untersten Ebene 518 durch. In der beispielhaften Ausführungsform ermöglicht die zweistufige Traversierung des BVH eine schnelle Strahlverfolgungs-Reaktion auf dynamische Szenenänderungen.
  • In einigen Ausführungsformen wird beim Eintritt in die Baumtraversierung der obersten Ebene oder während der Baumtraversierung der obersten Ebene ein optionaler Instanzknoten 505 im BVH angetroffen, der eine Transformation der obersten Ebene angibt. Der Instanzknoten 505, sofern vorhanden, zeigt der TTU an, dass der Teilbaum, der im Instanzknoten 505 verwurzelt ist, an einem alternativen Weltraumkoordinatensystem ausgerichtet ist, für das die Transformation vom Weltraum im Instanzknoten 505 definiert ist. Instanzknoten der obersten Ebene und ihre Verwendung werden im US-Patent Nr. 11,282,261 mit dem Titel „Ray Tracing Hardware Acceleration with Alternative World Space Transforms“ beschrieben, das hier durch Bezugnahme in vollem Umfang aufgenommen wird.
  • Die oberste Ebene der Beschleunigungsstruktur (TLAS) enthält Geometrie in Weltraumkoordinaten und die unterste Ebene der Beschleunigungsstruktur (BLAS) enthält Geometrie in Objektraumkoordinaten. Die TTU verwaltet den Strahlenstatus und den Stapel-Status getrennt für die TLAS-Traversierung und die BLAS-Traversierung, da es sich effektiv um unabhängige Traversierungen handelt.
  • Wie oben beschrieben, teilt der SM der TTU beim Starten einer neuen Strahlenabfrage oder beim erneuten Starten einer Strahlenabfrage die Stelle im BVH mit, an der eine Traversierung beginnen soll, indem er in die an die TTU übermittelte Strahlenabfrage ein Stapel-Initialisierungs-Complet einfügt. Das Stapel-Initialisierungs-Complet enthält einen Zeiger auf die Wurzel des Teilbaums, der durchlaufen werden soll.
  • Die Strahlentransformation 514 sorgt für den geeigneten Übergang von der Baumtraversierung 506 auf der obersten Ebene zur Baumtraversierung 518 auf der untersten Ebene, indem der Strahl, der bei der Traversierung auf der obersten Ebene in einem ersten Koordinatenraum (z. B. Weltraum) verwendet werden kann, in einen anderen Koordinatenraum (z. B. Objektraum) des BVH der Traversierung auf der untersten Ebene transformiert wird. Ein Beispiel für eine BVH-Traversierungstechnik, die eine Traversierung auf zwei Ebenen verwendet, ist in der Literatur beschrieben, siehe beispielsweise Woop, „A Ray Tracing Hardware Architecture for Dynamic Scenes“, Universität des Saarlandes, 2004, aber Ausführungsformen sind nicht darauf beschränkt.
  • Beispielhafte Traversierung der obersten Baumebene
  • Die Traversierung der obersten Baumebene 506 durch die TTU 238 empfängt Compets aus dem L1-Cache 512 und liefert eine Instanz an die Strahlentransformation 514 zur Transformation oder eine Fehl-/Endausgabe 513 an den SM 232 zur Verarbeitung durch den Shader des nächstgelegenen Treffers 515 (dieser Block kann auch rekursiv basierend auf Nicht-Blatt-Knoten/keinen Treffer-Bedingungen arbeiten). Bei der Traversierung der obersten Ebene des Baums 506 wird in einem Schritt 508 zum Abrufen des nächsten Complet das nächste Complet, das in Schritt 510 auf Strahlenschnitte geprüft werden soll, aus dem Speicher und/oder der Cache-Hierarchie abgerufen, und die Strahl-Begrenzungsvolumen-Schnitttesten wird an den Begrenzungsvolumen am abgerufenen Complet durchgeführt.
  • Wie oben beschrieben, verbindet ein Instanzknoten ein BVH mit einem anderen BVH, das sich in einem anderen Koordinatensystem befindet. Wenn ein untergeordnetes Element des durchschnittenen Begrenzungsvolumens ein Instanzknoten ist, kann die Strahlentransformation 514 eine geeignete Transformationsmatrix aus dem L1-Cache 516 abrufen. Die TTU 238 transformiert den Strahl unter Verwendung der geeigneten Transformationsmatrix in das Koordinatensystem des untergeordneten BVH. Das US-Patent Nr. 10.025.879 , das bereits durch Verweis einbezogen ist, beschreibt Transformationsknoten, die eine erste Gruppe von Knoten in einem Baum mit einer zweiten Gruppe von Knoten verbinden, wobei die erste und die zweite Gruppe von Knoten in unterschiedlichen Koordinatensystemen liegen. Die Instanzknoten in beispielhaften Ausführungsformen können den Transformationsknoten im US-Patent Nr. 10.025.879 ähnlich sein. In einem alternativen, nicht-instanziierten Modus der TTU 238, der in 5B dargestellt ist, führt die TTU keine Traversierung des Baumes 518 auf der „untersten“ Ebene durch, und nicht-instanziierte Traversierungen des BVH-Baumes werden von den Blöcken 508, 510 durchgeführt, z. B. unter Verwendung nur eines Stapels. Die TTU 238 kann zwischen den instanziierten Operationen der 5A und den nicht-instanziierten Operationen der 5B umschalten, basierend auf dem, was sie aus dem BVH und/oder dem Abfragetyp liest. Beispielsweise kann ein bestimmter Abfragetyp die TTU darauf beschränken, nur die nicht-instanziellen Operationen zu verwenden. Bei einer solchen Abfrage würden alle durchschnittenen Instanzknoten an den SM zurückgegeben.
  • In einigen nicht einschränkenden Ausführungsformen wird das Strahl-Begrenzungsvolumen-Testen in Schritt 510 für jedes Begrenzungsvolumen im abgerufenen Complet durchgeführt, bevor das nächste Complet abgerufen wird. In anderen Ausführungsformen können andere Techniken verwendet werden, wie beispielsweise die Traversierung der obersten Ebene BVH in der Tiefe zuerst. Das US-Patent Nr. 9,582,607 , das bereits durch Verweis einbezogen wurde, beschreibt eine oder mehrere Strukturen und Inhalte von Complets, die in Beispielsausführungen verwendet werden können. Das US-Patent Nr. 9,582,607 beschreibt auch eine beispielhafte Traversierung von Complets.
  • Wenn festgestellt wird, dass ein Begrenzungsvolumen von einem Strahl geschnitten wird, werden die untergeordneten Begrenzungsvolumen (oder Verweise auf sie) des geschnittenen Begrenzungsvolumens für die anschließende Prüfung auf Schnittpunkte mit dem Strahl und für die Traversierung verfolgt. In beispielhaften Ausführungsformen werden eine oder mehrere Stapeldatenstrukturen verwendet, um die untergeordneten Begrenzungsvolumen zu verfolgen, die anschließend auf eine Überschneidung mit dem Strahl geprüft werden. In einigen beispielhaften Ausführungsformen kann ein kleiner Traversierungsstapel verwendet werden, um die durch die Baumtraversierung der obersten Ebene 506 zu traversierenden Complets und die auf Schnittpunkte zu prüfenden Primitive zu verfolgen, und eine größere lokale Stapeldatenstruktur kann verwendet werden, um den Traversierungszustand in der Baumtraversierung der untersten Ebene 518 zu verfolgen.
  • Beispielhafte Traversierung der untersten Baumebene
  • Bei der Traversierung der untersten Baumebene 518 wird in einem Schritt 522 zum Abrufen des nächsten Complet das nächste Complet, die in Schritt 524 auf Strahlschnitt geprüft werden soll, aus dem Speicher und/oder der Cache-Hierarchie 520 abgerufen, und der Strahl-Begrenzungsvolumen-Schnittest erfolgt an den Begrenzungsvolumen im abgerufenen Complet. Die Baumtraversierung der untersten Ebene kann, wie oben erwähnt, Complets mit Begrenzungsvolumen in einem anderen Koordinatensystem enthalten als die Begrenzungsvolumen, die in der Baumtraversierung der oberen Ebene durchlaufen wurden. Die Baumtraversierung der untersten Ebene erhält ebenfalls Complets aus dem L1-Cache und kann rekursiv oder iterativ in sich selbst arbeiten, basierend auf Nicht-Blatt/Nicht-Treffer-Bedingungen und auch mit der Traversierung der oberen Ebene 506, basierend auf der Erkennung von Fehlern/Endpunkten. Die Schnittpunkte des Strahls mit den Begrenzungsvolumen im BVH der untersten Ebene können bestimmt werden, wobei der Strahl in das Koordinatensystem das abgerufenen Complet der untersten Ebene transformiert wird. Die in der Baumtraversierung der untersten Ebene als vom Strahl geschnitten befundenen Blattbegrenzungsvolumen werden dann dem Strahl/Dreieck-Schnitt 526 zugeführt
  • Die Blattausgaben der Traversierung der untersten Baumebene 518 werden der Strahl/Dreieck-Kreuzung 526 zur Verfügung gestellt (die sowohl Zugriff auf den L0-Cache als auch die Möglichkeit hat, Dreiecke über den L1-Cache 528 abzurufen). Die L0- Complet- und Dreieck-Cachespeicher können kleine Nur-Lese-Cachespeicher innerhalb der TTU 238 sein. Die Strahlen-/Dreieckskreuzung 526 kann auch Blattausgaben von der Traversierung der obersten Baumebene 506 erhalten, wenn bestimmte Blattknoten erreicht werden, ohne dass eine instanzierte BVH durchlaufen wird.
  • Nachdem alle Primitive im Primitivbereich verarbeitet wurden, prüft die Schnittpunkt-Verwaltungseinheit den Zustand der Ergebnis-Warteschlange und fertigt Pakete an, die an die Stapel-Verwaltungseinheit und/oder die StrahlVerwaltungseinheit gesendet werden, um die Attribute und den Traversierungszustand des Strahls zu aktualisieren, den nächsten Traversierungsschritt des Strahls einzurichten und/oder den Strahl an die SM 232 zurückzugeben (falls erforderlich). Enthält die Ergebniswarteschlange undurchsichtige oder Alpha-Schnittpunkte, die bei der Verarbeitung des Primitiv-Bereichs gefunden wurden, so meldet die Schnittpunkt-Verwaltungseinheit die parametrische Länge (t) des nächstgelegenen undurchsichtigen Schnittpunkts in der Ergebniswarteschlange an die Strahlverwaltungseinheit, um sie als tmax des Strahls zu speichern und den Strahl zu verkürzen. Zur Aktualisierung des Traversierungszustands, um den nächsten Traversierungsschritt des Strahls vorzubereiten, meldet die Schnittpunkt-Verwaltungseinheit der Stapel-Verwaltungseinheit, ob ein undurchsichtiger Schnittpunkt aus dem Primitiv-Bereich in der resultQueue vorhanden ist, ob ein oder mehrere Alpha-Schnitte in der resultQueue vorhanden sind, ob die resultQueue voll ist, ob weitere Alpha-Schnittpunkte im Primitivbereich gefunden wurden, die nicht an die SM zurückgegeben wurden und die nicht in der resultQueue vorhanden sind, und der Index des nächsten Alpha-Primitivs im Primitivbereich für den zu prüfenden Strahl, nachdem die SM den Inhalt der resultQueue verbraucht hat (der Index des nächsten Primitivs im Bereich nach dem Alpha-Primitiv mit der höchsten Speicherordnung aus dem aktuellen Primitivbereich in der resultQueue).
  • Wenn die Stapelverwaltungseinheit 740 das Paket von der Schnittpunkt-Verwaltungseinheit 722 empfängt, prüft sie das Paket, um die nächste Aktion zu bestimmen, die erforderlich ist, um den Schritt der Traversierung abzuschließen und den nächsten Schritt zu beginnen. Wenn das Paket von der Schnittpunkt-Verwaltungseinheit 722 anzeigt, dass ein undurchsichtiger Schnittpunkt im Primitiv-Bereich gefunden wurde und die Strahlenmodus-Bits angeben, dass der Strahl die Traversierung beenden soll, sobald ein Schnittpunkt gefunden wurde, gibt die Stapelverwaltungseinheit 740 den Strahl und seine Ergebniswarteschlange an den SM zurück, wobei der Traversierungsstatus anzeigt, dass die Traversierung abgeschlossen ist (ein gesetztes „erledigt“-Flag und/oder ein leerer Stapel der obersten und untersten Ebene). Wenn das Paket von der Schnittpunkt-Verwaltungseinheit 722 anzeigt, dass sich in der Ergebniswarteschlange undurchsichtige oder Alpha-Schnittpunkte befinden und dass es im Primitiv-Bereich noch weitere Alpha-Schnittpunkte gibt, die nicht in der Ergebniswarteschlange vorhanden sind und auf die der Strahl während der Verarbeitung des Primitiv-Bereichs gestoßen ist und die nicht bereits an den SM zurückgegeben wurden, gibt die Stapelverwaltungseinheit 740 die Ergebnisse an den SM zurück, die Stapelverwaltungseinheit 740 sendet den Strahl und die Ergebniswarteschlange an den SM zurück, wobei der Traversierungszustand so geändert wird, dass das Bit „cull opaque“ gesetzt wird, um die weitere Verarbeitung von opaken Primitiven im Primitivbereich zu verhindern, und der Startindex des Primitivbereichs auf das erste Alpha-Primitiv nach der höchsten Alpha-Primitivschnittmenge aus dem Primitivbereich vorgerückt wird, die in der Ergebniswarteschlange des Strahls an den SM zurückgegeben wurde. Wenn das Paket von der Schnittpunkt-Verwaltungseinheit 722 anzeigt, dass bei der Verarbeitung des Primitivbereichs durch den Strahl keine undurchsichtigen oder Alpha-Schnittpunkte gefunden wurden, entfernt die Stapelverwaltungseinheit 740 den obersten Stapel-Eintrag (der dem fertigen Primitivbereich entspricht) vom aktiven Traversierungsstapel. Wenn das Paket von der Stapelverwaltungseinheit 740 anzeigt, dass entweder undurchsichtige Schnittpunkte in der Ergebniswarteschlange vorhanden sind und die Strahlenmodusbits nicht anzeigen, dass der Strahl die Traversierung beenden soll, sobald ein Schnittpunkt gefunden wurde, und/oder dass Alpha-Schnittpunkte in der Ergebniswarteschlange vorhanden sind, Die Stapelverwaltungseinheit 740 löscht den obersten Eintrag des Stapels (der dem beendeten Primitiv-Bereich entspricht) vom aktiven Traversierungsstapel und ändert den Inhalt der Ergebniswarteschlange, um anzuzeigen, dass alle in der Ergebniswarteschlange vorhandenen Schnittpunkte aus einem Primitiv-Bereich stammen, dessen Verarbeitung abgeschlossen wurde.
  • Wenn der aktive Stapel der untere Stapel ist und der untere Stapel leer ist, setzt die Stapelverwaltungseinheit 740 den aktiven Stapel auf den oberen Stapel. Wenn der oberste Stapel der aktive Stapel ist und der aktive Stapel leer ist, gibt die Stapelverwaltungseinheit 740 den Strahl und seine Ergebniswarteschlange an den SM zurück, wobei der Zustand der Traversierung anzeigt, dass die Traversierung abgeschlossen ist (ein gesetztes „erledigt“-Flag und/oder ein leerer oberer und unterer Stapel). Enthält der aktive Stapel einen oder mehrere Stapel-Einträge, prüft die Stapelverwaltung-Einheit 740 den obersten Stapel-Eintrag und beginnt mit dem nächsten Schritt der Traversierung. Die Prüfung von Primitiven und/oder Primitivbereichen auf Schnitte mit einem Strahl und die Rückgabe der Ergebnisse an die SM 232 sind in US-Patent Nr. 10,825,230 mit dem Titel „Conservative Watertight Ray Triangle Intersection“ und US-Patent Nr. 10,740,952 mit dem Titel „Method for Handling Out-of-Order Opaque and Alpha Ray/Primitive Intersections“ beschrieben, die hiermit in ihrer Gesamtheit durch Bezugnahme aufgenommen werden.
  • Beispielhafte nicht einschränkende TTU 238 Hardware-Implementierung
  • 6 zeigt ein beispielhaftes vereinfachtes Blockdiagramm der TTU 238 mit Hardware, die für die Durchführung der oben beschriebenen beschleunigten Traversierung konfiguriert ist. In einigen Ausführungsformen kann die TTU 238 eine Traversierung in der Tiefe einer Begrenzungsvolumen-Hierarchie unter Verwendung einer kurzen Stapel-Traversierung mit Schnittpunktprüfung von unterstützten Blattknoten-Primitiven und Rückgabe von Alpha-Primitiven und nicht unterstützten Blattknoten-Primitiven (Elementen) in der Mitte der Traversierung durchführen. Die TTU 238 umfasst spezielle Hardware, um festzustellen, ob ein Strahl Begrenzungsvolumen schneidet, und spezielle Hardware, um festzustellen, ob ein Strahl Primitive der Baumdatenstruktur schneidet.
  • Im Einzelnen umfasst die TTU 238 einen Schnittverwaltungsblock 622, einen Strahlenverwaltungsblock 630 und einen Stapelverwaltungsblock 640. Jeder dieser Blöcke (und alle anderen Blöcke in 6) kann dedizierte Hardware darstellen, die durch Logikgatter, Register, in die Hardware eingebettete Nachschlagetabellen oder andere kombinatorische Logik usw. implementiert ist.
  • Der Strahlenverwaltungsblock 630 ist für die Verwaltung von Informationen über und die Durchführung von Operationen bezüglich eines Strahls zuständig, der von einem SM 232 an den Strahlenverwaltungsblock angegeben wurde. Der Stapelverwaltungsblock 640 arbeitet in Verbindung mit der Traversierungslogik 612, um Informationen über die Traversierung einer BVH-Beschleunigungsdatenstruktur zu verwalten und entsprechende Operationen durchzuführen. Die Traversierungslogik 612 wird durch die Ergebnisse eines Strahlen-Complet-Testblocks 610 gesteuert, der die Schnitte zwischen dem vom Strahlenverwaltungsblock 630 angezeigten Strahl und den durch die BVH dargestellten volumetrischen Unterteilungen prüft, wobei nach Bedarf Instanztransformationen verwendet werden. Der Strahlen-Complet-Testblock 610 ruft zusätzliche Informationen über die BVH aus dem Speicher 240 über einen L0-Complet-Cache 652 ab, der Teil der TTU 238 ist. Die Ergebnisse des Strahlen-Complet-Testblocks 610 informieren die Traversierungslogik 612 darüber, ob weitere rekursive Traversierungen erforderlich sind. Der Stapelverwaltungsblock 240 verwaltet Stapel, um die Zustandsinformationen zu verfolgen, wenn die Traversierungslogik 612 von einer Ebene des BVH zur anderen traversiert, wobei der Stapelverwaltungsblock 640 Elemente auf den Stapel schiebt, wenn die Traversierungslogik tiefer in die BVH traversiert, und Elemente vom Stapel löscht, wenn die Traversierungslogik im BVH nach oben traversiert. Der Stapelverwaltungsblock 640 ist in der Lage, dem anfragenden SM 232 jederzeit Zustandsinformationen (z. B. Zwischen- oder Endergebnisse) zur Verfügung zu stellen, wenn dieser sie anfordert.
  • Der Schnittverwaltungsblock 622 verwaltet Informationen über Schnittpunkte zwischen Strahlen und Primitiven und führt entsprechende Operationen durch, wobei bei Bedarf Instanztransformationen verwendet werden. Der Strahl-Primitiv-Testblock 620 ruft bei Bedarf Informationen zur Geometrie aus dem Speicher 240 über einen L0-Primitiv-Cache 654 ab, der Teil der TTU 238 ist. Der Schnittverwaltungsblock 622 wird durch die Ergebnisse der Schnittpunkttests informiert, die der Strahl-Primitiv-Test- und Transformationsblock 620 durchführt. So liefert der Block Strahl-Primitiv-Test- und Transformationsblock Schnittergebnisse an den Schnittverwaltungsblock 622, der Geometrietreffer und Schnitte an den anfordernden SM 232 meldet.
  • Eine Stapelverwaltungseinheit 640 prüft den Traversierungsstatus, um festzustellen, welche Art von Daten abgerufen werden muss und welcher Datenpfad (Complet oder Primitiv) sie verbraucht. Die Schnittpunkte für die Begrenzungsvolumen werden im Strahlen-Complet-Testpfad der TTU 238 bestimmt, der einen oder mehrere Strahlen-Complet-Testblöcke 610 und einen oder mehrere Traversierungslogikblöcke 612 umfasst. Ein Complet spezifiziert Wurzel- oder Innenknoten eines Begrenzungsvolumens. So kann ein Complet ein oder mehrere Begrenzungsvolumen für den Strahl-Complet-Test definieren. In beispielhaften Ausführungsformen hierin kann ein Complet eine Vielzahl von „Nachfolger“-Begrenzungsvolumen definieren (unabhängig davon, ob sie Blattknoten darstellen oder nicht), die nicht notwendigerweise alle Nachkommen haben, die aber von der TTU parallel auf Schnittpunkte zwischen Strahlen und Begrenzungsvolumen getestet werden, um zu feststellen, ob geometrische Primitive, die mit der Vielzahl von Begrenzungsvolumen verbunden sind, auf Schnittpunkte getestet werden müssen.
  • Der Strahlen-Complet-Testpfad der TTU 238 ermittelt, welche Begrenzungsvolumen von dem Strahl durchschnitten werden. Die vom Strahl durchschnittenen Begrenzungsvolumen müssen weiterverarbeitet werden, um festzustellen, ob die mit den durchschnittenen Begrenzungsvolumen verbundenen Primitive durchschnitten werden. Die Schnittpunkte für die Primitive werden im Strahlen-Primitiv-Testpfad bestimmt, der einen oder mehrere Strahl-Primitiv-Test- und Transformationsblöcke 620 und einen oder mehrere Schnittverwaltungsblöcke 622 umfasst.
  • Die TTU 238 empfängt Abfragen von einem oder mehreren SMs 232, um Traversierungsoperationen auszuführen. Die Abfrage kann erfragen, ob ein Strahl Begrenzungsvolumen und/oder Primitive in einer BVH-Datenstruktur schneidet. Die Abfrage kann einen Strahl (z. B. Ursprung, Richtung und Länge des Strahls) und eine BVH-Datenstruktur und einen Traversierungsstatus (kurzer Stapel) identifizieren, der einen oder mehrere Einträge enthält, die auf Knoten in einer oder mehreren Begrenzungsvolumen-Hierarchien verweisen, die der Strahl besuchen soll. Die Abfrage kann auch Informationen darüber enthalten, wie der Strahl während der Traversierung bestimmte Arten von Schnittpunkten behandeln soll. Die Strahleninformationen können im Strahlenverwaltungsblock 230 gespeichert werden. Die gespeicherten Strahleninformationen (z. B. die Länge der Strahlen) können basierend auf den Ergebnissen des Strahlen-Primitivtests aktualisiert werden.
  • Die TTU 238 kann anfordern, dass die in der Abfrage identifizierte BVH-Datenstruktur aus dem Speicher außerhalb der TTU 238 abgerufen wird. Abgerufene Teile der BVH-Datenstruktur können im Level-Zero (L0)-Cache 650 innerhalb der TTU 238 zwischengespeichert werden, so dass die Informationen für andere zeitkohärente TTU-Operationen zur Verfügung stehen, wodurch die Speicherzugriffe 640 reduziert werden. Teile der BVH-Datenstruktur, die für den Strahlen-Complet-Test benötigt werden, können in einem L0-Complet-Cache 652 gespeichert werden, und Teile der BVH-Datenstruktur, die für den Strahl-Primitiv-Test benötigt werden, können in einem L0-Primitive-Cache 654 gespeichert werden.
  • Nachdem die für einen angeforderten Traversierungsschritt benötigte Complet-Informationen im Complet-Cache 652 verfügbar sind, bestimmt der Strahlen-Complet-Testblock 610 die von dem Strahl durchschnittenen Begrenzungsvolumen. Bei der Durchführung dieser Prüfung kann der Strahl aus dem Koordinatenraum der Begrenzungsvolumenhierarchie in einen Koordinatenraum transformiert werden, der relativ zu einem Complet definiert ist. Der Strahl wird anhand der Begrenzungsrahmen geprüft, die mit den Nachfolger-Knoten des Complet verbunden sind. In dem nicht einschränkenden Beispiel wird der Strahl nicht anhand des eigenen Begrenzungsrahmens des Complet geprüft, weil (1) die TTU 238 den Strahl zuvor anhand eines ähnlichen Begrenzungsrahmens geprüft hat, als sie den Vorgänger-Begrenzungsrahmen des Nachfolger-Knotens prüfte, der auf dieses Complet verwies, und (2) ein Zweck des Complet-Begrenzungsrahmens darin besteht, ein lokales Koordinatensystem zu definieren, innerhalb dessen die Nachfolger-Begrenzungsrahmen in komprimierter Form ausgedrückt werden können. Wenn der Strahl einen der Nachfolger-Begrenzungsrahmen schneidet, werden die Ergebnisse an die Traversierungslogik weitergeleitet, um die Reihenfolge zu bestimmen, in der die entsprechenden Nachfolger-Zeiger auf den Traversierungsstapel geschoben werden (weitere Tests erfordern wahrscheinlich, dass die Traversierungslogik 612 auf die nächste Ebene des BVH hinuntergeht). Diese Schritte werden rekursiv wiederholt, bis durchschnittene Blattknoten des BVH angetroffen werden.
  • Der Strahlen-Complet-Testblock 610 kann der Traversierungslogik 612 Strahlen-Complet-Schnittpunkte zur Verfügung stellen. Anhand der Ergebnisse des Strahlen-Complet-Tests erstellt die Traversierungslogik 612 Stapel-Einträge, die in den Stapelverwaltung-Block 640 verschoben werden. Die Stapel-Einträge können interne Knoten anzeigen (d.h. einen Knoten, der einen oder mehrere Nachfolger-Knoten enthält), die durch den Strahlen-Complet-Testblock 610 weiter auf Strahlenschnitte getestet werden müssen, und/oder Dreiecke, die in einem geschnittenen Blattknoten identifiziert wurden und durch den Strahl-Primitiv-Test- und Transformationsblock 620 auf Strahlenschnitte getestet werden müssen. Der Strahlen-Complet-Testblock 610 kann die Traversierung an den im Stapel identifizierten internen Knoten wiederholen, um alle Blattknoten im BVH zu ermitteln, die der Strahl durchschneidet. Die genauen Tests, die der Strahlen-Complet-Testblock 610 durchführt, werden in der beispielhaften, nicht einschränkenden Ausführungsform durch Modusbits, Strahlenoperationen (siehe unten) und das Aussortieren von Treffern bestimmt, und die TTU 238 kann sowohl Zwischen- als auch Endergebnisse an den SM 232 zurückgeben.
  • Strahlen-Primitiv-Schnitttesten
  • Wie in 6 gezeigt, ist die TTU 238 auch in der Lage, Schnittpunkttests zu beschleunigen, mit denen festgestellt wird, ob ein Strahl eine bestimmte Geometrie oder Primitive schneidet. In einigen Fällen ist die Geometrie so komplex (z. B. definiert durch Kurven oder andere abstrakte Konstrukte im Gegensatz zu z. B. Vertices), dass die TTU 238 in einigen Ausführungsformen nicht in der Lage ist, beim Schnitttest von Strahlen mit Primitiven zu helfen. In solchen Fällen meldet die TTU 238 dem SM 232 einfach die Strahl-Complet-Schnitttestergebnisse, und das SM 232 führt die Strahl-Primitiv-Schnitttest selbst durch. In anderen Fällen (z. B. bei Dreiecken) kann die TTU 232 den Strahl-Dreieck-Schnittpunkttest selbst durchführen, wodurch sich die Leistung des gesamten Strahlverfolgungs-Prozesses weiter erhöht. Der Vollständigkeit halber wird im Folgenden beschrieben, wie die TTU 238 das Strahl-Primitiv-Schnitttesten durchführen oder beschleunigen kann.
  • Wie oben erläutert, identifizieren (umschließen) Blattknoten, die von dem Strahl geschnitten werden, Primitive, die von dem Strahl geschnitten werden können oder nicht. Eine Möglichkeit besteht darin, dass die TTU 238 z. B. einen Bereich von Geometrie, der in den durchschnittenen Blattknoten identifiziert wurde, an den SM 232 zur weiteren Verarbeitung weitergibt. Beispielsweise kann der SM 232 selbst feststellen, ob die identifizierten Primitive von dem Strahl geschnitten werden, basierend auf den Informationen, die die TTU 238 als Ergebnis der Traversierung des BVH durch die TTU liefert. Um diese Verarbeitung von der SM 232 zu entlasten und dadurch zu beschleunigen, indem die Hardware der TTU 238 verwendet wird, kann der Stapelverwaltungsblock (SMU) 640 Anforderungen an den Strahl-Primitiv-Test- und Transformation (RTT) Block 620 ausgeben, um einen Strahlen-Primitiv-Test für die Primitive innerhalb der durchschnittenen Blattknoten durchzuführen, die der Strahlen-Complet-Testblock 610 (RCT) der TTU identifiziert hat. In einigen Ausführungsformen kann der SM 732 eine Anforderung für den Strahlennachbildungstest zur Prüfung eines bestimmten Bereichs von Primitiven an den RTT-Block 620 senden, unabhängig davon, wie dieser Geometriebereich identifiziert wurde.
  • Nachdem er sich vergewissert hat, dass die für einen angeforderten Strahl-Primitiv-Test benötigten Primitivdaten im Primitiv-Cache 654 verfügbar sind, kann der RTT-Block 620 Primitive bestimmen, die von dem Strahl geschnitten werden, indem er die im Strahlverwaltungsblock (RMU) 630 gespeicherten Strahlinformationen verwendet. Der RTT-Block 620 liefert die Identifizierung der Primitive, die von dem Strahl durchschnitten werden, an den IMU-Block 622.
  • Der IMU-Block 622 kann die Ergebnisse des Strahlennachahmungstests an den SM 232 zurückgeben. Die Ergebnisse des Strahlennachahmungstests können Identifikatoren der geschnittenen Primitive, den Abstand der Schnittpunkte vom Strahlenursprung und andere Informationen über die Eigenschaften der geschnittenen Primitive enthalten. In einigen Ausführungsformen kann der IMU-Block 622 einen vorhandenen Strahl-Primitiv-Test modifizieren (z. B. durch Änderung der Länge des Strahls), basierend auf früheren Schnittpunkt-Ergebnissen aus dem RTT-Block 620.
  • Der IMU-Block 622 kann auch die verschiedenen Arten von Primitiven verfolgen. Zu den verschiedenen Arten von Dreiecken gehören beispielsweise undurchsichtige Dreiecke, die einen Strahl blockieren, wenn sie geschnitten werden, und Alphadreiecke, die den Strahl blockieren können oder nicht, wenn sie geschnitten werden, oder die eine zusätzliche Behandlung durch den SM erfordern. Ob ein Strahl durch ein transparentes Dreieck blockiert wird oder nicht, kann beispielsweise von der (den) auf das Dreieck abgebildeten Textur(en), dem von der Textur eingenommenen Bereich des Dreiecks und der Art und Weise, wie die Textur das Dreieck verändert, abhängen. Beispielsweise erfordert Transparenz (z. B. Buntglas) in einigen Ausführungsformen, dass der SM 232 die Treffer von transparenten Objekten verfolgt, damit sie sortiert und in strahlenparametrischer Reihenfolge schattiert werden können, und den Strahl in der Regel nicht tatsächlich blockieren. In der Zwischenzeit ermöglicht das Alpha-„Trimming“ das Trimmen der Form des Primitivs basierend auf der Form einer auf das Primitiv gemappten Textur - beispielsweise das Ausschneiden einer Blattform aus einem Dreieck. (Man beachte, dass in der Rastergrafik die Transparenz oft als „Alpha-Blending“ und das Trimmen als „Alpha-Test“ bezeichnet wird). In anderen Ausführungsformen kann die TTU 238 transparente Treffer zur späteren Bearbeitung durch die SM 232 in Warteschlangen im Speicher verschieben und beschnittene Dreiecke direkt bearbeiten, indem sie Anfragen an die Textureinheit sendet. Jedes Dreieck kann einen Bezeichner enthalten, der den Dreieckstyp angibt. Der IMU-Block 622 ist so konfiguriert, dass er eine Ergebniswarteschlange für die Verfolgung der verschiedenen Arten von geschnittenen Dreiecken unterhält. Beispielsweise kann die Ergebniswarteschlange eine oder mehrere Bezeichnungen für durchschnittene undurchsichtige Dreiecke in einer Warteschlange und eine oder mehrere Bezeichnungen für transparente Dreiecke in einer anderen Warteschlange speichern.
  • Bei undurchsichtigen Dreiecken kann der Strahlenschnittpunkt für weniger komplexe Geometrien vollständig in der TTU 238 bestimmt werden, da die Fläche des undurchsichtigen Dreiecks den Strahl daran hindert, die Oberfläche des Dreiecks zu passieren. Bei transparenten Dreiecken können Strahlenschnittpunkte in einigen Ausführungsformen nicht vollständig in der TTU 238 bestimmt werden, da die TTU 238 den Schnittpunkttest basierend auf der Geometrie des Dreiecks durchführt und möglicherweise keinen Zugriff auf die Textur des Dreiecks und/oder die von der Textur eingenommene Fläche des Dreiecks hat (in anderen Ausführungsformen kann die TTU durch den Texturabbildungsblock der Grafikpipeline mit Texturinformationen versorgt werden). Um vollständig zu feststellen, ob das Dreieck geschnitten wird, können Informationen über transparente Dreiecke, die der Strahl-Primitiv-Test- und Transformationsblock 620 als geschnitten bestimmt, an den SM 232 gesendet werden, damit der SM vollständig bestimmen kann, ob das Dreieck die Sichtbarkeit entlang des Strahls beeinflusst.
  • Der SM 232 kann feststellen, ob der Strahl eine mit dem transparenten Dreieck verknüpfte Textur schneidet und/oder ob der Strahl durch die Textur blockiert wird oder nicht. In einigen Fällen kann der SM 232 basierend auf dieser Feststellung eine modifizierte Abfrage an die TTU 238 senden (z. B. Verkürzung des Strahls, wenn der Strahl durch die Textur blockiert wird). In einer Ausführungsform kann die TTU 238 so konfiguriert sein, dass sie alle Dreiecke, bei denen festgestellt wurde, dass sie den Strahl schneiden, zur weiteren Verarbeitung an die SM 232 zurücksendet. Da die Rücksendung aller Dreiecksschnittpunkte an den SM 232 zur weiteren Verarbeitung kostspielig in Bezug auf die Schnittstellen- und die Thread-Synchronisierung ist, kann die TTU 238 so konfiguriert werden, dass sie Dreiecke ausblendet, die zwar geschnitten werden, aber nachweislich ohne funktionale Auswirkungen auf die resultierende Szene ausgeblendet werden können. Da der TTU 238 beispielsweise Informationen über den Dreieckstyp zur Verfügung stehen (z. B. ob ein Dreieck undurchsichtig oder durchsichtig ist), kann die TTU 238 die Informationen über den Dreieckstyp verwenden, um geschnittene Dreiecke zu bestimmen, die entlang des Strahls von einem anderen schneidenden undurchsichtigen Dreieck verdeckt werden und die daher nicht in die Ergebnisse aufgenommen werden müssen, da sie die Sichtbarkeit entlang des Strahls nicht beeinflussen. Wenn die TTU 238 weiß, dass ein Dreieck entlang des Strahls von einem undurchsichtigen Dreieck verdeckt wird, kann das verdeckte Dreieck aus den Ergebnissen ausgeblendet werden, ohne dass dies Auswirkungen auf die Visualisierung der resultierenden Szene hat.
  • Der Schnittverwaltungsblock 622 kann eine Ergebniswarteschlange zur Speicherung von Treffern enthalten, die eine Dreieckskennung und Informationen über den Punkt, an dem der Strahl das Dreieck getroffen hat, enthalten. Wird festgestellt, dass ein Strahl ein undurchsichtiges Dreieck schneidet, können die Identität des Dreiecks und der Abstand des Schnittpunkts vom Strahlenursprung in der Ergebniswarteschlange gespeichert werden. Wird festgestellt, dass der Strahl ein anderes undurchsichtiges Dreieck schneidet, kann das andere geschnittene undurchsichtige Dreieck aus dem Ergebnis ausgelassen werden, wenn der Abstand des Schnittpunkts vom Strahlursprung größer ist als der bereits in der Ergebniswarteschlange gespeicherte Abstand des geschnittenen undurchsichtigen Dreiecks. Ist der Abstand des Schnittpunkts vom Strahlenursprung kleiner als der Abstand des bereits in der Ergebniswarteschlange gespeicherten geschnittenen undurchsichtigen Dreiecks, kann das andere geschnittene undurchsichtige Dreieck das in der Ergebniswarteschlange gespeicherte undurchsichtige Dreieck ersetzen. Nachdem alle Dreiecke einer Abfrage geprüft wurden, können die in der Ergebniswarteschlange gespeicherten undurchsichtigen Dreiecksinformationen und die Schnittpunktinformationen an das SM 232 gesendet werden.
  • In einigen Ausführungsformen kann der Schnittverwaltungsblock 622, sobald ein undurchsichtiges Dreieck identifiziert wurde, den im Strahlenverwaltungsblock 630 gespeicherten Strahl verkürzen, so dass Begrenzungsvolumen (die Dreiecke enthalten können) hinter dem geschnittenen undurchsichtigen Dreieck (entlang des Strahls) nicht als den Strahl schneidend identifiziert werden.
  • Der Schnittverwaltungsblock 622 kann Informationen über durchschnittene transparente Dreiecke in einer separaten Warteschlange speichern. Die gespeicherten Informationen über durchschnittene transparente Dreiecke können an den SM 232 gesendet werden, damit dieser feststellen kann, ob der Strahl eine mit dem Dreieck verbundene Textur schneidet und/oder ob die Textur den Strahl blockiert. Das SM kann die Ergebnisse dieser Bestimmung an die TTU 238 zurücksenden und/oder die Abfrage basierend auf dieser Bestimmung ändern (z. B. den Strahl verkürzen, wenn der Strahl durch die Textur blockiert wird).
  • Reduzieren falsch-positiver Strahl-Begrenzungsvolumen-Schnittpunkte
  • 7 stellt ein Flussdiagramm für einen Prozess 700 zum Reduzieren der falsch-positiven Strahl-Begrenzungsvolumen-Schnittpunkte gemäß einigen beispielhaften Ausführungsformen dar. Der Prozess 700 kann ganz oder teilweise in Hardware-Schaltungen wie beispielsweise der TTU 238 implementiert werden. In beispielhaften Ausführungsformen können eine oder mehrere Operationen 702-720 in einer anderen als der gezeigten Reihenfolge oder gar nicht ausgeführt werden, um die bei der Traversierung auftretenden falsch-positiven Strahl-Begrenzungsvolumen-Schnittpunkte zu reduzieren.
  • Der Prozess 700 kann während der Traversierung eines BVH eingeleitet werden, während eine Anwendung in einem System wie dem oben beschriebenen System 200 verarbeitet wird. 4A stellt die Strahlverfolgungs-Pipeline auf einer hohen Ebene dar, mit einer Strahlenerzeugungsoperation 410 und einer BVH-Traversierungsoperation 420, um zu feststellen, ob ein Strahl irgendwelche geometrischen Primitive schneidet (siehe Operation 450). 4B veranschaulicht, dass die BVH-Traversierung 420 aus 4A durch rekursive Durchführung von Strahl-Begrenzungsvolumen-Schnitttests 472 durchgeführt wird, die die BVH entlang der jeweiligen Pfade abwärts durchlaufen, bis an den Blattknoten des BVH keine Unterteilungen des Begrenzungsvolumens mehr verfügbar sind, und dass Strahl-Primitiv-Schnitttests 478 durchgeführt werden, um festzustellen, ob ein geometrischer Primitivtreffer auf dem ausgewählten Pfad auftritt. 5A stellt die Traversierung von Strahlen detaillierter dar, wobei der Traversierungspfad eine Traversierung der Top-Level-Beschleunigungsstruktur (TLAS) 506 umfasst, die über einen Instanzknoten mit einer Traversierung der Bottom-Level-Beschleunigungsstruktur (BLAS) 518 verbunden ist. Wie oben beschrieben, definiert der Instanzknoten die Transformation 514 aus dem Weltraum, in dem die TLAS definiert ist, in den Koordinatenraum der jeweiligen Geometrie. In der vorliegenden Beschreibung werden die Begriffe Instanz-Beschleunigungsstruktur (IAS) und geometrische Beschleunigungsstruktur (GAS) austauschbar mit TLAS bzw. BLAS verwendet. Es wird darauf hingewiesen, dass die BVH in 5A zwar einen einzigen Instanzknoten in einem Traversierungspfad von der Wurzel des BVH über die TLAS zu einem Blattknoten der BLAS enthält, dass aber einige BVHs mehrere Ebenen in der TLAS aufweisen können (z. B. weist ein Pfad von der Wurzel der TLAS zu einem Blatt der TLAS mehr als einen Instanzknoten auf).
  • In Operation 702 wird während der Traversierung der Strahlen auf einen Instanzknoten zugegriffen. Der Instanzknoten enthält in dieser Ausführungsform Parameter von Vertices für ein mit voller Genauigkeit definiertes Begrenzungsvolumen (z. B. Vertices 902 in der Instanzknoten-Datenstruktur 900). Der Instanzknoten kann auch ein Flag (z. B. „aabb bit“ 906) enthalten, das anzeigt, dass die Vertexfelder gültige Daten enthalten und/oder dass die Transformationsrahmen-Testfunktion aktiviert ist. Vertexfelder können die Koordinaten des Begrenzungsvolumens speichern.
  • Wenn das Flag nicht gesetzt ist (d.h. die Funktion „Transformationsrahmen-Test“ ist für den Instanzknoten nicht aktiviert), fährt der Prozess 700 mit Operation 704 fort, um den Strahl vom Weltraum in den Koordinatenraum der BLAS-Knoten zu transformieren, und fährt mit Operation 712 usw. des Prozesses 700 fort, ohne den Transformationsrahmen-Test durchzuführen.
  • Wenn das Flag gesetzt ist (d.h. die Transformationsrahmentestfunktion aktiviert ist), wird in der beschriebenen Ausführungsform die Operation 706 für den TBT durchgeführt. In der beschriebenen Ausführungsform kann der Transformationsrahmentest in Operation 706 im Wesentlichen parallel zur Instanzknoten-Transformation in Operation 704 durchgeführt werden. In der beschriebenen Ausführungsform führt die Hardware-Strahlentransformationsschaltung (z. B. die Strahl-Primitiv-Test- und Transformationsschaltung 620) die Transformation 704 durch. In einigen Ausführungsformen können die Operationen 704 und 706 parallel oder im Wesentlichen parallel durchgeführt werden. Beispielsweise kann die Transformationsrahmen-Testoperation 706 unter Verwendung eines ersten Teils der Schaltung des Strahl-Primitiv-Test- und Transformationsblocks 620 durchgeführt werden, während gleichzeitig die Transformation des Strahls vom Weltraum in den Koordinatenraum in einem zweiten Bereich der Schaltung durchgeführt wird. Der Prozess 800 veranschaulicht einen beispielhaften TBT-Prozess. Das TBT-Verfahren wird weiter unten mit Bezug auf 8 näher beschrieben.
  • In Operation 708 wird festgestellt, ob die Operation 706 zu einem Treffer geführt hat. Ist das Ergebnis ein Fehlschlag, werden in Operation 710 der Instanzknoten und alle seine Nachfolgerknoten entfernt. Die Traversierung der Strahlen wird fortgesetzt, ohne dass in den GAS durch die Nachfolger des Instanzknotens hinabgestiegen wird.
  • Wenn Operation 706 ein Treffer ist, kann bei Operation 711 optional die Schnittpunktinformation der Strahl-Begrenzungsvolumen-Tests mit voller Präzision zur späteren Verwendung gespeichert werden. Beispielsweise kann ein t-min, das den minimalen Schnittpunktabstand definiert (bei dem der Strahl das Begrenzungsvolumen tatsächlich schneidet), von der TTU 228 lokal gespeichert werden, so dass es bei der nachfolgenden Verarbeitung wiederverwendet werden kann.
  • Bei Operation 712 kann optional ein Strahlen-Clipping-Prozess durchgeführt werden. Obwohl PDC die durch Knoten verursachten Probleme lindert, für die nachfolgende Schnittpunkttests nachweislich nicht zu Treffern führen würden, können weitere Probleme im Zusammenhang mit der Strahlendistanz bestehen bleiben, die falsch positive Ergebnisse verursachen. Das Strahlen-Clipping kann dazu dienen, falsch-positive Traversierungen aufgrund von Strahlen, deren Ursprung weit vom AABB entfernt ist, weiter zu reduzieren. Prozess 1300 ist ein Beispielprozess für das Strahlen-Clipping.
  • Bei Operation 714 greift der Prozess 700 auf die Geometrie-Beschleunigungsstruktur zu, die Nachfolgerknoten des Instanzknotens ist/sind.
  • Bei Operation 716 kann optional ein Punktentartungs-Culling (PDC) durchgeführt werden. Das oben beschriebene TBT kann verhindern, dass Traversierungen in GASs eindringen, verhindert aber nicht, dass nachfolgende exzessive Traversierungen innerhalb des GASs aufgrund der gleichen langen Distanz stattfinden, wenn der Instanz Begrenzungsrahmen durchschnitten wird. PDC kann das vom TGT-Prozess durchgeführte Culling ergänzen. PDC stellt fest, ob ein mit einem Knoten verbundener Begrenzungsrahmen zu einem Punkt im Hinblick auf den Strahlenursprung entartet, und wenn dies der Fall ist, entfernt das Begrenzungsvolumen von der weiteren Traversierung. Der nachfolgend unter Bezugnahme auf 11 beschriebene Prozess 1100 ist ein Beispielprozess für das Punktentartungs-Culling.
  • In Operation 718 wird ein Strahl-Begrenzungsvolumen-Schnitttest mit niedriger Präzision durchgeführt, um festzustellen, ob der transformierte Strahl das im BVH definierte Begrenzungsvolumen durchschneidet. Wie oben beschrieben, werden die Vertexkoordinaten des Begrenzungsvolumens in den BVH-Knoten mit geringer Genauigkeit gespeichert.
  • Wenn der Strahl-Begrenzungsvolumen-Schnitttest mit niedriger Präzision in Operation 718 einen Treffer ergibt, wird der Prozess 700 in der GAS fortgesetzt. In Operation 720 wird ein Strahlen-Primitiv-Schnitttest durchgeführt, um festzustellen, ob der Strahl eine Geometrie schneidet, die von dem in Operation 718 getesteten Begrenzungsrahmen niedriger Präzision und, wenn Operation 706 durchgeführt wird, auch von dem in Operation 706 getesteten Begrenzungsrahmen hoher Präzision umgeben ist.
  • Während in einigen Ausführungsformen alle Operationen 702-720 zum Reduzieren falsch positiver Traversierungen durchgeführt werden können, können in anderen Ausführungsformen einer oder mehrere der Operationen TBT, PDC und Strahlen-Clipping nicht durchgeführt werden.
  • Transformationsrahmen-Test
  • Die Funktion Transformationsrahmen-Test (TBT) kombiniert die niedrigpräzisen Strahl-Begrenzungsvolumen-Schnitttests mit einem zweiten, hochpräzisen Strahl-Begrenzungsvolumen-Schnitttest, der opportunistisch durchgeführt wird. In einigen Ausführungsformen kombiniert die TBT-Funktion die verlustbehafteten breiten und komprimierten Begrenzungsrahmen-Tests im RCT-Block 610 mit einem sekundären Begrenzungsrahmen-Schnitttest voller Präzision, der opportunistisch im RTT-Block 620 während einer Instanztransformation vom Weltraum zum Objektraum durchgeführt wird.
  • In DXR und anderen APIs werden für die Geometrie einer Szene zwei Ebenen von Beschleunigungsstrukturen verwendet. Die Geometrie-Beschleunigungsstruktur (GAS), auch bekannt als Bottom-Level Beschleunigungsstruktur (BLAS), enthält eine Reihe von Geometrien, die für den Aufbau einer Szene verwendet werden. Die Instanz-Beschleunigungsstruktur (IAS), auch bekannt als Top-Level Beschleunigungsstruktur (TLAS), enthält einen Satz von Instanzen der GAS. Ausgehend von einer Reihe von GAS definiert eine Anwendung eine Reihe von Instanzen, die jeweils auf eine GAS verweisen, über einige Spezialisierungsinformationen und eine Transformation verfügen, um einen Strahl vom Weltraum in einen Objektraum zu transformieren. Der Objektraum für einen bestimmten GAS ist der Koordinatenraum für die Geometrie in diesem GAS.
  • In beispielhaften Ausführungsformen ist ein Instanzknoten sowohl ein Nachfolger im BVH, das auf einen GAS zeigt, als auch eine Datenstruktur, die die Informationen für diese Instanz enthält, einschließlich des Zeigers auf den GAS und die Transformation.
  • In der Instanzknoten-Datenstruktur werden hochpräzise (z. B. FP32) Min- und Max-Vertices, die einen AABB zur Begrenzung der Instanz definieren, zusammen mit einem „AABB-Bit“ gespeichert, das anzeigt, dass sie gültig sind. Ein AABB zur Begrenzung einer Instanz kann hier als „Instanzknoten AABB“ bezeichnet werden. Siehe 9A und 9B. 9A zeigt eine Instanzknoten-Datenstruktur 900, die die Vertices (z. B. die minimalen x-, y- und z-Punkte und die maximalen x-, y- und z-Punkte) 902 des Instanzknotens AABB enthält. 9B zeigt ein „aabb-Bit“ 906, das anzeigt, ob das AABB-Culling für den Instanzknoten aktiviert ist oder nicht (z. B. durch Setzen auf 1 bzw. 0). Das aabb-Bit 906 kann in einem reservierten Byte 904 in der Instanzknoten-Datenstruktur 900 gesetzt werden. Fachleute werden verstehen, dass die Positionen der Vertices und des aabb-Bits in der Instanzknoten-Datenstruktur nicht auf die in den 9A-9B gezeigten Positionen beschränkt sind. Ebenso sind Ausführungsformen nicht auf das in den 9A-9B dargestellte Format der Instanzknoten-Datenstruktur beschränkt.
  • Während der Konstruktion des Instanzknotens kann der Ersteller des BVH für die jeweilige(n) Anwendung(en) entscheiden, eine Instanz unter Verwendung eines für diesen Instanzknoten definierten hochgenauen Instanzknotens AABB zu binden. Für Instanzknoten, die auf diese Weise gebunden werden, führt der RTT-Block 620 einen Strahl-Begrenzungsvolumen-Test mit voller Präzision durch.
  • In einigen Ausführungsformen wird dieser Strahl-Begrenzungsvolumen-Schnitttest mit voller Präzision parallel zur Instanztransformation durchgeführt Beispielsweise enthält der RTT-Block 620 in einigen Ausführungsformen die Hardware-Schaltung zur Durchführung von Strahl-Dreieck-Schnitttests und auch die Hardware-Schaltung zur Durchführung von Instanztransformationen. Da in solchen beispielhaften Ausführungsformen der Datenpfad für den Strahl-Rahmen-Schnitttest im RTT-Block 620 für andere Berechnungen verwendet wird, beispielsweise für den Strahl-Primitiv- (z. B. Strahl-Dreieck-) Schnitt, entstehen, wenn überhaupt, nur geringe zusätzliche Kosten in Bezug auf die Verarbeitungszeit oder die Hardware-Schaltungsfläche für den parallel zur eigentlichen Transformation durchzuführenden Strahl-Begrenzungsvolumen-Test.
  • In einigen Ausführungsformen handelt es sich beim Strahl-Begrenzungsvolumen-Schnitttest mit voller Präzision um einen Slab-Test. Siehe 10A-10C. 10A zeigt einen Strahl, der für eine der x-, y- und z-Ebenen die minimale Ebene („min-Ebene“) des Begrenzungsvolumens zum Zeitpunkt t0 schneidet und die maximale Ebene („max-Ebene“) zum Zeitpunkt t1 verlässt. 10B zeigt einen Strahl, der in der Max-Ebene des Begrenzungsvolumens eintritt und aus der Min-Ebene austritt. Wie in 10A dargestellt, bedeutet t0 < t1, dass der Strahl in der Min-Ebene in das Begrenzungsvolumen eingetreten ist, und 10B t1 < t0. Die Schnittpunktprüfung umfasst die Bestimmung der Schnittpunkte der Min-Ebene und der Max-Ebene für jede der Koordinaten x, y und z und die Feststellung, ob sie innerhalb des Bereichs für das Begrenzungsvolumen liegen.
  • Es gibt einige Eckfälle, die beim Slab-Test gesondert behandelt werden müssen. Der erste ist die Komponente in Nullrichtung, die zu NaN-Werten („not a number“) führen kann, wenn der Strahl entlang der Min- oder Max-Ebene verläuft. Aus Gründen der Vorsicht wird in einigen beispielhaften Ausführungsformen jeder Schnittpunkt, der zu einem NaN-Wert führt, als Treffer gewertet. 10C zeigt mehrere Strahlen in Bezug auf die Max- und Min-Ebenen eines Begrenzungsvolumen. Wie gezeigt, ergeben alle Strahlen, die parallel zu den Min-/Max-Ebenen verlaufen, aber nicht auf den Ebenen liegen, Werte von unendlich sowohl für t0 als auch für t1. Strahlen, die auf der Min- oder Max-Ebene liegen, ergeben entweder für t0 oder t1 einen NaN-Wert und werden als Schnittpunkt mit der jeweiligen Ebene betrachtet, für die der NaN-Wert ermittelt wird.
  • Während der oben vorgestellte Strahl-Begrenzungsvolumen-Schnitttest mit voller Präzision präzise ist, können einige Ausführungsformen zusätzliche Konservativität vorsehen, um Platz für einen Teil der konservativen Aufblähung zu schaffen, die bei der BLAS-Traversierung erfolgt. Aus diesem Grund erlauben solche Beispielausführungen eine programmierbare Aufblähung, um den Abstand zwischen t-min und t-max (t0 bzw. t1) um eine vorkonfigurierte kleine Anzahl (z. B. 2, 3, 4 usw.) von ULPs zu vergrößern. Die Implementierung kann eine ganzzahlige Addition für die ULP-Addition verwenden. In einigen Ausführungsformen kann jedoch auch ein tatsächlicher FP-Addierer (Gleitkomma-Addierer) verwendet werden. Bei der Ganzzahladdition kann beispielsweise eine Überlaufprüfung eingesetzt werden, um den Fall abzufangen, dass ein Überlauf von FP_MAX zu einem NaN-Wert auftritt.
  • Wenn der Strahl-Begrenzungsvolumen-Schnitttest mit der vollen Präzision am Instanzknoten einen Treffer ergibt, wird die Traversierung in der BLAS fortgesetzt. Ergibt der Strahl-Begrenzungsvolumen-Schnitttest mit der vollen Präzision einen Fehlschlag, wird der Instanzknoten verworfen und die Traversierung mit dem nächsten Eintrag in der IAS fortgesetzt.
  • Das TBT-Merkmal ist nur ein Teil der Lösung für Leistungsklippen. TBT kann verhindern, dass Traversierungen in GASs eindringen, aber es entfernt keine übermäßige Traversierung innerhalb der GAS infolge desselben langen Abstand, wenn der Instanz-Begrenzungsrahmen geschnitten wird.
  • 8 stellt den Prozess 800 für den Transformationsrahmen-Test (TBT) dar. Der Prozess 800 kann ganz oder teilweise in Hardware-Schaltungen wie beispielsweise der TTU 238 implementiert werden. In beispielhaften Ausführungsformen können eine oder mehrere Operationen 802-822 in einer anderen als der gezeigten Reihenfolge oder gar nicht durchgeführt werden, um die bei der Traversierung von Strahlen auftretenden falsch-positiven Strahl-Begrenzungsvolumen-Schnittpunkten zu reduzieren.
  • Prozess 800 kann beginnen, wenn bei Operation 802 eine Traversierung von Strahlen auf einen Knoten im BVH in der Instanz-Beschleunigungsstruktur (IAS) zugreift. In der beschriebenen Ausführungsform ist der Knoten, auf den zugegriffen wird, ein Instanzknoten, aber die Ausführungsformen sind nicht darauf beschränkt.
  • In Operation 804 wird festgestellt, ob der Knoten, auf den zugegriffen wird (in der beschriebenen Ausführungsform der Instanzknoten), für das TBT-Merkmal konfiguriert ist. In beispielhaften Ausführungsformen wird bestimmt, ob das TBT-Merkmal aktiviert ist, indem festgestellt wird, dass der Knoten, auf den zugegriffen wird, die hochpräzise Definition von Vertices des Begrenzungsvolumens enthält, das die Menge der Geometrie umfasst, die in den Blattknoten des Teilbaums definiert ist, der in dem Knoten wurzelt, auf den zugegriffen wird. In einigen beispielhaften Ausführungsformen kann in dem Knoten, auf den zugegriffen wird, ein Bitschalter gesetzt werden, der anzeigt, ob die Vertices in der Datenstruktur des Knotens, auf den zugegriffen wird, vorhanden und ob sie gültig sind. Beispielsweise zeigen die 9A und 9B einen Instanzknoten 900, der hochpräzise x-, y- und z-Koordinaten 902 der minimalen und maximalen Vertices eines AABB definiert, sowie ein aabb-Bit 906, das anzeigt, dass die Koordinaten 902 gültig sind.
  • Wenn in Operation 804 festgestellt wird, dass das TBT-Merkmal an dem Knoten, auf den zugegriffen wird, nicht aktiviert ist (d.h., das aabb-Bit ist nicht gesetzt und/oder es sind keine hochpräzisen Vertices angegeben), dann geht Prozess 800 zu Operation 806 über und die Traversierung wird fortgesetzt. Handelt es sich bei dem Knoten, auf den zugegriffen wurde, um einen Instanzknoten, kann dies die Transformation des Strahls vom Weltraum in einen Objektraum (z. B. den Koordinatenraum des zugrunde liegenden Geometriesatzes), wie er im Knoten, auf den zugegriffen wurde, definiert ist, und die Fortsetzung der Traversierung mit dem transformierten Strahl beinhalten.
  • Wenn in Operation 806 festgestellt wird, dass das TBT-Merkmal an dem Knoten, auf den zugegriffen wird, aktiviert ist, wird alternativ in Operation 808 ein Schnittpunkttest zwischen dem Strahl und dem hochpräzisen Begrenzungsvolumen, das in dem Knoten, auf den zugegriffen wird, definiert ist, durchgeführt. Insbesondere wird festgestellt, ob der Strahl im Weltraum des IAS das Begrenzungsvolumen schneidet, das durch die hochpräzisen Vertexkoordinaten definiert ist, die in dem Knoten, auf den zugegriffen wird, angegeben sind. Dieser Schnittpunkttest verwendet Vertexkoordinaten, die in einem numerischen Hochpräzisionsformat definiert sind, und wird auf Schaltungen durchgeführt, die für Hochpräzisionsmathematik konfiguriert sind.
  • In einigen Ausführungsformen wird der hochpräzise Strahl-Begrenzungsvolumen-Schnitttest in Operation 808 parallel zur Transformationsberechnung in Operation 806 durchgeführt. Auf diese Weise kann jeder zusätzliche Zeitaufwand, der durch den hochpräzisen Strahl-Begrenzungsvolumen-Schnitttest entsteht, minimiert werden. In einigen Ausführungsformen wird beispielsweise die Transformationsberechnung in einem ersten Satz von Hardwareschaltungen im Block 620 der TTU 238 durchgeführt, während der hochpräzise Strahl-Begrenzungsvolumen-Schnitttest in einem zweiten Satz von Hardwareschaltungen des RTT 620 durchgeführt wird. Der erste Satz von Hardware-Schaltungen und der zweite Satz von Hardware-Schaltungen können so beschaffen sein, dass in einer typischen Konfiguration (wenn TBT für einen Knoten, auf den während der Traversierung von Strahlen zugegriffen wird, nicht aktiviert ist) der RTT 620 entweder für die Transformationsberechnung und/oder für Strahl-Primitiv Tests verwendet wird. Beispielsweise ist die TTU in einigen aktuellen Implementierungen von NVDIA-GPUs so konfiguriert, dass sie alle Strahlen-Begrenzungsvolumen-Schnitttests in arithmetisch niedriger Präzision im Strahlen-Complet-Test (RCT) Block 610 und alle Strahl-Primitiv-Schnitttests in arithmetisch hoher Präzision im RTT-Block 620 durchführt
  • In Operation 810 wird festgestellt, ob der hochpräzise Schnitttest zu einem Treffer führte. Ergibt der Test einen Treffer, so bedeutet dies, da der Test mit hoher Präzision durchgeführt wurde, dass der Strahl keine der von der AABB umfassten Geometrien schneidet, so dass der Knoten, auf den zugegriffen wurde, ausgelassen werden kann und somit keiner der Nachfolger-Knoten des zugegriffenen Knotens durchlaufen werden.
  • Wenn in Operation 810 festgestellt wird, dass der hochpräzise Schnitttest zu einem Treffer geführt hat, fährt der Prozess 800 mit der Traversierung fort, indem er auf die Unterknoten des Knotens zugreift, auf den zugegriffen wurde. Handelt es sich beispielsweise bei dem Knoten, auf den zugegriffen wurde, um einen Instanzknoten, wird die Traversierung durch den Zugriff auf die Nachfolgerknoten fortgesetzt, was bei einem Instanzknoten einen Wurzelknoten in einem GAS einschließen kann.
  • Anschließend wird in Operation 816 der transformierte Strahl (z. B. der Strahl, der vom Weltraum des IAS in den Koordinatenraum des GAS transformiert wird, wie er durch die im Knoten, auf den zugegriffen wird, angegebene Transformation definiert ist) anhand eines niedrigpräzisen Begrenzungsrahmens getestet, der den Geometriesatz umfasst (z. B. denselben Geometriesatz, der von dem in Operation 808 getesteten hochpräzisen Begrenzungsrahmen umfasst wird).
  • Der in Operation 816 durchgeführte Test ist identisch mit dem Strahl-Begrenzungsvolumen-Test, der für jeden Knoten während der Traversierung der Strahlen durchgeführt wird, und zu diesem Zeitpunkt ist die Traversierung für alle Knoten identisch, unabhängig davon, ob ein stromaufwärts gelegener Knoten im BVH-Traversierungspfad selektiv einen sekundäre Strahl-Begrenzungsvolumen-Tests mit hoher Präzision ausgelöst hat. In beispielhaften Ausführungsformen werden beim Test mit geringer Genauigkeit Vertex-Koordinaten mit geringer Genauigkeit verwendet und auf Schaltungen ausgeführt, die für mathematische Berechnungen mit geringer Genauigkeit konfiguriert sind. Dies steht im Gegensatz zum Hochpräzisionstest in Operation 808, der hochpräzise Vertexkoordinaten und Schaltungen verwendet, die für Hochpräzisionsmathematik konfiguriert sind. In beispielhaften Ausführungsformen können sich hohe und niedrige Präzision auf die Größe der verwendeten numerischen Gleitkommadarstellung (z. B. 32-Bit-Gleitkommadarstellung gegenüber 8-Bit-Gleitkommadarstellung) beziehen. Mit dem Begriff „volle Präzision“ ist die höchste für die Implementierung verfügbare Gleitkommadarstellung gemeint. In beispielhaften Ausführungsformen können die Strahlenbündelungs-Volumenüberschneidungstests mit hoher und niedriger Präzision denselben Slab-Test (z. B. 10A-10C) verwenden, der mit unterschiedlichen Präzisionsniveaus durchgeführt wird. Darüber hinaus können in Beispielen das Begrenzungsvolumen, das in der Schnittprüfung mit hoher Präzision in Operation 808 verwendet wird, und das Begrenzungsvolumen, das in der Schnittprüfung mit niedriger Präzision in Operation 816 verwendet wird, nicht identisch sein (und sind es typischerweise auch nicht), obwohl sie denselben Satz an zugrunde liegender Geometrie umfassen.
  • Es sollte auch beachtet werden, dass der niedrigpräzise Test in Operation 816 ein konservativer Test sein kann, bei dem ein Strahl (wie oben beschrieben) gegen das Begrenzungsvolumen getestet wird, da auf GAS-Ebene wasserdichte Schnitte erforderlich sind. Im Gegensatz dazu muss die hochpräzise Test in Operation 806 nicht wasserdicht sein und kann daher den Strahl (anstatt eines Strahls, der typischerweise für konservative Schnittpunkte verwendet wird) für die Schnittpunktbestimmung verwenden.
  • In Operation 818 wird festgestellt, ob der Schnittpunkttest in Operation 816 zu einem Treffer geführt hat (d. h. ob der transformierte Strahl den hochpräzisen AABB durchschnitten hat). Ist das Ergebnis ein Fehlschlag, kann davon ausgegangen werden, dass keine der Geometrien, die Teil des Teilbaums sind, der in dem BLAS-Knoten wurzelt, auf den zugegriffen wurde, von dem Strahl durchschnitten wird, und der gesamte Teilbaum, der in dem Knoten wurzelt, auf den zugegriffen wurde, wird von der weiteren Traversierung ausgeschlossen.
  • Ist das Ergebnis hingegen ein Treffer, so wird die Traversierung zu den Unterknoten des Knotens, auf den zugegriffen wurde, bei Operation 822 fortgesetzt. Die Traversierung ist oben in Bezug auf die 5A-6 beschrieben.
  • Obwohl sich die obige Beschreibung des Prozesses 800 auf einen Instanzknoten als Zugriffsknoten bezieht, an dem der hochpräzise Schnittpunkttest durchgeführt wird, sind die Ausführungsformen nicht darauf beschränkt. In beispielhaften Ausführungsformen kann der Knoten, auf den zugegriffen wird und an dem der hochpräzise Schnittpunkttest durchgeführt wird (und der die hochpräzisen Eckpunktkoordinaten und das entsprechende AABB-Bit enthält), ein beliebiger Knoten im IAS oder sogar der Wurzelknoten im GAS sein, der die vom AABB umfasste Geometrie enthält. In Implementierungen, in denen der Traversierungspfad durch den IAS mehrere Beschleunigungsstrukturen und somit mehr als einen Instanzknoten aufweist (z. B. einen ersten Instanzknoten zur Transformation vom Weltraum in einen Zwischenraum und einen zweiten Instanzknoten zur Transformation vom Zwischenraum in den Objektraum), kann der Knoten, auf den zugegriffen wird, überall auf dem Pfad durch den IAS liegen und ist nicht auf die oberste
  • Beschleunigungsstruktur beschränkt.
  • Es sollte beachtet werden, dass in beispielhaften Ausführungsformen der hochpräzise Schnittpunkttest der Operation 808 im Weltraum (oder einem anderen Zwischenraum) oder im Objektraum der zugrunde liegenden Geometrie durchgeführt werden kann. Wenn beispielsweise der Knoten, auf den zugegriffen wird und an dem der Hochpräzisionstest durchgeführt wird, die Wurzel des GAS ist, findet der Test im Objektraum statt, und wenn der Knoten, auf den zugegriffen wird, irgendwo im IAS liegt, findet der Test im Weltraum statt (oder in einem anderen Zwischenraum im Szenario eines Multi-AS-Pfads durch den IAS).
  • Punktentartungs-Culling
  • Eine Technik zur Verringerung falsch positiver Strahl-Begrenzungsvolumen-Schnitte, die durch Strahlenaufblähung verursacht werden, wird hier als „Punktentartungs-Culling“ (PDC) bezeichnet. Bei PDC wird festgestellt, ob der Strahl, für den die Traversierung durchgeführt wird, so weit von dem Begrenzungsvolumen entfernt ist, das auf Schnittpunkte geprüft werden soll, dass das Begrenzungsvolumen zu einem Punkt entartet (z. B. kollabiert). Wenn festgestellt wird, dass die AABB zu einem Punkt entartet, ermöglicht das PDC-Feature, dass der Knoten, der der AABB entspricht, entfernt wird.
  • Das Culling solcher AABBs, die zu einem Punkt entarten, reduziert falsch positive Schnittpunkte. Der Grund dafür ist, dass die Strahl-Begrenzungsvolumen-Schnitttests mit niedriger Präzision aufgrund von Strahlenaufblähung für weit entfernte Strahlenursprünge immer noch zu einem Schnitttreffer führen können, während die eventuellen Strahl-Primitiv-Schnitttests, die mit hoher Präzision durchgeführt werden, zu Fehltreffern führen würden. Der Grund dafür, dass die Strahl-Primitiv Schnitttests zu Fehlern führen, ist, dass jede Geometrie innerhalb eines AABB, die (aufgrund der Entfernung des Strahlursprungs) zu einem Punkt entartet, auch zu einem Punkt entartet, und ein Strahl einen Punkt nicht schneidet. Mit anderen Worten, ein Punkt hat 0 Volumen, der Strahl kann ein AABB oder geometrisches Primitiv mit 0 Volumen nicht schneiden.
  • In einer beispielhaften Ausführungsform ist PDC auf der Complet-Ebene aktiviert. Der für das TBT-Merkmal verwendete Slab-Test kann als derselbe Slab-Test angesehen werden, der im RCT-Block 610 verwendet wird, wenn ein Strahl gegen die komprimierten AABBs im Complet getestet wird. Der erste Schritt des Slab-Tests subtrahiert den Strahlenursprung von den Vertices des Begrenzungsvolumen. Bei großen Entfernungen, bei denen der Strahlenursprung im Vergleich zu den AABB-Dimensionen ausreichend groß ist, kann dieser Operation das Begrenzungsvolumen zu einem Punkt zusammenziehen. Mit anderen Worten, die begrenzte Genauigkeit der Vertexkoordinaten führt dazu, dass sich die Vertices „min“ und „max“ angesichts des relativ großen Abstands zum Strahlursprung überlappen. Eine Analogie könnte sein, dass ein Auto immer kleiner wird, je weiter es sich vom Betrachter entfernt, und in einiger Entfernung vom Betrachter nur noch als Punkt zu sehen ist, bevor es aus dem Blickfeld verschwindet. Auch wenn das Begrenzungsvolumen zu einem Punkt wird, trifft der Strahl-Complet-Schnitttest (z. B. das Testes des Strahls gegen den AABB, der dem Complet entspricht) immer noch diesen Punkt, um bei den Schnittpunkten der zugrunde liegenden Geometrie konservativ zu sein.
  • Bei Dreiecksschnitttests wird der Strahl-Dreiecks-Schnitt im Scherraum durchgeführt. Der erste Schritt ist die gleiche Subtraktion des Strahlenursprungs von den Dreieckspunkten. Da die Vertices der Dreiecke im AABB im Complet enthalten sind, führen alle AABBs, die einem Strahl-Begrenzungsvolumen-Schnitttest unterzogen werden und zu Punkten kollabieren, auch zu Dreiecken, die zu Punkten kollabieren. Der im RTT-Block 620 durchgeführte Strahl-Primitiv Schnittpunkttest wird mit voller Genauigkeit und nicht konservativ durchgeführt, so dass die entarteten Punktdreiecke mit 0-Fläche nicht geschnitten werden.
  • Es kann ein Bit pro Complet hinzugefügt werden, das PDC aktiviert. Siehe 12A und 12B, die das „pdCull“-Bit 1204 im „misc“-Feld 1202 innerhalb des Complet 1200 zeigen. Die genaue Position des Bits ist nicht wichtig. Das pdcull-Bit zeigt an, dass, wenn der Complet-Begrenzungsrahmen auf einen einzigen Punkt reduziert wird, die gesamte Geometrie unterhalb dieses Complet garantiert fehlen wird. In der hier beschriebenen Ausführungsform wird der gesamte Complet-Begrenzungsrahmen verwendet und nicht nur einzelne Nachfolger-AABBs in diesem Rechteck, um den Flächenverbrauch zu verringern. Um mehr Fläche zu erhalten, könnte dies pro Nachfolger-AABB geschehen, was zu einem früheren Ausschluss führen könnte, anstatt bis zu dieser Nachfolger-AABB (oder Blatt) hinabsteigen zu müssen.
  • Die Operation funktioniert, indem der AABB-Min-Punkt mit dem AABB-Max-Punkt verglichen wird, und wenn sie gleich sind und das pdCull-Bit gesetzt ist, dann werden alle Nachfolger als Fehlschlag gemeldet.
  • Ein alternativer, weniger präziser, aber weniger flächenintensiver Mechanismus, der in einigen Ausführungsformen verwendet werden kann, nutzt die verlustbehaftete Komprimierung, die im Complet verwendet wird. In einigen Ausführungsformen wird ein Complet-Begrenzungsrahmen durch eine minimale Ecke und x/y/z-Skalen oder Ausdehnungen definiert. Die maximale Ecke des Complet-Begrenzungsrahmens wird berechnet, indem die Ausdehnungen zur minimalen Ecke addiert werden. Wenn alle auf den Ursprung der einzelnen Komponenten bezogenen Exponenten der minimalen Complet-Begrenzungsecke um mehr als 27 größer sind als die x/y/z-Skalen des Complet, dann ist die maximale Begrenzungsecke mit FP32-Mathematik gleich der minimalen Begrenzungsecke. Auf diese Weise kann einfache Integer-Mathematik auf den Exponenten angewendet werden, anstatt die maximale Ecke mit vollen FP-Addierern zu berechnen. Der Wert 27 im Gegensatz zu einem engeren Wert von z. B. 24 wurde gewählt, um Rundungs- und Fehler zu vermeiden, die bei der FP-Addition auftreten können.
  • In beispielhaften Ausführungsformen gibt es einige Einschränkungen in Bezug auf BVH-Knoten, für die PDC verwendet werden kann. PDC sollte nicht in der IAS verwendet werden. Dies liegt daran, dass der Traversierungspfad durch den IAS eine Transformation enthalten kann, bevor die Traversierung die BVH erreicht, und Transformationen sind in der Lage, einen Rahmen zu skalieren. Angesichts der Fähigkeit einer Transformation, einen Begrenzungsrahmen zu skalieren, kann ein Punkt AABB im Weltraum vor der Transformation bis zu einem Nicht-Punkt AABB im Objektraum nach der Transformation skalieren.
  • PDC sollte in einigen Konfigurationen nicht für Complets verwendet werden, die Geometrien enthalten, die von der Einheit für die Baumtraversierung an den Prozessor (z. B. SM) für einen Schnitt-Shader oder ähnliches zurückgesendet werden, selbst wenn es sich bei diesen Geometrien um Dreiecke handelt. Der Schnitt-Shader auf dem SM kann eine höhere Präzision oder einen anderen Schnitt-Algorithmus verwenden, der auch bei Punkt-AABBs zu einer Schnittmenge führen kann. Wenn in einer bestimmten Konfiguration die Schnittpunkt-Shader-Methode bei der zurückgegebenen Geometrie bekanntermaßen konservativ ist (z. B. Schnittpunkttests mit geringer Präzision), könnte PDC verwendet werden.
  • PDC sollte auch nicht verwendet werden, wenn Dreieckssplitting verwendet wird. Bei der Dreieckssplitting werden mehrere kleinere Rahmen um ein einzelnes Dreieck herum erzeugt. Diese Rahmen dürfen sich nicht in demselben Complet befinden. Mehrere Punktentartungs-Rahmen um ein geteiltes Dreieck können zu einem nicht punktentarteten Gesamtrahmen führen.
  • In Anbetracht der oben genannten Nutzungsbeschränkungen kann PDC sowohl für interne Knoten als auch für Blattknoten verwendet werden, jedoch nur für Knoten, die nicht über einem Instanzknoten, einer Dreieckssplitting oder einer Geometrie liegen, die wie oben beschrieben zum SM 232 zurückkehrt.
  • Die TTU 238 enthält Strahlen-Flags, die es einem Strahl ermöglichen, das Verhalten geschnittener Dreiecksbereiche und anderer Geometrie zu ändern und zum SM 232 zurückzukehren, anstatt in der TTU 238 verarbeitet zu werden. In einigen Ausführungsformen kann PDC während der Traversierung von Strahlen deaktiviert werden, bei denen bestimmte Strahlen-Flags gesetzt sind, die Geometrie an den Prozessor zurücksenden können. Wenn das Strahlenflag gesetzt ist, wird PDC für diesen Strahl deaktiviert. Die TTU 238 kann darüber hinaus Ray Ops (siehe US-Patent Nr. 10,867,429 ) verwenden, um dieses Verhalten für jeden Nachfolger zu variieren. Auch wenn das Verhalten unterschiedlich sein kann, wird PDC für den Strahl vollständig deaktiviert, da alle Nachfolger unter dem Complet zu einem anderen Modus gelangen können und daher möglicherweise die Deaktivierung von PDC erfordern.
  • PDC ist ein Mechanismus zur Verringerung der Leistungsklippe bei Geometrien, von denen man konservativ weiß, dass sie nicht getroffen werden, weil sich das Begrenzungsvolumen über dieser Geometrie auf einen Punkt reduziert.
  • 11 zeigt ein Flussdiagramm eines Prozesses 1100 für das Punktentartungs-Culling (PDC) Merkmal. Der Prozess 1100 kann ganz oder teilweise in Hardware-Schaltungen wie beispielsweise der TTU 238 implementiert werden. In beispielhaften Ausführungsformen können eine oder mehrere Operationen 1102-1112 in einer anderen als der gezeigten Reihenfolge oder gar nicht ausgeführt werden, um die bei der Traversierung von Strahlen auftretenden falsch-positiven Strahl-Begrenzungsvolumen-Schnitte zu reduzieren.
  • Der Prozess 1100 kann mit der Operation 1102 beginnen, wenn während einer Strahltraversierung durch den GAS eine für einen Knoten und/oder ein Complet definierte AABB angetroffen wird. In einigen beispielhaften Ausführungsformen kann das AABB ein Begrenzungsvolumen sein, das die gesamte Geometrie unter dem Wurzelknoten des GAS umfasst, auf den nach einem Instanzknoten zugegriffen wird. Beispielsweise kann der oben in Bezug auf Prozess 800 beschriebene hochpräzise Strahl-Begrenzungsvolumen-Schnitttest in Verbindung mit dem Instanzknoten durchgeführt worden sein und zu einem Treffer geführt haben, und der angetroffene Knoten kann die Wurzel des Teilbaums sein, der ein Nachfolger des Instanzknotens ist. Der Prozess 1100 kann an dem angetroffenen Knoten durchgeführt werden, bevor der niedrigpräzise Strahl-Begrenzungsvolumen-Schnitttest (wie der oben in Bezug auf Prozess 800 beschriebene niedrigpräzise Schnitttest 816) für denselben angetroffenen Knoten durchgeführt wird.
  • In Operation 1104 wird bestimmt, ob der AABB in Bezug auf den Ursprung des Strahls zu einem Punkt entartet. Beispielsweise wird der AABB als Punkt betrachtet, wenn der Strahlenursprung jenseits einer vorkonfigurierten Abstandsschwelle liegt. Das heißt, aus der Sicht eines Betrachters am Strahlenursprung kann die gesamte AABB aufgrund des relativen Unterschieds in der Größe der AABB und des Abstands der AABB zum Strahlenursprung im Wesentlichen einem Punkt entsprechen.
  • Nachdem bereits in Operation 1104 festgestellt wurde, dass der AABB zu einem Punkt entartet, wird in Operation 1108 festgestellt, ob die PDC-Funktion für den angetroffenen Knoten aktiviert ist. In einigen Ausführungsformen ist ein „pdCull-Bit“ in der Knoten-Datenstruktur definiert. 12A zeigt eine Complet-Datenstruktur 1200, in der ein „misc“-Feld 1202, das, wie in 12B gezeigt, so konfiguriert ist, dass es das „pdCull“-Bit 1204 für das Complet enthält. In einem beispielhaften Ausführungsform hat das pdCull-Bit den Wert 1, wenn das PDC-Merkmal aktiviert ist. Ist das Merkmal nicht aktiviert, kann das pdCull-Bit undefiniert oder auf 0 gesetzt sein.
  • Wenn in Operation 1108 festgestellt wird, dass das pdCull-Bit gesetzt ist, wird in Operation 1112 der angetroffene Knoten entfernt, und dadurch werden alle Teilbäume, die in dem angetroffenen Knoten wurzeln, aus dem Traversierungspfad entfernt.
  • In einigen Ausführungsformen können jedoch eine oder mehrere weitere Feststellungen (zusätzlich zur Feststellung, dass der Strahlursprung jenseits des Abstandsschwellenwerts liegt und dass die Funktion zum Entfernen entarteter Punkte aktiviert ist) durchgeführt werden, bevor der angetroffene Knoten entfernt wird. Dementsprechend kann vor der Culling-Operation 1112 eine optionale Operation 1110 durchgeführt werden, um festzustellen, ob es sich bei dem angetroffenen Knoten um einen Instanzknoten handelt, ob er einer Dreieckssplitting unterliegt oder ob er eine Geometrie enthält, bei der angezeigt wird, dass sie an den Prozessor gesendet werden soll. Wenn es sich bei dem angetroffenen Knoten um einen Instanzknoten handelt, der einer Dreieckssplitting unterliegt oder eine Geometrie enthält, die an den Prozessor gesendet werden soll, fährt der Prozess 1100 aus den oben beschriebenen Gründen mit der Operation 1106 fort, um die Traversierung fortzusetzen, ohne den angetroffenen Knoten zu entfernen.
  • Wenn bei einer der Operationen 1104, 1108 oder 1110 festgestellt wird, dass der angetroffene Knoten nicht basierend auf der Punktentartungs-Culling-Funktion entfernt werden sollte, fährt der Prozess 1100 mit der Operation 1106 fort, um mit der Traversierung fortzufahren, ohne Punktentartungs-Culling durchzuführen.
  • Strahlen-Clipping
  • Die Erfinder haben das Strahlen-Clipping als eine weitere Technik identifiziert, mit der falsch-positive Ergebnisse, die durch die Aufblähung von Strahlen verursacht werden, reduziert werden können. In beispielhaften Ausführungsformen erfolgt das Strahlen-Clipping durch parametrisches Verschieben des Strahls zu einem neuen Ursprung, der näher an der zu prüfenden Geometrie liegt. Tatsächlich reduziert das Strahlen-Clipping die Aufblähung, die (falls vorhanden) auf den Strahl ausgeübt wird, indem der Ursprung des Strahls parametrisch so verschoben wird, dass er sich in der Nähe des AABB befindet, der auf Schnittpunkte getestet wird. Der Strahl, dessen Ursprung parametrisch zu einem neuen Ursprung verschoben wurde, wird als beschnittener Strahl bezeichnet.
  • In 14A ist beispielsweise der Ursprung 1406 des Strahls 1402 in einem Abstand von AABB 1409 dargestellt, der eine bestimmte Geometrie enthält. Während das obere Bild den Strahl 1402 in unbeschnittener Form zeigt, zeigt das untere Bild den Strahl 1402, der so beschnitten wurde, dass der Strahlursprung von 1406 nach 1408 verschoben wurde, wobei der neue Ursprung 1408 nur einen kleinen Abstand vom AABB 1409 hat. Der beschnittene Strahl, der sich vom neuen Ursprung 1408 aus erstreckt, wird als 1404 dargestellt.
  • Die erste Operation des Slab-Tests, der für Strahl-Begrenzungsrahmen-Schnitttests verwendet wird, ist eine Übersetzung der AABB in den relativen Raum des Strahlursprungs. Das heißt, der Strahlenursprung wird vom Minimum der AABB subtrahiert. Dies ist im Wesentlichen auch der erste Schritt beim Verschieben eines Dreiecks in den Strahlenscharraum für Strahl-Dreieck-Schnitttests. Die für Schnitttests im RCT-Block 610 eingeführte Aufblähung basiert auf dem Abstand zum Strahlenursprung und behandelt den Präzisionsverlust, der auftreten kann, wenn dieser entweder von der AABB oder vom Dreieck entfernt ist. Wenn der angepasste Strahlenursprung in der Nähe der AABB liegt, ist der Betrag der Aufblähung am Schnittpunkt, der proportional zum Abstand zwischen dem Ursprung und der AABB sein kann, wesentlich geringer als wenn der Strahlenursprung nicht angepasst ist und in einem erheblichen Abstand zur AABB bleibt. Wenn der Abstand zwischen dem angepassten Ursprung und dem AABB kleiner als ein konfigurierter Schwellenwert ist, wird in einigen Ausführungsformen keine Aufblähung des Strahls für die Zwecke von des Strahl-Begrenzungsvolumen-Schnitttests und/oder von Strahl-Primitiv-Schnitttests eingeführt
  • Unter Verwendung des t-min-Wertes aus dem TBT-Strahl-Rahmen-Schnitttest kann die TTU in Ausführungsformen, die das Strahlen-Clipping verwenden, den transformierten Strahl zu einem neuen Ursprung am äußersten Rand der Instanz verschieben, indem sie die parametrische Strahlengleichung verwendet: new_origin = transformed_origin + transformed_direction ( tbt_t_min 2 ULP )
    Figure DE102023124837A1_0001
  • Das leicht reduzierte TBT t-min (z. B. tbt_t_min - 2ULP) wird zu einem neuen t-delta, das die parametrische Differenz zwischen dem ursprünglichen Strahlenursprung und dem abgeschnittenen Strahlenursprung darstellt. t-min wird leicht um 2ULP reduziert, um eine Überschneidung am Rand der Box zu ermöglichen, da der Bereichstest für einen Strahldreieckstest ein exklusiver Test ist, d. h.: (t-min, t-max). Bei der Reduzierung wird davon ausgegangen, dass t-min mindestens größer ist als der Betrag (z. B. 2ULP), um den t-min geringfügig reduziert wird, und wenn dies nicht der Fall ist, wird das Clipping nicht durchgeführt. Obwohl die obige Darstellung zeigt, dass t-min um 2ULP reduziert wird, ist dies nur ein Beispiel. Der Grad der Verringerung von t-min kann konfigurierbar sein.
  • Bei Instanzen, die nahe am Strahlenursprung liegen, ist das Abschneiden möglicherweise nicht sinnvoll und kann zu leichten numerischen Unterschieden führen (siehe unten). Um dies zu vermeiden, kann ein Schwellenwert festgelegt werden, ab dem das Clipping erfolgen soll. In beispielhaften Ausführungsformen kann dies auch mit einem Clip-Abstand kombiniert werden, der von den obigen 2 ULP getrennt sein kann.
    Figure DE102023124837A1_0002
  • Der Schwellenwert für den Clip und der Clip-Abstand können statisch gewählt werden, beispielsweise 50.000 bzw. 1,0. Alternativ können sie global programmiert werden, um sie je nach Anwendungsfall zu ändern.
  • Darüber hinaus kann die Knoten-Datenstruktur, beispielsweise eine Instanzknoten-Datenstruktur, auch einen FP32-Clippingschwellenwert und einen Clipping-Abstand pro Instanz speichern. Siehe 14B. Die genaue Position der Felder innerhalb einer Instanzknoten-Datenstruktur 1410 ist nicht wichtig. Der instanzspezifische Schwellenwert 1412 kann verwendet werden, um das Clipping immer zu aktivieren (Clipping-Schwellenwert von 0,0f oder negativ) oder immer zu deaktivieren (Clipping-Schwellenwert von unendlich). Noch wichtiger ist jedoch, dass er verwendet werden kann, um das Clipping anzupassen, wenn eine Instanz drastisch skaliert wird. Ein Clip-Abstand 1414 kann ebenfalls im Instanzknoten 1410 gespeichert werden. Die Werte von Clip-Schwellenwert und Clip-Abstand können auf unterschiedliche Weise ausgedrückt werden. Sie können als FP32-Werte mit voller Genauigkeit, als reine Exponentenwerte (um Speicherplatz zu sparen) oder im Falle des Clip-Abstands als ULP-Deltas anstelle eines vollen Gleitkommawerts ausgedrückt werden.
  • Eine skalierte Instanz kann die Illusion der Entfernung nach der Transformation erzeugen. Stellen Sie sich ein Automodell in Originalgröße vor, das mit allen Details aufwändig komponiert ist. Dann verkleinern Sie dieses Auto auf die Größe eines Spielzeugautos und platzieren es in einer Szene nahe der Kamera. Die Transformation, die das Auto verkleinert, verkürzt den Richtungsvektor, wodurch der Ursprung des transformierten Strahls in der parametrischen Entfernung zurückverlegt wird, um diesen Skalierungseffekt zu erzeugen. Auch wenn der Abstand im Weltraum zur Instanz klein sein mag, kann der effektive Abstand im Objektraum riesig sein. Beispielsweise könnte bei einem Maßstab von 1: 100 für das Automodell das Clipping pro Instanz einen reduzierten Schwellenwert von 500 und einen Abstand von 0,01 haben, um mit dem nicht skalierten statischen Wert von 50.000 und 1 übereinzustimmen. In einigen Ausführungsformen kann eine solche Skalierung auch automatisch durch die Hardwareschaltung der TTU 238 erfolgen, basierend auf der Überprüfung der Transformationsmatrix. In einigen Ausführungsformen kann die Durchführung einer solchen Skalierung in Software-Operationen einige Hardware-Kosten einsparen, insbesondere wenn es um anisotrope/ungleichmäßige Skalierung geht.
  • In einigen Ausführungsformen wird das t-Delta in der Strahlenverwaltungseinheit (RMU) 630 zusammen mit den Strahleninformationen und einem Bit („clipped valid bit“) gespeichert, das anzeigt, dass es sich um einen beschnittenen unteren Strahl handelt. Bei den im unteren Strahlenschlitz gespeicherten t-min und t-max wird das t-Delta entfernt, so dass sie (t-min und t-max) mit dem transformierten beschnittenen Strahl übereinstimmen.
  • In einigen Ausführungsformen können auch andere Techniken als die TBT verwendet werden, um das t-min zu erhalten, das für das Strahlen-Clipping verwendet wird. Alternativ zur Verwendung des t-min aus der TBT kann in einigen Ausführungsformen das t-min verwendet werden, das aus dem Strahl-Complet-Test im RCT-Block 610 berechnet wird. Die RCT-Prüfung ist konservativer als der Strahl-Begrenzungsvolumen-Schnitttest der TBT, so dass der t-min-Wert möglicherweise nicht so genau wie bei der TBT ist. Dennoch funktioniert der t-min-Test, um die Anzahl der falsch-positiven Schnitte zu reduzieren. Es können auch andere Mechanismen verwendet werden, um das t-min zu bestimmen, das für das Strahlen-Clipping verwendet werden soll.
  • Die RMU 630 liefert die Strahleninformationen sowohl an den RTT-Block 620 als auch an den RCT-Block 610 für Schnitttests. Für abgeschnittene Strahlen werden die abgeschnittenen t-min und t-max zusammen mit dem t-delta und dem abgeschnittenen gültigen Bit bereitgestellt.
  • Bei allen Schnittpunkten von AABBs in RTT-Block 620 oder Dreiecken (oder anderen Primitiven) in RTT-Block 620 wird der t-Hit des abgeschnittenen Strahls mit dem abgeschnittenen t-Bereich verglichen.
  • In einigen Ausführungsformen wird für einen AABB-Schnitt, der konfiguriert sind, den t-Hit-Wert (z. B. den Schnittabstand) zu speichern, der nicht beschnittene t-Hit-Wert gespeichert, der durch Addition des t-Deltas zum beschnittenen t-Hit-Wert berechnet wird. Die nachfolgende Filterung in der SMU 640 kann den nicht beschnittenen t-hit-Wert verwenden.
  • Für Dreiecks- (oder andere Primitiv-) Schnittpunkte im RTT-Block 620 werden die abgeschnittenen und nicht abgeschnittenen t-Hit-Werte berechnet und zur Speicherung an die Schnittverwaltungseinheit (IMU) 622 weitergeleitet.
  • Der beschnittene t-Hit wird zur Bestimmung des nächsten Treffers innerhalb dieses GAS verwendet. Es wird ein Bit hinzugefügt, um festzustellen, ob der gespeicherte abgeschnittene Wert gültig ist. IMU-Block 622 speichert dieses Bit pro Strahl, um anzuzeigen, dass der Strahl einen gültigen beschnittenen t-hit gegenüber dem nicht beschnittenen t-hit hat. Dieses Bit wird bei der Transformation oder bei einem Schnittpunkt der obersten Ebene gelöscht. Wenn es nicht gesetzt ist, wird für den Schnittpunkt mit dem abgeschnittenen t das nicht abgeschnittene t verwendet, und wenn es näher liegt, werden sowohl der abgeschnittene als auch der nicht abgeschnittene t-Treffer gespeichert und das Bit für das abgeschnittene t als gültig gesetzt.
  • Bei der Verkürzung des t-max-Werts in RMU 630 kann IMU 622 sowohl den beschnittenen t-hit als auch den unbeschnittenen t-hit liefern. Der beschnittene t-hit wird als t-max für den unteren Strahl gespeichert (z. B. der Strahl, der für die Traversierung des GAS verwendet wird), während der nicht beschnittene t-hit als t-max für den oberen Strahl gespeichert wird (z. B. der Strahl, der für die Traversierung des IAS verwendet wird). Bei der Filterung in SMU 640 kann der nicht beschnittene t-hit verwendet werden.
  • Die Verschiebung des Ursprungs für den abgeschnittenen Strahl kann aufgrund der FP-Präzision zu einigen numerischen Unterschieden führen, was bedeutet, dass der neue Ursprung nicht auf der gleichen Linie liegt. Dies kann zu leichten Störungen im Strahlengang führen. Dies sind die gleichen Unterschiede, die auftreten können, wenn der Ursprung eines Strahls als t-min verwendet wird, anstatt einen anderen Bereich zu definieren. Auch die Transformation selbst ist durch die Fließkommagenauigkeit begrenzt. Aus diesen beiden Gründen werden die numerischen Unterschiede, die durch das Strahlen-Clipping entstehen, als akzeptabel angesehen. Um dennoch eine bessere Genauigkeit zu erreichen, kann die Strahlen-Clipping optional für jede Instanz über den Clipping-Schwellenwert aktiviert werden. Seine genaue Position im Instanzknoten ist nicht wichtig.
  • Ein Vorteil des Strahlen-Clipping ist, dass die anfängliche Subtraktion, um das Dreieck oder die AABB in den relativen Raum des Strahlenursprungs zu bringen, weniger absolute Wertänderungen aufweist und somit mehr Informationen über das Dreieck oder die AABB erhalten bleiben, was zu einer präziseren Schnittprüfung führt, die weniger RCT-Aufblähung erfordert.
  • Obwohl das Strahlen-Clipping in Software durchgeführt werden kann, müssen alle Instanzknoten zurückgegeben werden, um zu bewerten, ob der Strahl beschnitten werden sollte. Solche Rücksprünge können bis zu 50 % Leistung kosten, was mit einer Hardware-Implementierung, wie sie beispielsweise in beispielhaften Ausführungsformen mit Clipping-Schwellenwerten und -Abständen verwendet wird, vollständig vermieden werden kann.
  • 13 zeigt ein Flussdiagramm eines Prozesses 1300 für das Strahlen-Clipping gemäß einigen beispielhaften Ausführungsformen. Der Prozess 1300 kann ganz oder teilweise in Hardware-Schaltungen wie beispielsweise der TTU 238 implementiert werden. In beispielhaften Ausführungsformen können eine oder mehrere Operationen 1302-1310 in einer anderen als der gezeigten Reihenfolge oder gar nicht ausgeführt werden, um die bei der Traversierung von Strahlen auftretenden falsch-positiven Schnitte von Strahl-Begrenzungsvolumen zu reduzieren.
  • Der Prozess 1300 kann während einer Traversierung von Strahlen durchgeführt werden, bevor ein niedrigpräziser Strahl-Begrenzungsvolumen-Schnitttest, wie beispielsweise der oben beschriebene Schnitttest in Operation 816, durchgeführt wird, beispielsweise in RCT-Block 610.
  • Der Prozess 1300 kann mit der Operation 1302 beginnen, bevor der niedrigpräzise Strahl-Begrenzungsvolumen-Schnitttest durchgeführt wird. In Operation 1302 wird der minimale Schnittpunktwert des Strahls auf dem AABB bestimmt, der dem Schnitttest entspricht. In einer beispielhaften Ausführungsform einer Traversierung von Strahlen, bei der das TBT-Merkmal vor der Strahlen-Clipping ausgeführt wird, kann t-min aus dem TBT verfügbar sein. Beispielsweise kann der Prozess 1300 das vom TBT-Prozess 700 gespeicherte t-min in Operation 711 erhalten. Obwohl der Begrenzungsrahmen, die im Prozess 700 verwendet wird, möglicherweise nicht mit der AABB identisch ist, die für den niedrigpräzisen Strahl-Begrenzungsrahmen-Schnitttest verwendet wird, kann die Information über den minimalen Schnittpunkt aus dem Prozess 700 hier verwendet werden, da der Begrenzungsrahmen des Prozesses 700 und die AABB hier den gleichen Satz an Geometrie umfassen. Wenn die TBT t-min nicht verfügbar ist (beispielsweise, wenn der Prozess 800 für das TBT-Merkmal nicht vor dem Prozess 1300 durchgeführt wird), kann die t-min auf andere Weise erhalten werden. In einer beispielhaften Ausführungsform wird das t-min aus dem vom RCT-Block 610 durchgeführten Strahl-Complet-Begrenzungsvolumen-Schnitttest gewonnen. In einigen Ausführungsformen kann anstelle eines AABB beispielsweise auch eine Kugel verwendet werden, um einen t-Wert für das Strahlen-Clipping zu ermitteln. In einigen Ausführungsformen kann das Laden eines t-Deltas aus der Software aktiviert werden, so dass ein Strahl im beschnittenen Raum beginnen kann, ohne dass zuvor eine Transformation durchgeführt werden muss.
  • In Operation 1304 wird auf globale und/oder instanzspezifische Werte für den Clip-Schwellenwert und den Clip-Abstand zugegriffen. Es kann vorkonfigurierte, global (d.h. für alle Knoten) definierte Werte für den Clip-Schwellenwert und den Clip-Abstand geben. In einigen Ausführungsformen enthält das Begrenzungsvolumen einen vorkonfigurierten Clip-Schwellenwert und einen Clip-Abstand. 14B zeigt eine Instanzknoten-Datenstruktur mit vorkonfiguriertem Clip-Schwellenwert 1412 und Clip-Abstand 1414. Wenn für den Clip-Schwellenwert und den Clip-Abstand knotenspezifische Definitionen vorhanden sind, werden die Werte dieser knotenspezifischen Definitionen gegenüber den global definierten Werten berücksichtigt, so dass das Standardverhalten, das auf global definierten Werten für den Clip-Abstand und den Clip-Schwellenwert basieren kann, auf knotenspezifische Weise geändert werden kann.
  • In Operation 1306 wird bestimmt, ob der Strahlenursprung in einem Abstand liegt, der größer ist als der Clip-Schwellenwert. In einigen Ausführungsformen kann dies bestimmt werden, indem geprüft wird, ob der Wert des minimalen Schnittpunkts größer oder gleich dem Clip-Schwellenwert ist. In einigen Ausführungsformen kann der minimale Schnittpunktwert der t-min-Wert sein, der aus dem TBT-Prozess oder dem RCT-Block 610 erhalten wird, wie in Bezug auf Operation 1304 beschrieben.
  • Bei Operation 1308 wird ein neuer Strahlenursprung basierend auf dem Ursprung des transformierten Strahls, der Richtung des transformierten Strahls, dem minimalen Schnittpunktabstand und dem Clipabstand bestimmt. Beispielsweise:
    Figure DE102023124837A1_0003
  • In Operation 1310 wird der Wert des abgeschnittenen Strahlursprungs für die spätere Verwendung in Tests zur Begrenzung des Volumens und zur Bestimmung des Schnittpunkts mit dem Strahl gespeichert. Beispielsweise werden der abgeschnittene t-min und der abgeschnittene t-max, die den Schnittpunkt des AABB durch den Strahl anzeigen, vom RMU-Block 630 gespeichert. In einigen Ausführungsformen werden t-min und t-max zusammen mit dem t-delta (d. h. der Abstandsdifferenz zwischen dem ursprünglichen Ursprung und dem angepassten Ursprung) und optional ein „clipped valid bit Bit“ gespeichert. Das „clipped valid bit“ kann verwendet werden, um der Verarbeitungslogik anzuzeigen, dass die gespeicherten Strahldaten einem beschnittenen Strahl entsprechen, und so die Verarbeitungslogik in die Lage zu versetzen, entweder den beschnittenen Strahl (mit dem angepassten Ursprung) oder den nicht angepassten Strahl (durch Wiederherstellung des Strahls unter Verwendung des t-Deltas) zu verwenden.
  • Beispielhafte GPU-Architektur
  • Es wird nun eine beispielhafte veranschaulichende Architektur beschrieben, in die die effiziente Traversierung von Strahlen mit reduzierten falsch-Positiven integriert ist, die die in dieser Anmeldung offenbartwird . Die folgenden Informationen dienen der Veranschaulichung und sollten in keiner Weise als Einschränkung verstanden werden. Jedes der folgenden Merkmale kann optional mit oder ohne Ausschluss anderer beschriebener Merkmale eingebaut werden.
  • 15 zeigt eine Parallelverarbeitungseinheit (PPU) 1500 gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 1500 ein Multi-Thread-Prozessor, der auf einem oder mehreren integrierten Schaltkreisen implementiert ist. Bei der PPU 1500 handelt es sich um eine latenzversteckte Architektur, die für die parallele Verarbeitung vieler Threads ausgelegt ist. Ein Thread (z. B. ein Ausführungsstrang) ist eine Instanziierung eines Satzes von Anweisungen, die zur Ausführung durch die PPU 1500 konfiguriert sind. In einer Ausführungsform ist die PPU 1500 eine Grafikverarbeitungseinheit (GPU), die so konfiguriert ist, dass sie eine Grafik-Rendering-Pipeline für die Verarbeitung dreidimensionaler (3D) Grafikdaten implementiert, um zweidimensionale (2D) Bilddaten für die Anzeige auf einem Anzeigegerät, wie z. B. einem Flüssigkristallanzeigegerät (LCD), zu erzeugen. In anderen Ausführungsformen kann die PPU 1500 zur Durchführung von Allzweckberechnungen verwendet werden. In einigen anderen Ausführungsformen ist die PPU 1500 so konfiguriert, dass sie große neuronale Netze in Deep-Learning-Anwendungen oder andere Hochleistungsrechneranwendungen implementiert.
  • Eine oder mehrere PPUs 1500 können so konfiguriert werden, dass sie Tausende von High Performance Computing (HPC)-, Rechenzentrums- und Machine Learning-Anwendungen beschleunigen. Die PPU 1500 kann so konfiguriert werden, dass sie zahlreiche Deep-Learning-Systeme und -Anwendungen beschleunigt, darunter autonome Fahrzeugplattformen, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalyse, Molekularsimulationen, Arzneimittelentdeckung, Krankheitsdiagnose, Wettervorhersage, Big-Data-Analyse, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierung, personalisierte Benutzerempfehlungen und Ähnliches.
  • Wie in 15 dargestellt, umfasst die PPU 1500 eine I/O-Einheit 1505, eine Front-End-Einheit 1515, eine Scheduler-Einheit 1520, eine Arbeitsverteilungseinheit 1525, einen Hub 1530, eine Crossbar (Xbar) 1570, einen oder mehrere allgemeine Verarbeitungscluster (GPCs) 1550 und eine oder mehrere Partitionseinheiten 1580. Die PPU 1500 kann mit einem Host-Prozessor oder anderen PPUs 1500 über eine oder mehrere Hochgeschwindigkeits-NVLink 1510-Verbindungen verbunden sein. Die PPU 1500 kann über eine Zwischenverbindung 1502 mit einem Host-Prozessor oder anderen Peripheriegeräten verbunden sein. Die PPU 1500 kann auch mit einem Speicher verbunden sein, der eine Anzahl von Speichergeräten 1504 aufweist. In einer Ausführungsform kann der Speicher 1504 eine Anzahl von dynamischen Direktzugriffsspeichern (DRAM) aufweisen. Die DRAM-Bausteine können als HBM-Subsystem (High-Bandwidth Memory) konfiguriert sein, wobei in jedem Baustein mehrere DRAM-Chips gestapelt sind.
  • Die NVLink 1510-Verbindung ermöglicht die Skalierung von Systemen mit einer oder mehreren PPUs 1500 in Kombination mit einer oder mehreren CPUs, unterstützt die Cache-Kohärenz zwischen den PPUs 1500 und den CPUs sowie das CPU-Mastering. Daten und/oder Befehle können über den NVLink 1510 durch den Hub 1530 zu/von anderen Einheiten der PPU 1500 übertragen werden, wie z. B. einer oder mehreren Copy-Engines, einem Video-Encoder, einem Video-Decoder, einer Energieverwaltungseinheit usw. (nicht explizit dargestellt). Der NVLink 1510 wird in Verbindung mit 18A und 18B ausführlicher beschrieben.
  • Die I/O-Einheit 1505 ist so konfiguriert, dass sie Mitteilungen (z. B. Befehle, Daten usw.) von einem Host-Prozessor (nicht dargestellt) über die Verbindung 1502 sendet und empfängt. Die I/O-Einheit 1505 kann mit dem Host-Prozessor direkt über die Verbindung 1502 oder über ein oder mehrere Zwischengeräte wie eine Speicherbrücke kommunizieren. In einer Ausführungsform kann die I/O-Einheit 1505 mit einem oder mehreren anderen Prozessoren, wie z. B. einer oder mehreren der PPUs 1500, über die Verbindung 1502 kommunizieren. In einer Ausführungsform implementiert die I/O-Einheit 1005 eine Peripheral Component Interconnect Express (PCIe)-Schnittstelle für die Kommunikation über einen PCIe-Bus, und die Verbindungsleitung 1502 ist ein PCIe-Bus. In alternativen Ausführungsformen kann die I/O-Einheit 1505 auch andere Arten bekannter Schnittstellen für die Kommunikation mit externen Geräten implementieren.
  • Die I/O-Einheit 1505 dekodiert die über die Verbindung 1502 empfangenen Pakete. In einer Ausführungsform stellen die Pakete Befehle dar, die so konfiguriert sind, dass sie die PPU 1500 veranlassen, verschiedene Operationen durchzuführen. Die I/O-Einheit 1505 überträgt die dekodierten Befehle an verschiedene andere Einheiten der PPU 1500, wie es die Befehle vorgeben. Beispielsweise können einige Befehle an die Front-End-Einheit 1515 übertragen werden. Andere Befehle können an den Hub 1530 oder andere Einheiten der PPU 1500 übertragen werden, z. B. eine oder mehrere Copy-Engines, einen Video-Encoder, einen Video-Decoder, eine Energieverwaltungseinheit usw. (nicht explizit dargestellt). Mit anderen Worten: Die I/O-Einheit 1505 ist so konfiguriert, dass sie die Kommunikation zwischen den verschiedenen logischen Einheiten der PPU 1500 leitet.
  • In einer Ausführungsform kodiert ein vom Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der der PPU 1500 Arbeitslasten zur Verarbeitung bereitstellt. Eine Arbeitslast kann mehrere Befehle und Daten aufweisen, die von diesen Befehlen verarbeitet werden sollen. Der Puffer ist ein Bereich in einem Speicher, auf den sowohl der Host-Prozessor als auch die PPU 1500 zugreifen (z. B. lesen und schreiben) können. Beispielsweise kann die I/O-Einheit 1505 so konfiguriert sein, dass sie über Speicheranforderungen, die über die Verbindung 1502 übertragen werden, auf den Puffer in einem mit der Verbindung 1502 verbundenen Systemspeicher zugreift. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und überträgt dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 1500. Die Front-End-Einheit 1515 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Frontend-Einheit 1515 verwaltet den einen oder die mehreren Ströme, liest Befehle aus den Strömen und leitet Befehle an die verschiedenen Einheiten der PPU 1500 weiter.
  • Die Front-End-Einheit 1515 ist mit einer Scheduler-Einheit 1520 gekoppelt, die die verschiedenen GPCs 1550 so konfiguriert, dass sie die von einem oder mehreren Streams definierten Aufgaben verarbeiten. Die Scheduler-Einheit 1520 ist so konfiguriert, dass sie Zustandsinformationen in Bezug auf die verschiedenen, von der Scheduler-Einheit 1520 verwalteten Aufgaben verfolgt. Der Zustand kann anzeigen, welchem GPC 1550 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, welche Prioritätsstufe mit der Aufgabe verbunden ist usw. Die Scheduler-Einheit 1520 verwaltet die Ausführung einer Vielzahl von Aufgaben auf dem einen oder mehreren GPCs 1550.
  • Die Scheduler-Einheit 1520 ist mit einer Arbeitsverteilungseinheit 1525 gekoppelt, die so konfiguriert ist, dass sie Aufgaben zur Ausführung auf den GPCs 1550 verteilt. Die Arbeitsverteilungseinheit 1525 kann eine Anzahl geplanter Aufgaben verfolgen, die von der Scheduler-Einheit 1520 empfangen wurden. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 1525 einen Pool ausstehender Aufgaben und einen Pool aktiver Aufgaben für jeden der GPCs 1550. Der Pending Task Pool kann eine Anzahl von Slots (z.B. 32 Slots) aufweisen, die Aufgaben enthalten, die von einem bestimmten GPC 1550 verarbeitet werden sollen. Der aktive Aufgabenpool kann eine Anzahl von Slots (z. B. 4 Slots) für Aufgaben aufweisen, die von den GPCs 1550 aktiv bearbeitet werden. Wenn ein GPC 1550 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem aktiven Aufgabenpool für den GPC 1550 entfernt und eine der anderen Aufgaben aus dem ausstehenden Aufgabenpool wird ausgewählt und für die Ausführung auf dem GPC 1550 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 1550 im Leerlauf war, z. B. während des Wartens auf die Auflösung einer Datenabhängigkeit, kann die aktive Aufgabe aus dem GPC 1550 entfernt und in den Pool der anstehenden Aufgaben zurückgeführt werden, während eine andere Aufgabe aus dem Pool der anstehenden Aufgaben ausgewählt und zur Ausführung auf dem GPC 1550 eingeplant wird.
  • Die Arbeitsverteilungseinheit 1525 kommuniziert mit einem oder mehreren GPCs 1550 über die XBar 1570. Die XBar 1570 ist ein Verbindungsnetzwerk, das viele der Einheiten der PPU 1500 mit anderen Einheiten der PPU 1500 koppelt. Beispielsweise kann die XBar 1570 so konfiguriert sein, dass sie die Arbeitsverteilungseinheit 1525 mit einem bestimmten GPC 1550 koppelt. Obwohl nicht explizit dargestellt, können eine oder mehrere andere Einheiten der PPU 1500 auch über den Hub 1530 mit der XBar 1570 verbunden sein.
  • Die Aufgaben werden von der Scheduler-Einheit 1520 verwaltet und von der Arbeitsverteilungseinheit 1525 an einen GPC 1550 weitergeleitet. Der GPC 1550 ist so konfiguriert, dass er die Aufgabe verarbeitet und Ergebnisse erzeugt. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 1550 verbraucht, über die XBar 1570 an einen anderen GPC 1550 weitergeleitet oder im Speicher 1504 abgelegt werden. Die Ergebnisse können in den Speicher 1504 über die Partitionseinheiten 1580 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 1504 implementieren. Die Ergebnisse können über den NVLink 1510 an eine andere PPU 1504 oder CPU übertragen werden. In einer Ausführungsform umfasst die PPU 1500 eine Anzahl U von Partitionseinheiten 1580, die der Anzahl der mit der PPU 1500 gekoppelten separaten und unterschiedlichen Speichergeräte 1504 entspricht. Eine Partitionseinheit 1580 wird weiter unten in Verbindung mit 16B näher beschrieben.
  • In einer Ausführungsform führt ein Host-Prozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle (API) implementiert, die es einer oder mehreren auf dem Host-Prozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der PPU 1500 zu planen. In einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 1500 ausgeführt, und die PPU 1500 bietet Isolierung, Dienstgüte (QoS) und unabhängige Adressräume für die mehreren Rechenanwendungen. Eine Anwendung kann Anweisungen (z. B. API-Aufrufe) generieren, die den Treiberkern veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 1500 zu generieren. Der Treiberkern gibt Aufgaben an einen oder mehrere Datenströme aus, die von der PPU 1500 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von zusammenhängenden Threads aufweisen, die hier als Warp bezeichnet werden. In einer Ausführungsform weist ein Warp 32 zusammengehörige Threads auf, die parallel ausgeführt werden können.
  • 16A zeigt einen GPC 1050 der PPU 1500 aus 15 gemäß einer Ausführungsform. Wie in 16A gezeigt, umfasst jeder GPC 1550 eine Reihe von Hardwareeinheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform umfasst jeder GPC 1550 einen Pipeline-Manager 1610, eine Pre-Raster Operations Unit (PROP) 1615, eine Raster-Engine 1625, eine Work Distribution Crossbar (WDX) 1680, eine Memory Management Unit (MMU) 1690 und einen oder mehrere Data Processing Clusters (DPCs) 1620. Der GPC 1550 in 16A kann anstelle der in 16A gezeigten Einheiten oder zusätzlich zu diesen auch andere Hardwareeinheiten enthalten.
  • In einer Ausführungsform wird der Betrieb des GPC 1550 durch den Pipeline-Manager 1610 gesteuert. Der Pipeline-Manager 1610 verwaltet die Konfiguration der einen oder mehreren DPCs 1620 zur Verarbeitung der dem GPC 1550 zugewiesenen Aufgaben. In einer Ausführungsform kann der Pipeline-Manager 1610 mindestens einen der einen oder mehreren DPCs 1620 konfigurieren, um mindestens einen Teil einer Grafik-Rendering-Pipeline, eines neuronalen Netzwerks und/oder einer Rechen-Pipeline zu implementieren. In Bezug auf eine Grafik-Rendering-Pipeline kann beispielsweise ein DPC 1620 so konfiguriert sein, dass er ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 1640 ausführt. Der Pipeline-Manager 1610 kann auch so konfiguriert sein, dass er von der Arbeitsverteilungseinheit 1525 empfangene Pakete an die entsprechenden logischen Einheiten innerhalb des GPC 1550 weiterleitet. Beispielsweise können einige Pakete an Hardwareeinheiten mit fester Funktion im PROP 1615 und/oder in der Raster-Engine 1625 weitergeleitet werden, während andere Pakete an die DPCs 1620 zur Verarbeitung durch die Primitive-Engine 1635 oder den SM 1640 weitergeleitet werden können.
  • Die PROP-Einheit 1615 ist so konfiguriert, dass sie die von der Raster-Engine 1625 und den DPCs 1620 erzeugten Daten an eine Raster Operations (ROP)-Einheit weiterleitet, die in Verbindung mit 16B näher beschrieben wird. Die PROP-Einheit 1615 kann auch so konfiguriert sein, dass sie Optimierungen für die Farbmischung durchführt, Pixeldaten organisiert, Adressübersetzungen vornimmt und Ähnliches.
  • Jeder im GPC 1550 enthaltene DPC 1620 umfasst einen M-Pipe-Controller (MPC) 1630, eine Primitive Engine 1635 und einen oder mehrere SMs 1640. Der MPC 1630 steuert den Betrieb des DPC 1620 und leitet die vom Pipeline-Manager 1610 empfangenen Pakete an die entsprechenden Einheiten im DPC 1620 weiter. Beispielsweise können Pakete, die einem Scheitelpunkt zugeordnet sind, an die Primitive Engine 1635 weitergeleitet werden, die so konfiguriert ist, dass sie Scheitelpunktattribute, die dem Scheitelpunkt zugeordnet sind, aus dem Speicher 1504 abruft. Im Gegensatz dazu können Pakete, die einem Shader-Programm zugeordnet sind, an den SM 1640 übermittelt werden.
  • Das SM 1640 weist einen programmierbaren Streaming-Prozessor auf, der so konfiguriert ist, dass er durch eine Anzahl von Threads repräsentierte Aufgaben verarbeiten kann. Jeder SM 1640 hat mehrere Threads und ist so konfiguriert, dass er eine Vielzahl von Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführen kann. In einer Ausführungsform implementiert der SM 1640 eine SIMD-Architektur (Single-Instruction, Multiple-Data), bei der jeder Thread in einer Gruppe von Threads (z. B. ein Warp) so konfiguriert ist, dass er einen anderen Datensatz basierend auf demselben Satz von Anweisungen verarbeitet. Alle Threads in der Gruppe von Threads führen die gleichen Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 1640 eine SIMT-Architektur (Single-Instruction, Multiple Thread), bei der jeder Thread in einer Gruppe von Threads so konfiguriert ist, dass er einen anderen Satz von Daten basierend auf demselben Satz von Anweisungen verarbeitet, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung abweichen dürfen. In einer Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden Warp beibehalten, wodurch die Gleichzeitigkeit zwischen Warps und die serielle Ausführung innerhalb von Warps ermöglicht wird, wenn die Threads innerhalb des Warps divergieren. In einer anderen Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden einzelnen Thread beibehalten, was eine gleiche Gleichzeitigkeit zwischen allen Threads innerhalb und zwischen Warps ermöglicht. Wenn der Ausführungsstatus für jeden einzelnen Thread beibehalten wird, können Threads, die dieselben Anweisungen ausführen, zusammengeführt und parallel ausgeführt werden, um maximale Effizienz zu erzielen. Der SM 1640 wird weiter unten in Verbindung mit 17 näher beschrieben.
  • Die MMU 1690 bildet eine Schnittstelle zwischen dem GPC 1550 und der Partitionseinheit 1580. Die MMU 1690 kann für die Übersetzung virtueller Adressen in physikalische Adressen, den Speicherschutz und die Arbitrierung von Speicheranforderungen sorgen. In einer Ausführungsform bietet die MMU 1690 einen oder mehrere Übersetzungs-Lookaside-Puffer (TLBs) für die Übersetzung virtueller Adressen in physische Adressen im Speicher 1504.
  • 16B zeigt eine Speicherpartitionseinheit 1580 der PPU 1500 aus 15 gemäß einer Ausführungsform. Wie in 16B gezeigt, umfasst die Speicherpartitionierungseinheit 1580 eine Raster Operations (ROP)-Einheit 1650, einen Level Two (L2)-Cache 1660 und eine Speicherschnittstelle 1670. Die Speicherschnittstelle 1670 ist mit dem Speicher 1504 gekoppelt. Die Speicherschnittstelle 1670 kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder ähnliches für die Hochgeschwindigkeitsdatenübertragung implementieren. In einer Ausführungsform enthält die PPU 1500 U Speicherschnittstellen 1670, eine Speicherschnittstelle 1670 pro Paar von Partitionseinheiten 1580, wobei jedes Paar von Partitionseinheiten 1580 mit einem entsprechenden Speichergerät 1504 verbunden ist. Beispielsweise kann die PPU 1500 mit bis zu Y Speichervorrichtungen 1504 verbunden sein, wie z. B. Speicherstapel mit hoher Bandbreite oder Grafikspeicher mit doppelter Datenrate, Version 5, synchroner dynamischer Direktzugriffsspeicher oder andere Arten von dauerhaftem Speicher.
  • In einer Ausführungsform implementiert die Speicherschnittstelle 1670 eine HBM2-Speicherschnittstelle und Y ist gleich halb U. In einer Ausführungsform befinden sich die HBM2-Speicherstapel auf demselben physikalischen Gehäuse wie die PPU 1600, was im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen erhebliche Energie- und Flächeneinsparungen ermöglicht. In einer Ausführungsform umfasst jeder HBM2-Stapel vier Speicherchips und Y ist gleich 4, wobei der HBM2-Stapel zwei 128-Bit-Kanäle pro Chip für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit umfasst.
  • In einer Ausführungsform unterstützt der Speicher 1504 den Single-Error Correcting Double-Error Detecting (SECDED) Error Correction Code (ECC) zum Schutz der Daten. ECC bietet eine höhere Zuverlässigkeit für Datenverarbeitungsanwendungen, die empfindlich auf Datenbeschädigungen reagieren. Zuverlässigkeit ist besonders wichtig in großen Cluster-Computing-Umgebungen, in denen PPUs 1500 sehr große Datensätze verarbeiten und/oder Anwendungen über längere Zeiträume ausführen.
  • In einer Ausführungsform implementiert die PPU 1500 eine mehrstufige Speicherhierarchie. In einer Ausführungsform unterstützt die Speicherpartitionierungseinheit 1580 einen einheitlichen Speicher, um einen einzigen einheitlichen virtuellen Adressraum für den Speicher der CPU und der PPU 1500 bereitzustellen und die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen zu ermöglichen. In einer Ausführungsform wird die Häufigkeit von Zugriffen einer PPU 1500 auf Speicher auf anderen Prozessoren verfolgt, um sicherzustellen, dass Speicherseiten in den physikalischen Speicher der PPU 1500 verschoben werden, die häufiger auf die Seiten zugreift. In einer Ausführungsform unterstützt der NVLink 1510 Adressübersetzungsdienste, die es der PPU 1500 ermöglichen, direkt auf die Seitentabellen einer CPU zuzugreifen und der PPU 1500 vollen Zugriff auf den CPU-Speicher zu gewähren.
  • In einer Ausführungsform übertragen die Kopiermodule Daten zwischen mehreren PPUs 1000 oder zwischen PPUs 1500 und CPUs. Die Kopiermodule können Fehlseiten für Adressen erzeugen, die nicht in den Seitentabellen abgebildet sind. Die Speicherpartitionierungseinheit 1580 kann dann die Seitenfehler bearbeiten und die Adressen in der Seitentabelle abbilden, woraufhin das Kopiermodul die Übertragung durchführen kann. In einem herkömmlichen System wird der Speicher für mehrere Kopiervorgänge zwischen mehreren Prozessoren gepinnt (z. B. nicht auslagerbar), wodurch der verfügbare Speicher erheblich reduziert wird. Mit Hardware Page Faulting können Adressen an die Copy-Engines weitergegeben werden, ohne dass man sich Gedanken darüber machen muss, ob die Speicherseiten resident sind, und der Kopiervorgang ist transparent.
  • Daten aus dem Speicher 1504 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 1580 abgerufen und im L2-Cache 1660 gespeichert werden, der sich auf dem Chip befindet und von den verschiedenen GPCs 1550 gemeinsam genutzt wird. Wie dargestellt, enthält jede Speicherpartitionseinheit 1580 einen Teil des L2-Cache 1660, der einem entsprechenden Speichergerät 1504 zugeordnet ist. Caches der unteren Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 1550 implementiert werden. Beispielsweise kann jeder der SMs 1640 einen Cache der Ebene eins (L1) implementieren. Der L1-Cache ist ein privater Speicher, der einem bestimmten SM 1640 zugeordnet ist. Daten aus dem L2-Cache 1660 können abgerufen und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der SMs 1640 gespeichert werden. Der L2-Cache 1660 ist mit der Speicherschnittstelle 1670 und der XBar 1570 gekoppelt.
  • Die ROP-Einheit 1650 führt Grafikrasteroperationen durch, die sich auf die Pixelfarbe beziehen, wie z. B. Farbkomprimierung, Pixelüberblendung und ähnliches. Die ROP-Einheit 1650 führt in Verbindung mit der Raster-Engine 1625 auch eine Tiefenprüfung durch, wobei sie eine Tiefe für eine einem Pixelfragment zugeordnete Abtaststelle von der Culling-Engine der Raster-Engine 1625 empfängt. Die Tiefe wird mit einer entsprechenden Tiefe in einem Tiefenpuffer für eine dem Fragment zugeordnete Abtaststelle verglichen. Wenn das Fragment die Tiefenprüfung für den Probenort besteht, aktualisiert die ROP-Einheit 1650 den Tiefenpuffer und überträgt das Ergebnis der Tiefenprüfung an die Raster-Engine 1625. Die Anzahl der Partitionseinheiten 1580 kann sich von der Anzahl der GPCs 1550 unterscheiden, so dass jede ROP-Einheit 1650 mit jedem der GPCs 1550 gekoppelt sein kann. Die ROP-Einheit 1650 verfolgt die von den verschiedenen GPCs 1550 empfangenen Pakete und bestimmt, an welchen GPC 1550 ein von der ROP-Einheit 1650 erzeugtes Ergebnis über die Xbar 1570 weitergeleitet wird. Obwohl die ROP-Einheit 1650 in 16B in der Speicherpartitionseinheit 1580 enthalten ist, kann sie in anderen Ausführungsformen auch außerhalb der Speicherpartitionseinheit 1580 liegen. Beispielsweise kann die ROP-Einheit 1650 im GPC 1550 oder einer anderen Einheit untergebracht sein.
  • 17 zeigt den Streaming-Multiprozessor 1640 aus 16A gemäß einer Ausführungsform. Wie in 17 gezeigt, umfasst der SM 1640 einen Befehls-Cache 1705, eine oder mehrere Scheduler-Einheiten 1710, eine Registerdatei 1720, einen oder mehrere Verarbeitungskerne 1750, eine oder mehrere Spezialfunktionseinheiten (SFUs) 1752, eine oder mehrere Lade-/Speichereinheiten (LSUs) 1754, ein Verbindungsnetzwerk 1780, einen gemeinsamen Speicher/L1-Cache 1770.
  • Wie oben beschrieben, weist die Arbeitsverteilungseinheit 1525 Aufgaben zur Ausführung auf den GPCs 1550 der PPU 1500 zu. Die Aufgaben werden einem bestimmten DPC 1620 innerhalb eines GPC 1550 zugewiesen, und wenn die Aufgabe mit einem Shader-Programm verbunden ist, kann die Aufgabe einem SM 1640 zugewiesen werden. Die Scheduler-Einheit 1710 empfängt die Aufgaben von der Arbeitsverteilungseinheit 1525 und verwaltet die Befehlsplanung für einen oder mehrere Thread-Blöcke, die dem SM 1640 zugewiesen sind. Die Scheduler-Einheit 1710 plant Thread-Blöcke für die Ausführung als Warps von parallelen Threads, wobei jeder Thread-Block aus mindestens einem Warp besteht. In einer Ausführungsform weist jeder Warp 32 Threads auf. Die Scheduler-Einheit 1710 kann eine Vielzahl verschiedener Thread-Blöcke verwalten, indem sie die verschiedenen Thread-Blöcke verschiedenen Warps zuordnet und dann während jedes Taktzyklus Anweisungen aus der Vielzahl verschiedener kooperativer Gruppen an die verschiedenen Funktionseinheiten (z. B. Kerne 1750, SFUs 1752 und LSUs 1754) verteilt.
  • Eine Dispatch-Einheit 1715 ist so konfiguriert, dass sie Befehle an eine oder mehrere der Funktionseinheiten übermittelt. In der vorliegenden Ausführungsform umfasst die Scheduler-Einheit 1710 zwei Dispatch-Einheiten 1715, die es ermöglichen, dass zwei verschiedene Befehle aus demselben Warp während jedes Taktzyklus versandt werden. In alternativen Ausführungsformen kann jede Scheduler-Einheit 1710 eine einzige Dispatch-Einheit 1715 oder zusätzliche Dispatch-Einheiten 1715 enthalten.
  • Jedes SM 1640 enthält eine Registerdatei 1720, die einen Satz von Registern für die Funktionseinheiten des SM 1640 bereitstellt. In einer Ausführungsform wird die Registerdatei 1720 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein eigener Teil der Registerdatei 1720 zugewiesen wird. In einer anderen Ausführungsform wird die Registerdatei 1720 zwischen den verschiedenen Kettfäden aufgeteilt, die vom SM 1640 ausgeführt werden. Die Registerdatei 1720 dient der temporären Speicherung von Operanden, die mit den Datenpfaden der Funktionseinheiten verbunden sind.
  • Jedes SM 1640 weist mehrere Rechenkerne 1750 auf. In einer Ausführungsform umfasst der SM 1640 eine große Anzahl (z. B. 128 usw.) verschiedener Rechenkerne 1750. Jeder Kern 1750 kann eine Voll-Pipeline-, Einzelpräzisions-, Doppelpräzisions- und/oder gemischte Präzisionsverarbeitungseinheit enthalten, die eine Gleitkomma-Arithmetik-Logikeinheit und eine Ganzzahl-Arithmetik-Logikeinheit umfasst. In einer Ausführungsform implementieren die arithmetischen Gleitkomma-Logikeinheiten den Standard IEEE 754-2008 für Gleitkomma-Arithmetik.
  • Tensorkerne sind für die Durchführung von Matrixoperationen konfiguriert, und in einer Ausführungsform sind ein oder mehrere Tensorkerne in den Kernen 1750 enthalten. Insbesondere sind die Tensorkerne so konfiguriert, dass sie Deep-Learning-Matrixarithmetik durchführen, wie z. B. Faltungsoperationen für das Training neuronaler Netze und Inferenzierung. In einer Ausführungsform arbeitet jeder Tensorkern mit einer 4x4-Matrix und führt eine Matrixmultiplikation und Akkumulationsoperation D=AxB+C durch, wobei A, B, C und D 4x4-Matrizen sind.
  • In einer Ausführungsform sind die Matrixmultiplikationseingänge A und B 16-Bit-Gleitkommamatrizen, während die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkommamatrizen sein können. Tensor-Kerne arbeiten mit 16-Bit-Gleitkomma-Eingangsdaten und 32-Bit-Gleitkomma-Akkumulation. Die 16-Bit-Gleitkommamultiplikation erfordert 64 Operationen und führt zu einem Produkt mit voller Genauigkeit, das dann durch 32-Bit-Gleitkommaaddition mit den anderen Zwischenprodukten zu einer 4x4x4-Matrixmultiplikation akkumuliert wird. In der Praxis werden Tensor-Cores verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. Eine API, wie z.B. die CUDA C++ API, stellt spezialisierte Matrixlade-, Matrixmultiplikations- und -akkumulations- und Matrixspeicheroperationen bereit, um Tensor-Cores von einem CUDA-C++ Programm aus effizient zu nutzen. Auf der CUDA-Ebene geht die Schnittstelle auf Warp-Ebene von Matrizen der Größe 16x16 aus, die sich über alle 32 Threads des Warps erstrecken.
  • In einigen Ausführungsformen ist die Transpositions-Hardware in den Verarbeitungskernen 1750 oder einer anderen Funktionseinheit (z. B. SFUs 1752 oder LSUs 1754) enthalten und so konfiguriert, dass sie von Diagonalen gespeicherte Matrixdaten erzeugt und/oder die ursprüngliche Matrix und/oder transponierte Matrix aus den von Diagonalen gespeicherten Matrixdaten erzeugt. Die Transpositionshardware kann innerhalb des gemeinsamen Speichers 1770 für den Ladepfad der Registerdatei 1720 des SM 1640 bereitgestellt werden.
  • In einem Beispiel können die von Diagonalen gespeicherten Matrixdaten aus dem DRAM abgerufen und im gemeinsamen Speicher 1770 gespeichert werden. Bei der Verarbeitung des Befehls zur Verarbeitung der in den Diagonalen gespeicherten Matrixdaten kann Transpositionshardware, die im Pfad zwischen dem gemeinsamen Speicher 1770 und der Registerdatei 1720 angeordnet ist, die ursprüngliche Matrix, die transponierte Matrix, die verdichtete ursprüngliche Matrix und/oder die verdichtete transponierte Matrix bereitstellen. Bis zur allerletzten Speicherung vor dem Befehl können die von den Diagonalen gespeicherten Einzelmatrixdaten beibehalten werden, und der durch den Befehl bezeichnete Matrixtyp wird nach Bedarf in der Registerdatei 1720 erzeugt.
  • Jedes SM 1640 weist außerdem mehrere SFUs 1752 auf, die spezielle Funktionen ausführen (z. B. Attributauswertung, reziproke Quadratwurzel und Ähnliches). In einer Ausführungsform können die SFUs 1752 eine Einheit zur Traversierung von Bäumen (z. B. TTU 1643) enthalten, die so konfiguriert ist, dass sie eine hierarchische Baumdatenstruktur durchläuft. In einer Ausführungsform können die SFUs 1752 eine Textureinheit (z. B. Textureinheit 1642) enthalten, die so konfiguriert ist, dass sie Filteroperationen für die Texturkarte durchführt. In einer Ausführungsform sind die Textureinheiten so konfiguriert, dass sie Texturkarten (z. B. ein 2D-Array von Texeln) aus dem Speicher 1504 laden und die Texturkarten abtasten, um abgetastete Texturwerte zur Verwendung in Shader-Programmen zu erzeugen, die von der SM 1640 ausgeführt werden. In einer Ausführungsform werden die Texturkarten im gemeinsamen Speicher/L1-Cache 1670 gespeichert. Die Textureinheiten implementieren Texturoperationen, wie z. B. Filteroperationen unter Verwendung von Mip-Maps (z. B. Texturkarten mit unterschiedlichen Detailstufen). In einer Ausführungsform umfasst jeder SM 1640 zwei Textureinheiten.
  • Jedes SM 1640 weist außerdem mehrere LSUs 1754 auf, die Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher/L1-Cache 1770 und der Registerdatei 1720 durchführen. Jedes SM 1640 umfasst ein Verbindungsnetzwerk 1780, das jede der Funktionseinheiten mit der Registerdatei 1720 und die LSU 1754 mit der Registerdatei 1720 und dem gemeinsamen Speicher/L1-Cache 1770 verbindet. In einer Ausführungsform ist das Verbindungsnetzwerk 1780 eine Kreuzschiene, die so konfiguriert werden kann, dass sie jede der Funktionseinheiten mit jedem der Register in der Registerdatei 1720 verbindet und die LSUs 1754 mit der Registerdatei 1720 und Speicherplätzen im gemeinsamen Speicher/L1-Cache 1770 verbindet.
  • Der gemeinsam genutzte Speicher/L1-Cache 1770 ist ein Array von On-Chip-Speicher, der die Datenspeicherung und Kommunikation zwischen dem SM 1640 und der primitiven Engine 1635 sowie zwischen Threads im SM 1640 ermöglicht. In einer Ausführungsform weist der gemeinsame Speicher/L1-Cache 1770 eine Speicherkapazität von 128 KB auf und befindet sich auf dem Weg vom SM 1640 zur Partitionseinheit 1580. Der gemeinsame Speicher/L1-Cache 1770 kann zum Zwischenspeichern von Lese- und Schreibvorgängen verwendet werden. Der gemeinsame Speicher/L1-Cache 1770, der L2-Cache 1660 und der Speicher 1504 sind Backing-Stores.
  • Die Kombination von Datencache- und Shared-Memory-Funktionen in einem einzigen Speicherblock bietet die beste Gesamtleistung für beide Arten von Speicherzugriffen. Die Kapazität kann von Programmen, die den gemeinsamen Speicher nicht nutzen, als Cache verwendet werden. Wenn beispielsweise der gemeinsame Speicher so konfiguriert ist, dass die Hälfte der Kapazität genutzt wird, können Textur- und Lade-/Speicheroperationen die verbleibende Kapazität nutzen. Durch die Integration in den gemeinsam genutzten Speicher/L1-Cache 1770 kann der gemeinsam genutzte Speicher/L1-Cache 1770 als durchsatzstarke Leitung für Streaming-Daten fungieren und gleichzeitig den Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und niedriger Latenz ermöglichen.
  • Im Zusammenhang mit dieser Offenlegung bedeutet ein SM oder „Streaming-Multiprozessor“ einen Prozessor, wie er in USP 7,447,873 an Nordquist beschrieben ist, einschließlich Verbesserungen und Weiterentwicklungen davon, und wie er beispielsweise in vielen Generationen von NVIDIA-GPUs implementiert ist. Beispielsweise kann ein SM eine Vielzahl von Verarbeitungs-Engines oder Kernen aufweisen, die so konfiguriert sind, dass sie gleichzeitig eine Vielzahl von Threads ausführen, die in einer Vielzahl von SIMD-Gruppen (single-instruction, multiple-data) (z. B. Warps) angeordnet sind, wobei jeder der Threads in einer gleichen SIMD-Gruppe ein gleiches Datenverarbeitungsprogramm ausführt, das eine Folge von Befehlen für ein unterschiedliches Eingabeobjekt aufweist, und verschiedene Threads in der gleichen SIMD-Gruppe unter Verwendung verschiedener Verarbeitungs-Engines oder Kerne ausgeführt werden. Ein SM kann typischerweise auch Folgendes bereitstellen: (a) eine lokale Registerdatei mit mehreren Lanes, wobei jede Verarbeitungs-Engine oder jeder Kern so konfiguriert ist, dass sie/er auf eine andere Teilmenge der Lanes zugreift; und eine Befehlsausgabelogik, die so konfiguriert ist, dass sie eine der SIMD-Gruppen auswählt und einen der Befehle desselben Datenverarbeitungsprogramms an jede der mehreren Verarbeitungs-Engines parallel ausgibt, wobei jede Verarbeitungs-Engine denselben Befehl parallel zu jeder anderen Verarbeitungs-Engine unter Verwendung der ihr zugänglichen Teilmenge der Lanes der lokalen Registerdatei ausführt. Ein SM umfasst typischerweise außerdem eine Kernschnittstellenlogik, die so konfiguriert ist, dass sie die Ausführung einer oder mehrerer SIMD-Gruppen einleitet. Wie in den Fig. gezeigt, wurden solche SMs so konstruiert, dass sie einen schnellen lokalen gemeinsamen Speicher bereitstellen, der die gemeinsame Nutzung/Wiederverwendung von Daten und die Synchronisation zwischen allen Threads eines CTA ermöglicht, der auf dem SM ausgeführt wird.
  • Bei der Konfiguration für allgemeine parallele Berechnungen kann im Vergleich zur Grafikverarbeitung eine einfachere Konfiguration verwendet werden. Insbesondere werden die in 16A gezeigten Grafikverarbeitungseinheiten mit festen Funktionen umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In der Konfiguration für allgemeine parallele Berechnungen weist die Arbeitsverteilungseinheit 1525 Blöcke von Threads zu und verteilt sie direkt an die DPCs 1620. Die Threads in einem Block führen dasselbe Programm aus, wobei eine eindeutige Thread-ID in der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 1640 zur Ausführung des Programms und zur Durchführung von Berechnungen, der gemeinsame Speicher/L1-Cache 1770 zur Kommunikation zwischen den Threads und die LSU 1754 zum Lesen und Schreiben des globalen Speichers über den gemeinsamen Speicher/L1-Cache 1770 und die Speicherpartitionseinheit 1580 verwendet werden. Wenn die SM 1640 für allgemeine parallele Berechnungen konfiguriert ist, kann sie auch Befehle schreiben, die die Scheduler-Einheit 1520 verwenden kann, um neue Arbeiten auf den DPCs 1620 zu starten.
  • Die PPU 1500 kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einem drahtlosen Handheld-Gerät), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einem Fahrzeug, einem Head-Mounted-Display, einem elektronischen Handheld-Gerät und dergleichen enthalten sein. In einer Ausführungsform ist die PPU 1500 auf einem einzigen Halbleitersubstrat untergebracht. In einer anderen Ausführungsform ist die PPU 1500 in einem System-on-a-Chip (SoC) zusammen mit einer oder mehreren anderen Vorrichtungen wie zusätzlichen PPUs 1500, dem Speicher 1504, einer RISC-CPU (Reduced Instruction Set Computer), einer MMU (Memory Management Unit), einem DAC (Digital-Analog-Wandler) und dergleichen enthalten.
  • In einer Ausführungsform kann die PPU 1500 in einer Grafikkarte enthalten sein, die ein oder mehrere Speichergeräte 1504 enthält. Die Grafikkarte kann so konfiguriert sein, dass sie mit einem PCIe-Steckplatz auf einer Hauptplatine eines Desktop-Computers verbunden werden kann. In einer anderen Ausführungsform kann die PPU 1500 eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein Parallelprozessor sein, der in den Chipsatz der Hauptplatine integriert ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Branchen eingesetzt, da die Entwickler mehr Parallelität in Anwendungen wie der künstlichen Intelligenz aufdecken und ausnutzen. Leistungsstarke GPU-beschleunigte Systeme mit zehn bis mehreren tausend Rechenknoten werden in Rechenzentren, Forschungseinrichtungen und Supercomputern eingesetzt, um immer größere Probleme zu lösen. Da die Anzahl der Verarbeitungsgeräte innerhalb der Hochleistungssysteme steigt, müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 18A ist ein konzeptionelles Diagramm eines Verarbeitungssystems 1800, das unter Verwendung der PPU 1500 aus 15 gemäß einer Ausführungsform implementiert ist. Das beispielhafte System 1800 kann so konfiguriert werden, dass es die in dieser Anwendung offenbaren Verfahren implementiert. Das Verarbeitungssystem 1800 umfasst eine CPU 1830, einen Schalter 1855 und mehrere PPUs 1500 sowie entsprechende Speicher 1504. Der NVLink 1510 stellt Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 1500 bereit. Obwohl in 18A eine bestimmte Anzahl von NVLink 1510- und Interconnect 1502-Verbindungen dargestellt ist, kann die Anzahl der Verbindungen zu jeder PPU 1500 und der CPU 1830 variieren. Der Schalter 1855 bildet die Schnittstelle zwischen der Verbindungsleitung 1502 und der CPU 1830. Die PPUs 1500, die Speicher 1504 und die NVLinks 1510 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 1825 zu bilden. In einer Ausführungsform unterstützt der Schalter 1855 zwei oder mehr Protokolle, um eine Schnittstelle zwischen verschiedenen Verbindungen und/oder Links zu bilden.
  • In einer anderen Ausführungsform (nicht dargestellt) stellt der NVLink 1510 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 1000 und der CPU 1830 bereit, und der Schalter 1855 bildet die Schnittstelle zwischen der Zwischenverbindung 1502 und jeder der PPUs 1500. Die PPUs 1500, die Speicher 1504 und die Verbindung 1502 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 1825 zu bilden. In einer weiteren Ausführungsform (nicht dargestellt) stellt die Zwischenverbindung 1502 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 1500 und der CPU 1830 bereit, und der Schalter 1855 bildet eine Schnittstelle zwischen jeder der PPUs 1000 unter Verwendung des NVLink 1510, um eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 1500 bereitzustellen. In einer anderen Ausführungsform (nicht dargestellt) stellt der NVLink 1510 eine oder mehrere Hochgeschwindigkeits- Kommunikationsverbindungen zwischen den PPUs 1500 und der CPU 1830 über den Switch 1855 bereit. In einer weiteren Ausführungsform (nicht dargestellt) stellt die Verbindung 1502 eine oder mehrere Kommunikationsverbindungen zwischen den einzelnen PPUs 1500 direkt her. Eine oder mehrere der NVLink 1510-Hochgeschwindigkeits-Kommunikationsverbindungen können als physische NVLink-Verbindung oder entweder als On-Chip- oder On-Die-Verbindung implementiert werden, die dasselbe Protokoll wie der NVLink 1510 verwendet.
  • Im Zusammenhang mit der vorliegenden Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche integrierte Schaltung auf Halbleiterbasis beziehen, die auf einem Die oder Chip hergestellt wird. Der Begriff „Einzelhalbleiterplattform“ kann sich auch auf Multichip-Module mit erhöhter Konnektivität beziehen, die den Betrieb auf dem Chip simulieren und wesentliche Verbesserungen gegenüber einer herkömmlichen Busimplementierung bieten. Natürlich können die verschiedenen Schaltungen oder Geräte auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen untergebracht werden, je nach den Wünschen des Benutzers. Alternativ kann das Parallelverarbeitungsmodul 1825 als Leiterplattensubstrat implementiert werden und jede der PPUs 1500 und/oder Speicher 1504 können gehäuste Geräte sein. In einer Ausführungsform befinden sich die CPU 1830, der Schalter 1855 und das Parallelverarbeitungsmodul 1825 auf einer einzigen Halbleiterplattform.
  • In einer Ausführungsform beträgt die Signalisierungsrate jedes NVLink 1510 20 bis 25 Gigabit/Sekunde, und jede PPU 1500 umfasst sechs NVLink 1510-Schnittstellen (wie in 18A dargestellt, sind fünf NVLink 1510-Schnittstellen für jede PPU 1500 enthalten). Jeder NVLink 1510 bietet eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jeder Richtung, wobei sechs Links 1500 Gigabyte/Sekunde liefern. Die NVLinks 1510 können ausschließlich für die PPU-zu-PPU-Kommunikation (siehe 18A) oder für eine Kombination aus PPU-zu-PPU und PPU-zu-CPU verwendet werden, wenn die CPU 1830 ebenfalls eine oder mehrere NVLink 1510-Schnittstellen enthält.
  • In einer Ausführungsform ermöglicht der NVLink 1510 einen direkten Lade-/Speicher-/Atomzugriff von der CPU 1830 auf den Speicher 1504 jeder PPU 1500. In einer Ausführungsform unterstützt der NVLink 1510 Kohärenzoperationen, so dass aus den Speichern 1504 gelesene Daten in der Cache-Hierarchie der CPU 1830 gespeichert werden können, was die Cache-Zugriffslatenz für die CPU 1830 verringert. In einer Ausführungsform umfasst der NVLink 1510 Unterstützung für Adressübersetzungsdienste (ATS), wodurch die PPU 1500 direkt auf Seitentabellen innerhalb der CPU 1830 zugreifen kann. Einer oder mehrere der NVLinks 1510 können auch so konfiguriert werden, dass sie in einem Stromsparmodus arbeiten.
  • 18B veranschaulicht ein beispielhaftes System 1865, in dem die verschiedenen Architekturen und/oder Funktionen der verschiedenen vorherigen Ausführungsformen implementiert werden können. Das beispielhafte System 1865 kann so konfiguriert sein, dass es die in dieser Anwendung offenbartes Verfahren implementiert.
  • Wie gezeigt, ist ein System 1865 mit mindestens einer zentralen Verarbeitungseinheit 1830 vorgesehen, die mit einem Kommunikationsbus 1875 verbunden ist. Der Kommunikationsbus 1875 kann unter Verwendung eines beliebigen geeigneten Protokolls implementiert werden, z. B. PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport oder eines anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokolls bzw. anderer Protokolle. Das System 1865 umfasst auch einen Hauptspeicher 1840. Steuerlogik (Software) und Daten werden im Hauptspeicher 1840 gespeichert, der die Form eines Direktzugriffsspeichers (RAM) haben kann.
  • Das System 1865 umfasst auch Eingabevorrichtungen 1860, das Parallelverarbeitungssystem 1825 und Anzeigevorrichtungen 1845, z. B. eine herkömmliche Kathodenstrahlröhre (CRT), eine Flüssigkristallanzeige (LCD), eine Leuchtdiode (LED), ein Plasmadisplay oder Ähnliches. Benutzereingaben können von den Eingabevorrichtungen 1860 empfangen werden, z. B. Tastatur, Maus, Touchpad, Mikrofon und dergleichen. Jedes der vorgenannten Module und/oder Geräte kann sogar auf einer einzigen Halbleiterplattform angeordnet sein, um das System 1865 zu bilden. Alternativ können die verschiedenen Module auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen angeordnet sein, je nach den Wünschen des Benutzers.
  • Außerdem kann das System 1865 über eine Netzwerkschnittstelle 1835 zu Kommunikationszwecken mit einem Netzwerk gekoppelt werden (z. B. einem Telekommunikationsnetzwerk, einem lokalen Netzwerk (LAN), einem drahtlosen Netzwerk, einem Weitverkehrsnetzwerk (WAN) wie dem Internet, einem Peer-to-Peer-Netzwerk, einem Kabelnetzwerk oder ähnlichem).
  • Das System 1865 kann auch einen Sekundärspeicher enthalten (nicht dargestellt). Der Sekundärspeicher umfasst beispielsweise ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein DVD-Laufwerk (Digital Versatile Disk), ein Aufzeichnungsgerät oder einen USB-Flash-Speicher (Universal Serial Bus) darstellt. Das Wechselspeicherlaufwerk liest von einem Wechselspeicher und/oder schreibt auf einen Wechselspeicher in bekannter Weise.
  • Computerprogramme oder logische Algorithmen zur Computersteuerung können im Hauptspeicher 1840 und/oder im Sekundärspeicher gespeichert werden. Wenn solche Computerprogramme ausgeführt werden, kann das System 1865 verschiedene Funktionen ausführen. Der Speicher 1840, der Speicher und/oder jeder andere Speicher sind mögliche Beispiele für computerlesbare Medien.
  • Die Architektur und/oder Funktionalität der verschiedenen vorangegangenen Fig. kann im Rahmen eines allgemeinen Computersystems, eines Leiterplattensystems, eines für Unterhaltungszwecke bestimmten Spielkonsolensystems, eines anwendungsspezifischen Systems und/oder eines beliebigen anderen gewünschten Systems implementiert werden. Beispielsweise kann das System 1865 die Form eines Desktop-Computers, eines Laptops, eines Tablet-Computers, eines Servers, eines Supercomputers, eines Smartphones (z. B. eines drahtlosen Handgeräts), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, eines Head-Mounted-Displays, eines elektronischen Handgeräts, eines Mobiltelefons, eines Fernsehgeräts, einer Workstation, einer Spielkonsole, eines eingebetteten Systems und/oder jeder anderen Art von Logik haben.
  • Ein Anwendungsprogramm kann über eine Anwendung implementiert werden, die von einem Host-Prozessor, wie z. B. einer CPU, ausgeführt wird. In einer Ausführungsform kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, die verschiedene Funktionen definiert, die von dem Anwendungsprogramm genutzt werden können, um grafische Daten für die Anzeige zu erzeugen. Der Gerätetreiber ist ein Softwareprogramm, das eine Vielzahl von Anweisungen enthält, die den Betrieb der PPU 1500 steuern. Die API stellt eine Abstraktion für einen Programmierer dar, die es ihm ermöglicht, spezialisierte Grafikhardware wie die PPU 1500 zu verwenden, um die grafischen Daten zu erzeugen, ohne dass der Programmierer den spezifischen Befehlssatz für die PPU 1500 verwenden muss. Die Anwendung kann einen API-Aufruf enthalten, der an den Gerätetreiber für die PPU 1500 weitergeleitet wird. Der Gerätetreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu reagieren. In einigen Fällen kann der Gerätetreiber Operationen durch Ausführen von Anweisungen auf der CPU durchführen. In anderen Fällen kann der Gerätetreiber Operationen durchführen, zumindest teilweise, indem er Operationen auf der PPU 1500 unter Verwendung einer Eingabe-/Ausgabeschnittstelle zwischen der CPU und der PPU 1500 startet. In einer Ausführungsform ist der Gerätetreiber so konfiguriert, dass er eine Grafikverarbeitungspipeline unter Verwendung der Hardware der PPU 1500 implementiert.
  • In der PPU 1500 können verschiedene Programme ausgeführt werden, um die verschiedenen Phasen der Verarbeitung für das Anwendungsprogramm zu implementieren. Beispielsweise kann der Gerätetreiber einen Kernel auf der PPU 1500 starten, um eine Verarbeitungsstufe auf einem SM 1640 (oder mehreren SMs 1640) durchzuführen. Der Gerätetreiber (oder der anfängliche Kernel, der von der PPU 1500 ausgeführt wird) kann auch andere Kernel auf der PPU 1500 starten, um andere Verarbeitungsschritte auszuführen. Wenn die Verarbeitung des Anwendungsprogramms eine Grafikverarbeitungspipeline umfasst, können einige der Stufen der Grafikverarbeitungspipeline auf fester Hardwareeinheit implementiert werden, wie z. B. einem Rasterizer oder einem Datenassembler, der in der PPU 1500 implementiert ist. Es versteht sich, dass die Ergebnisse eines Kerns von einer oder mehreren zwischengeschalteten Hardwareeinheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kern auf einem SM 1640 verarbeitet werden.
  • Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, können auf einem Monitor oder einem anderen Anzeigegerät angezeigt werden. In einigen Ausführungsformen kann das Anzeigegerät direkt mit dem System oder Prozessor gekoppelt sein, das die Bilder erzeugt oder wiedergibt. In anderen Ausführungsformen kann das Anzeigegerät indirekt mit dem System oder dem Prozessor gekoppelt sein, beispielsweise über ein Netzwerk. Beispiele für solche Netzwerke sind das Internet, mobile Telekommunikationsnetzwerke, ein WIFI-Netzwerk sowie jedes andere drahtgebundene und/oder drahtlose Netzwerksystem. Wenn das Anzeigegerät indirekt gekoppelt ist, können die vom System oder Prozessor erzeugten Bilder über das Netzwerk an das Anzeigegerät gestreamt werden. Ein solches Streaming ermöglicht es beispielsweise, dass Videospiele oder andere Anwendungen, die Bilder rendern, auf einem Server oder in einem Datenzentrum ausgeführt werden und die gerenderten Bilder auf ein oder mehrere Benutzergeräte (wie einen Computer, eine Videospielkonsole, ein Smartphone, ein anderes mobiles Gerät usw.) übertragen und angezeigt werden, die physisch von dem Server oder Datenzentrum getrennt sind. Daher können die hier offenbart Techniken angewendet werden, um die gestreamten Bilder zu verbessern und um Dienste zu verbessern, die Bilder streamen, wie NVIDIA GeForce Now (GFN), Google Stadia und dergleichen.
  • Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, zum Trainieren, Testen oder Zertifizieren von tiefen neuronalen Netzen (DNNs) verwendet werden, die zur Erkennung von Objekten und Umgebungen in der realen Welt eingesetzt werden. Solche Bilder können Szenen von Straßen, Fabriken, Gebäuden, städtischen Umgebungen, ländlichen Umgebungen, Menschen, Tieren und anderen physischen Objekten oder realen Umgebungen umfassen. Solche Bilder können zum Trainieren, Testen oder Zertifizieren von DNNs verwendet werden, die in Maschinen oder Robotern eingesetzt werden, um physische Objekte in der realen Welt zu manipulieren, zu handhaben oder zu verändern. Darüber hinaus können solche Bilder verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die in autonomen Fahrzeugen eingesetzt werden, um die Fahrzeuge durch die reale Welt zu navigieren und zu bewegen. Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Techniken erzeugt wurden, verwendet werden, um den Benutzern solcher Maschinen, Roboter und Fahrzeuge Informationen zu vermitteln.
  • Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Techniken erzeugt wurden, verwendet werden, um Informationen über eine virtuelle Umgebung wie das Metaverse, das Omniversum oder einen digitalen Zwilling einer realen Umgebung anzuzeigen oder zu vermitteln. Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Techniken erzeugt wurden, dazu verwendet werden, Informationen auf einer Vielzahl von Geräten anzuzeigen oder zu übermitteln, einschließlich eines PCs (z. B. eines Laptops), eines Internet of Things (IoT)-Geräts, eines Handheld-Geräts (z. B. eines Smartphones), eines Fahrzeugs, eines Roboters oder eines beliebigen Geräts, das ein Display enthält.
  • Alle hierin zitierten Patente, Patentanmeldungen und Veröffentlichungen sind für alle Zwecke so einbezogen, als ob sie ausdrücklich aufgeführt wären.
  • Alle oben zitierten Patente und Veröffentlichungen werden durch Bezugnahme einbezogen, als ob sie ausdrücklich aufgeführt wären. Während die Erfindung im Zusammenhang mit dem, was derzeit als die meisten praktischen und bevorzugten Ausführungsformen beschrieben wurde, ist es zu verstehen, dass die Erfindung nicht auf die offenbart Ausführungsformen beschränkt werden, sondern im Gegenteil, soll verschiedene Modifikationen und gleichwertige Anordnungen innerhalb des Geistes und Umfangs der beigefügten Ansprüche enthalten.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 10235338 [0001]
    • US 9582607 [0001, 0008, 0049, 0083]
    • US 9552664 [0001]
    • US 9569559 [0001, 0008]
    • US 10025879 [0001, 0082]
    • US 10866990 [0001]
    • US 10580196 [0001]
    • US 11157414 [0001]
    • US 11138009 [0001]
    • US 10867429 [0001, 0075, 0160]
    • US 10825230 [0001, 0089]
    • US 10740952 [0001, 0089]
    • US 10885698 [0001]
    • US 1689898 [0001]
    • US 11302056 [0001]
    • US 11282261 [0001, 0060, 0077]
    • US 20160070820 [0008]
    • US 20160070767 [0008]
    • US 7447873 [0235]
  • Zitierte Nicht-Patentliteratur
    • Parker et al., „OptiX: A General Purpose Ray Tracing Engine“ (ACM Transactions on Graphics, B. 29, Nr. 4, Artikel 66 [0007]

Claims (19)

  1. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung, die aufweist: einen Speicher, der konfiguriert ist, mindestens Teile einer Beschleunigungsstruktur, AS, zu speichern, die mindestens (a) eine Geometrie-AS, (b) eine Instanz-AS und (c) eine Abbildung von einem ersten Knoten der Instanz-AS auf einen zweiten Knoten der Geometrie-AS aufweist, wobei der erste Knoten Begrenzungsparameter einer ersten numerischen Genauigkeit und der zweite Knoten Begrenzungsparameter einer zweiten numerischen Genauigkeit aufweist, die sich von der ersten numerischen Genauigkeit unterscheidet; einen Strahlenspeicher, der konfiguriert ist, Daten zu speichern, die einen Strahl repräsentieren, der die AS traversiert; eine Schnitterkennungsschaltung, die konfiguriert ist, Operationen auszuführen, die aufweisen: Feststellen, ob der Strahl den ersten Knoten schneidet; und beim Feststellen, dass der Strahl den ersten Knoten schneidet, ferner Feststellen, ob der Strahl den zweiten Knoten schneidet; und eine Traversierungsschaltung, die zum Traversieren der AS konfiguriert ist, durch Feststellen, ob der zweite Knoten traversiert werden soll oder nicht, basierend auf dem Feststellen, ob der Strahl den ersten Knoten schneidet, und wenn festgestellt wird, dass der Strahl den ersten Knoten schneidet, Fortsetzen des Traversierens entlang eines Pfades, der den zweiten Knoten einschließt, oder wenn festgestellt wird, dass der Strahl den ersten Knoten nicht schneidet, Entfernen des zweiten Knotens von einer weiteren Traversierung.
  2. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach Anspruch 1, wobei die Schnitterkennungsschaltung eine erste Schnittschaltung, die konfiguriert ist, mit der ersten numerischen Genauigkeit zu arbeiten, und eine zweite Schnittschaltung aufweist, die konfiguriert ist, mit der zweiten numerischen Genauigkeit zu arbeiten, und wobei die erste Schnittschaltung konfiguriert ist, das Feststellen durchzuführen, ob der Strahl den ersten Knoten schneidet, und die zweite Schnittschaltung konfiguriert ist, das Feststellen durchzuführen, ob der Strahl den zweiten Knoten schneidet.
  3. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach Anspruch 2, wobei die zweite Schnittschaltung ferner konfiguriert ist, festzustellen, ob der Strahl Geometrie-Primitive schneidet, die in einem Satz von Geometrieelementen enthalten sind.
  4. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, wobei die Begrenzungsparameter der ersten numerischen Genauigkeit und die Begrenzungsparameter der zweiten numerischen Genauigkeit beide einen selben Satz von Geometrieelementen beinhalten, wobei der Satz von Geometrieelementen als Blattknoten in der Geometrie-AS repräsentiert wird.
  5. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, wobei der erste Knoten ferner eine Anzeige enthält, dass die Begrenzungsparameter der ersten numerischen Genauigkeit für einen ersten Begrenzungsrahmen gültig sind.
  6. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, wobei der erste Knoten ein Instanzknoten ist und ferner Transformationsinformationen enthält.
  7. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach Anspruch 6, die konfiguriert ist, ein Transformieren des Strahls gemäß den Transformationsinformationen im Wesentlichen parallel zum Feststellen durchzuführen, ob der Strahl einen ersten Begrenzungsrahmen schneidet, der durch die Begrenzungsparameter der ersten numerischen Genauigkeit definiert ist.
  8. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, wobei ein erster Begrenzungsrahmen, der durch die Begrenzungsparameter der ersten numerischen Genauigkeit definiert ist, und ein zweiter Begrenzungsrahmen, der durch die Begrenzungsparameter der zweiten numerischen Genauigkeit definiert ist, achsenausgerichtete Begrenzungsrahmen (AABB) sind.
  9. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, wobei das Feststellen, ob der Strahl den ersten Knoten schneidet, das Durchführen eines Slab-Tests basierend auf dem Strahl und den Begrenzungsparametern der ersten numerischen Genauigkeit aufweist und das Feststellen, ob der Strahl den zweiten Knoten schneidet, das Durchführen des Slab-Tests basierend auf dem Strahl und den Begrenzungsparametern der zweiten numerischen Genauigkeit aufweist.
  10. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach Anspruch 9, wobei das Feststellen, ob der Strahl den zweiten Knoten schneidet, das Durchführen des Slab-Tests mit einer zum Strahl hinzugefügten Aufblähung aufweist und das Feststellen, ob der Strahl den ersten Knoten schneidet, das Durchführen des Slab-Tests ohne einer zum Strahl hinzugefügten Aufblähung aufweist.
  11. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, wobei der zweite Knoten ein Wurzelknoten der Geometrie-AS ist.
  12. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, die konfiguriert ist: festzustellen, ob die Begrenzungsparameter der zweiten numerischen Genauigkeit basierend auf dem Strahl zu einem Punkt entarten, wenn ein dem zweiten Knoten entsprechender Punkt-Culling-Indikator gesetzt ist und festgestellt wird, dass die Begrenzungsparameter der zweiten numerischen Genauigkeit zu einem Punkt entarten, Entfernen des zweiten Knotens aus dem Traversieren; oder wenn der Punkt-Culling-Indikator nicht gesetzt ist oder festgestellt wird, dass die Begrenzungsparameter der zweiten numerischen Genauigkeit nicht zu einem Punkt entarten, Fortsetzen des Traversierens auf einem Pfad, der den zweiten Knoten einschließt.
  13. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach einem der vorhergehenden Ansprüche, die ferner eine Strahlverwaltungsschaltung aufweist, die konfiguriert ist, einen Ursprung des Strahls basierend auf einem minimalen Schnittpunkt des Strahls und einem eines ersten Begrenzungsrahmens, der durch die Begrenzungsparameter der ersten numerischen Genauigkeit definiert ist, oder eines zweiten Begrenzungsrahmens einzustellen, der durch die Begrenzungsparameter der zweiten numerischen Genauigkeit definiert ist, wobei die Schnitterkennungsschaltung ferner konfiguriert ist, beim Durchführen der des Feststellens, ob der Strahl den zweiten Knotenpunkt schneidet, einen ersten Strahl-Rahmen-Schnitttest durchzuführen, um zu erkennen, ob der Strahl, basierend auf dem eingestellten Ursprung, den zweiten Begrenzungsrahmen schneidet.
  14. Hardwarevorrichtung zur Strahlenverfolgungs-Beschleunigung nach Anspruch 13, die ferner eine Strahlverwaltungsschaltung aufweist, die konfiguriert ist, einen ersten Wert aus der Feststellung, ob der Strahl den ersten Knoten schneidet, zu speichern und den gespeicherten ersten Wert als den minimalen Schnittpunkt für die Einstellung des Ursprungs des Strahls bereitzustellen.
  15. Verfahren zur Strahlenverfolgungs-Beschleunigung, das aufweist: Zugreifen in einem Speicher auf eine Beschleunigungsstruktur AS, die mindestens (a) eine Geometrie-AS, (b) eine Instanz-AS und (c) eine Abbildung von einem ersten Knoten der Instanz-AS auf einen zweiten Knoten der Geometrie-AS aufweist, wobei der erste Knoten Begrenzungsparameter einer ersten numerischen Genauigkeit und der zweite Knoten Begrenzungsparameter einer zweiten numerischen Genauigkeit aufweist, die sich von der ersten numerischen Genauigkeit unterscheidet; Zugreifen in einem Speicher auf Daten, die einen Strahl repräsentieren, der die AS traversiert; Feststellen, ob der Strahl den ersten Knoten schneidet; und nach der Feststellung, dass der Strahl den ersten Knoten schneidet, Feststellen, ob der Strahl den zweiten Knoten schneidet; und eine Traversierungsschaltung, die zum Traversieren der AS konfiguriert ist, durch Feststellen, ob der zweite Knoten traversiert werden soll oder nicht, basierend auf dem Feststellen, ob der Strahl den ersten Knoten schneidet, und wenn festgestellt wird, dass der Strahl den ersten Knoten schneidet, Fortsetzen des Traversierens entlang eines Pfades, der den zweiten Knoten einschließt, oder wenn festgestellt wird, dass der Strahl den ersten Knoten nicht schneidet, Entfernen des zweiten Knotens von einer weiteren Traversierung.
  16. Verfahren zur Strahlenverfolgungs-Beschleunigung nach Anspruch 15, wobei der erste Knoten ein Instanzknoten ist und das Verfahren ferner aufweist: Durchführen, im Wesentlichen parallel zum Feststellen, ob der Strahl den ersten Knoten schneidet, eines Transformierens des Strahls gemäß Transformationsinformationen im Instanzknoten.
  17. Verfahren zur Strahlenverfolgungs-Beschleunigung nach Anspruch 15 oder 16, das ferner aufweist: Feststellen, ob die Begrenzungsparameter der zweiten numerischen Genauigkeit basierend auf dem Strahl zu einem Punkt entarten, wenn ein dem zweiten Knoten entsprechender Punkt-Culling-Indikator gesetzt ist und festgestellt wird, dass die Begrenzungsparameter der zweiten numerischen Genauigkeit zu einem Punkt entarten, Entfernen des zweiten Knotens aus dem Traversieren; oder wenn der Punkt-Culling-Indikator nicht gesetzt ist oder festgestellt wird, dass die Begrenzungsparameter der zweiten numerischen Genauigkeit nicht zu einem Punkt entarten, Fortsetzen des Traversierens auf einem Pfad, der den zweiten Knoten einschließt.
  18. Verfahren zur Strahlenverfolgungs-Beschleunigung nach einem der Ansprüche 15 bis 17, das ferner aufweist: Einstellen eines Ursprungs des Strahls basierend auf einem minimalen Schnittpunkt des Strahls und einem eines ersten Begrenzungsrahmens, der durch die Begrenzungsparameter der ersten numerischen Genauigkeit definiert ist, oder eines zweiten Begrenzungsrahmens, der durch die Begrenzungsparameter der zweiten numerischen Genauigkeit definiert ist, wobei das Feststellen, ob der Strahl den zweiten Knoten schneidet, das Durchführen eines ersten Strahl-Rahmen-Schnitttests aufweist, um zu erkennen, ob der Strahl, basierend auf dem eingestellten Ursprung, den zweiten Begrenzungsrahmen schneidet.
  19. Verfahren zur Strahlenverfolgungs-Beschleunigung nach Anspruch 18, das ferner aufweist: Speichern eines ersten Wertes aus der Feststellung, ob der Strahl den ersten Knoten schneidet, wobei das Einstellen eines Ursprungs des Strahls basierend auf einem minimalen Schnittpunkt des Strahls und einem des ersten Begrenzungsrahmens oder des zweiten Begrenzungsrahmens das Verwenden des gespeicherten ersten Werts als minimalen Schnittpunkt für das Einstellen aufweist.
DE102023124837.5A 2022-09-16 2023-09-14 Reduzierung falsch positiver Strahltraversierungen in einer Begrenzungsvolumen-Hierarchie Pending DE102023124837A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/946,093 2022-09-16
US17/946,093 US20240095993A1 (en) 2022-09-16 2022-09-16 Reducing false positive ray traversal in a bounding volume hierarchy

Publications (1)

Publication Number Publication Date
DE102023124837A1 true DE102023124837A1 (de) 2024-03-21

Family

ID=90062525

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102023124837.5A Pending DE102023124837A1 (de) 2022-09-16 2023-09-14 Reduzierung falsch positiver Strahltraversierungen in einer Begrenzungsvolumen-Hierarchie

Country Status (3)

Country Link
US (1) US20240095993A1 (de)
CN (1) CN117726732A (de)
DE (1) DE102023124837A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230154101A1 (en) * 2021-11-16 2023-05-18 Disney Enterprises, Inc. Techniques for multi-view neural object modeling

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1689898A (en) 1927-06-13 1928-10-30 Jr Joel Smith Vehicle tire rim
US7447873B1 (en) 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
US20160070767A1 (en) 2014-09-04 2016-03-10 Nvidia Corporation Tree data structures based on a plurality of local coordinate systems
US9552664B2 (en) 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US10580196B1 (en) 2018-08-10 2020-03-03 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US10740952B2 (en) 2018-08-10 2020-08-11 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections
US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
US10867429B2 (en) 2018-08-10 2020-12-15 Nvidia Corporation Query-specific behavioral modification of tree traversal
US10885698B2 (en) 2018-08-10 2021-01-05 Nvidia Corporation Method for programmable timeouts of tree traversal mechanisms in hardware
US11138009B2 (en) 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
US11157414B2 (en) 2018-08-10 2021-10-26 Nvidia Corporation Method for efficient grouping of cache requests for datapath scheduling
US11282261B2 (en) 2020-06-10 2022-03-22 Nvidia Corporation Ray tracing hardware acceleration with alternative world space transforms
US11302056B2 (en) 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing

Patent Citations (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1689898A (en) 1927-06-13 1928-10-30 Jr Joel Smith Vehicle tire rim
US7447873B1 (en) 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
US10235338B2 (en) 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
US20160070820A1 (en) 2014-09-04 2016-03-10 Nvidia Corporation Short stack traversal of tree data structures
US9552664B2 (en) 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US9569559B2 (en) 2014-09-04 2017-02-14 Nvidia Corporation Beam tracing
US9582607B2 (en) 2014-09-04 2017-02-28 Nividia Corporation Block-based bounding volume hierarchy
US10025879B2 (en) 2014-09-04 2018-07-17 Nvidia Corporation Tree data structures based on a plurality of local coordinate systems
US20160070767A1 (en) 2014-09-04 2016-03-10 Nvidia Corporation Tree data structures based on a plurality of local coordinate systems
US10866990B2 (en) 2014-09-04 2020-12-15 Nvidia Corporation Block-based lossless compression of geometric data
US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
US10740952B2 (en) 2018-08-10 2020-08-11 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections
US10867429B2 (en) 2018-08-10 2020-12-15 Nvidia Corporation Query-specific behavioral modification of tree traversal
US10580196B1 (en) 2018-08-10 2020-03-03 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US10885698B2 (en) 2018-08-10 2021-01-05 Nvidia Corporation Method for programmable timeouts of tree traversal mechanisms in hardware
US11138009B2 (en) 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
US11157414B2 (en) 2018-08-10 2021-10-26 Nvidia Corporation Method for efficient grouping of cache requests for datapath scheduling
US11282261B2 (en) 2020-06-10 2022-03-22 Nvidia Corporation Ray tracing hardware acceleration with alternative world space transforms
US11302056B2 (en) 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Parker et al., „OptiX: A General Purpose Ray Tracing Engine" (ACM Transactions on Graphics, B. 29, Nr. 4, Artikel 66

Also Published As

Publication number Publication date
CN117726732A (zh) 2024-03-19
US20240095993A1 (en) 2024-03-21

Similar Documents

Publication Publication Date Title
DE102019103059B4 (de) Hieb- und stichfester Strahl-Dreieck-Schnittpunkt
DE102019101873A1 (de) Abfragespezifische Verhaltensmodifizierung von Baumtraversierung
DE102019102821A1 (de) Verfahren zur behandlung von ungeordneten opak- und alphastrahl/primitiv-schnittpunkten
DE102019103058A1 (de) Verfahren für fortgesetzte begrenzungsvolumenhierarchietraversierung auf schnittpunkte ohne shader-intervention
DE102019103326A1 (de) Robuste, effiziente multiprozessor-koprozessor-schnittstelle
DE102019103178A1 (de) Verfahren für vorankommen und programmierbare timeouts von baumtraversierungsmechanismen in hardware
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
DE102019103336A1 (de) Verfahren zum effizienten gruppieren von cache-anforderungen für datenpfad-scheduling
DE102020108218A1 (de) Vorrichtung und Verfahren zur Konstruktion von Begrenzungsvolumenhierarchien mit reduzierter Genauigkeit
DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102021205765A1 (de) Hardwarebasierte techniken der strahlverfolgung zur effizienten darstellung und verarbeitung eines beliebigen hüllkörpers
DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
DE102021115407A1 (de) Hardwarebeschleunigung zur strahlverfolgung von primitiven, die vertices teilen
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE102019132001A1 (de) Vorrichtung und verfahren für einen hierarchischen beamtracer
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE102021130031A1 (de) Erscheinungsbildgesteuerte automatische dreidimensionale modellierung
DE102021206234A1 (de) Frühzeitige freigabe von ressourcen in strahlverfolgungs-hardware

Legal Events

Date Code Title Description
R012 Request for examination validly filed