DE102022100517A1 - Verwenden von intrinsischen funktionen zum schattenentrauschen in raytracinganwendungen - Google Patents

Verwenden von intrinsischen funktionen zum schattenentrauschen in raytracinganwendungen Download PDF

Info

Publication number
DE102022100517A1
DE102022100517A1 DE102022100517.8A DE102022100517A DE102022100517A1 DE 102022100517 A1 DE102022100517 A1 DE 102022100517A1 DE 102022100517 A DE102022100517 A DE 102022100517A DE 102022100517 A1 DE102022100517 A1 DE 102022100517A1
Authority
DE
Germany
Prior art keywords
threads
value
values
penumbra
samples
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
DE102022100517.8A
Other languages
English (en)
Inventor
Pawel Kozlowski
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 DE102022100517A1 publication Critical patent/DE102022100517A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/70Denoising; Smoothing
    • 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/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration using local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20004Adaptive image processing
    • G06T2207/20012Locally adaptive
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

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

Abstract

In Beispielen können Threads einer zeitlich planbaren Einheit (z.B. ein Verzerren oder eine Wellenfront) eines Parallelprozessors verwendet werden, um Sichtbarkeit von Pixeln in Bezug auf eine oder mehrere Lichtquellen zu sampeln. Die Threads können die Ergebnisse des Samplings empfangen, dass mittels anderer Threads in der zeitlich planbaren Einheit durchgeführt wird, um einen Wert zu berechnen, der anzeigt, ob eine Region zu einem Halbschatten korrespondiert (z.B. unter Verwenden einer Welle-intrinsischen-Funktion). Jeder Thread kann zu einem jeweiligen Pixel korrespondieren und die Region kann zu den Pixeln der zeitlich planbaren Einheit korrespondieren. Ein Frame kann in die Regionen unterteilt werden, wobei jede Region zu einer jeweiligen zeitlich planbaren Einheit korrespondiert. In Entrauschungs-geraytracten-Schatteninformationen können die Werte für die Regionen verwendet werden, um ein Anwenden eines Entrauschungsfilters auf Pixel von Regionen zu vermeiden, die außerhalb eines Halbschattens sind, während der Entrauschungsfilter auf Pixel in Regionen angewendet wird, die innerhalb eines Halbschattens sind.

Description

  • HINTERGRUND
  • Raytracing ist ein Ansatz, der zum Rendern von Bildern verwendet wird, indem ein Lichtpfad in einer virtuellen Umgebung getrackt wird und die Auswirkungen der Lichtwechselwirkungen mit virtuellen Objekten simuliert wird. Raytracing-Techniken können verwendet werden, um eine Vielfalt von optischen Effekten zu simulieren - wie Schatten, Reflexionen und Refraktionen, Streuphänomen und Dispersionsphänomen (wie beispielsweise chromatische Aberration). Beim Rendern weicher Schatten unter Verwenden von Raytracing können herkömmliche Ansätze zum Schattentracing eine beliebige Anzahl von Schattenstrahlen (shodaow rays) von einer Position in einer virtuellen Umgebung ausstrahlen, um Beleuchtungsbedingungen für einen Pixel in Bezug auf eine Lichtquelle zu sampeln. Die geraytracten Samples können kombiniert und auf den Pixel angewendet werden. In einem Halbschatten (Penumbra) (eine Region eines Schattens, in der Licht teilweise verdeckt ist) können einige der Schattenstrahlen für die Lichtquelle sichtbar sein, und andere können verdeckt sein. Eine große Anzahl von Schattenstrahlen kann benötigt werden, damit die kombinierten Beleuchtungsbedingungen auf ein genaues Ergebnis konvergieren. Um die Rechenressourcen zu sparen und Renderzeiten zu reduzieren, können die Schattenstrahlen spärlich gesampelt werden, was zu verrauschten Schattendaten führt. Die verrauschten Schattendaten können unter Verwendung von Entrauschungstechniken gefiltert werden, um Rauschen zu reduzieren und eine endgültigen Renderung zu erzeugen, die eine Renderung von einer komplett gesampelten Szene genauer annähert.
  • Berechnungsressourcen, die zum Entrauschen von Schattendaten verwendet werden, können reduziert werden, indem Entrauschen auf Pixel konzentriert wird, die sich in einem Halbschatten befinden. Zum Beispiel müssen vollständig beleuchtete oder vollständig beschattete Pixel, die sich außerhalb des Halbschattens befinden, nicht entrauscht werden, da entsprechende geraytracte Samples die Abschattung dieser Pixel widerspiegeln. Eine Halbschattenmaske kann erzeugt und verwendet werden, um anzuzeigen, welche Pixel während des Entrauschens innerhalb eines Halbschattens liegen.
  • Erzeugen der Halbschattenmaske beinhaltet typischerweise einen Nachbearbeitungsdurchgang, der an den Schattendaten ausgeführt wird, und kann aufgrund des Zugriffs auf globalen Speicher rechnerisch aufwändig sein.
  • ZUSAMMENFASSUNG
  • Ausführungsbeispiele der vorliegenden Offenbarung betreffen Anwenden von Welle-intrinsischen-Funktionen (wave intrinsic functions), um Halbschattenregionen zum Schattenentrauschen zu detektieren. Insbesondere betrifft die vorliegende Offenbarung, in Teilen, Einsetzen von Threads von zeitlich planbaren (schedulable) Einheiten von Parallelprozessoren, die verwendet werden, um Sichtbarkeit in Raytracing zu sampeln, um Halbschattenregionen zum Entrauschen von geraytracten Schatten zu identifizieren.
  • Im Gegensatz zu konventionellen Ansätzen können die offenbarten Ansätze verwendet werden, um zu bestimmen, welche Pixel in einem Frame innerhalb eines Halbschattens sind, während ein Nachbearbeitungsdurchgang vermieden wird. In Übereinstimmung mit Aspekten der Offenbarung können Threads einer zeitlich planbaren Einheit (z.B. ein Verzerren (warp) oder eine Wellenfront) eines Parallelprozessors verwenden werden, um die Sichtbarkeit von Pixeln in Bezug auf eine oder mehrere Lichtquellen zu sampeln. Zumindest einer der Threads kann die Ergebnisse des Sampelns empfangen, das mittels anderer Threads in der zeitlich planbaren Einheit (z.B. jeder andere Thread) durchgeführt wird, um einen Wert zu berechnen, der anzeigt, ob eine Region zu einem Halbschatten (z.B. unter Verwenden einer Welle-intrinsischen-Funktion des Parallelprozessors) korrespondiert. In zumindest einem Ausführungsbeispiel kann jeder Thread zu einem jeweiligen Pixel korrespondieren und die Region kann zu den Pixeln der zeitlich planbaren Einheit korrespondieren. Ferner kann ein Frame in Regionen von Pixeln unterteilt werden, wobei jede Region zu einer entsprechenden zeitlich planbaren Einheit korrespondiert. Beim Anwenden eines Entrauschungsdurchgangs auf die geraytracten Schatteninformationen können die Werte der Regionen verwendet werden, um ein Anwenden eines Entrauschungsfilters auf die Pixel von Regionen zu vermeiden, die außerhalb eines Halbschattens liegen, während der Entrauschungsfilter auf Pixel von Regionen angewendet wird, die innerhalb eines Halbschattens liegen. Zum Beispiel können die Werte verwendet werden, um eine Halbschattenmaske zu erzeugen und die Halbschattenmaske kann zum Entrauschen einer Schattenmaske verwendet werden.
  • Die Offenbarung stellt ferner Ansätze zum Bestimmen von Parametern von Entrauschungsfiltern bereit. In Übereinstimmung mit Aspekten der Offenbarung können Threads einer zeitlich planbaren Einheit verwendet werden, um einen oder mehrere Aspekte einer Szene (z.B. Sichtbarkeit, globale Beleuchtungen, Umgebungsverdeckungen, usw.) zu sampeln. Zumindest einer der Threads kann die Ergebnisse des Sampelns durch andere Threads in der zeitlich planbaren Einheit (z.B. jeder andere Thread) empfangen, um einen Wert(e) zu berechnen, der eine oder mehrere Eigenschaften einer Region der Szene anzeigt (z.B. unter Verwenden einer Welle-intrinsischen-Funktion des Parallelprozessors). Beim Anwenden eines Entrauschungsdurchgangs, um Daten zu rendern, können die Werte der Regionen verwendet werden, um einen oder mehrere Parameter von Entrauschungsfilter zu bestimmen, die auf die Renderdaten angewendet werden. Zum Beispiel können die Werte verwendet werden, um einen Filterradius und/oder einen Bereich von Werten zu bestimmen, die beim Filtern einzubeziehen sind.
  • Figurenliste
  • Die vorliegenden Systeme und Verfahren zum Verwenden einer Welle-intrinsischen-Funktion, um Halbschattenregionen zum Schattenentrauschen zu detektieren werden hierin, mit Bezug auf die angefügten Zeichnungsfiguren, unten im Detail beschrieben, wobei:
    • 1 ein Blockflussdiagramm ist, das einen beispielhaften Prozess zum Erzeugen eines Ausgabebildes zeigt, unter Verwenden eines Bild-Render-Systems, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung;
    • 2 ein Diagramm ist, das ein Beispiel zeigt, wie Werte einer Renderung zu Werten einer Maske korrespondieren können, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung;
    • 3 ein Diagramm ist, das ein Beispiel vom Erfassen von geraytracten Samples einer virtuellen Umgebung zeigt, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung;
    • 4 ein Flussdiagramm ist, das ein Beispiel eines Verfahrens zum Verwenden einer zeitlich planbaren Einheit zeigt, um Sichtbarkeitswerte und einen Wert zu bestimmen, der anzeigt, dass eine Position in einer Szene zu einem Halbschatten korrespondiert, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung;
    • 5 ein Flussdiagramm ist, das eine Beispiel eines Verfahrens zum Verwenden von Gruppen von Threads von einer oder mehrerer zeitlich planbaren Einheiten zeigt, um geraytracten Samples von Sichtbarkeit und Werten zu bestimmen, die anzeigen, ob Pixel zu Halbschatten korrespondieren, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung;
    • 6 ein Flussdiagramm ist, das ein Beispiel eines Verfahrens zum Verwenden einer zeitlich planbaren Einheit zeigt, um geraytracte Samples und einen oder mehrere Werte zu bestimmen, die verwendet werden, um einen oder mehrere Parameter eines Entrauschungsfilters zu bestimmen, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung;
    • 7 ein Blockdiagramm einer beispielhaften Berechnungsumgebung ist, die zum Verwenden beim Implementieren von einigen Ausführungsbeispielen der vorliegenden Offenbarung geeignet ist; und
    • 8 ein Blockdiagramm eines beispielhaften Datencenters ist, das zum Verwenden beim Implementieren von einigen Ausführungsbeispielen der vorliegenden Offenbarung geeignet ist.
  • DETAILLIERTE BESCHREIBUNG
  • Die vorliegende Offenbarung betrifft Verwenden von Welle-intrinsischen-Funktionen, um Halbschattenregionen für Schattenentrauschen zu detektieren. Insbesondere stellt die Offenbarung, in Teilen, Einsetzen von Threads von zeitlich planbaren Einheiten von Parallelprozessoren bereit, die verwendet werden, um Sichtbarkeit in Raytracing zu sampeln, um Halbschattenregionen für Entrauschen von geraytracten Schatten zu identifizieren.
  • Offenbarte Ansätze können verwendet werden, um statistische Werte zu bestimmen, die verwendet werden, um ein Entrauschen über Renderdaten zu informieren ohne, dass ein dedizierter Nachbearbeitungsdurchgang benötigt wird. Zum Beispiel können die statistischen Werte verwendet werden, um zu bestimmen, welche Pixel eines Frames während eines Entrauschens von Renderdaten innerhalb eines Halbschattens sind und/oder um ein Filtern der Renderdaten anzuleiten. Die Renderdaten können räumliche und/oder zeitlich geraytracte Samples umfassen.
  • In Übereinstimmung mit Aspekten der Offenbarung können Threads einer zeitlich planbaren Einheit (z.B. ein Verzerren oder Wellenfront) eines Parallelprozessors verwendet werden, um einen oder mehrere Aspekte einer virtuellen Umgebung bezüglich Pixeln (z.B. mittels Ausführens eines Shadercodes) zu sampeln. In Ausführungsbeispielen, die bestimmen, welche Pixel innerhalb eines Halbschattens sind, können die Bedingungen Sichtbarkeit der Pixel in Bezug auf eine oder mehrere Lichtquellen umfassen.
  • Die Threads können in Gruppen von Threads angeordnet werden, wo eine Gruppe von Threads auf jeden Thread einer zeitlich planbaren Einheit oder auf ein Subset von Threads einer zeitlich planbaren Einheit verweisen kann. Zumindest einer der Threads aus einer Gruppe kann die Ergebnisse des Sampelns empfangen, das mittels anderer Threads innerhalb der Gruppe durchgeführt wird. Der/die Thread(s) können einen statistischen Wert bezüglich der geraytracten Samples berechnen. Zum Beispiel kann, für Sichtbarkeit, jeder Thread einen Wert berechnen, der anzeigt, ob eine Region eines Frames zu einem Halbschatten korrespondiert. In zumindest einem Ausführungsbeispiel kann eine Welle-intrinsische-Funktion des Parallelprozessors verwendet werden, um Werte zu erlangen, die zu den geraytracten Samples aus anderen Threads korrespondieren. Zum Beispiel kann eine Welle-aktive-Summen-Funktion (wave active sum function) eine Summe (einen statistischen Wert) der Werte an einen Thread zurückgeben. Die statistischen Werte die mittels des Threads berechnet werden, können verwendet werden, um Filterung über Renderdaten zu informieren. Zum Beispiel kann ein statistischer Wert als ein Maskenwert verwendet werden, oder kann mittels des Threads verwendet werden, um den Maskenwert zu berechnen. Maskenwerte können in einer Maske gespeichert werden, auf die während eines Entrauschens zugegriffen werden kann. In zumindest einem Ausführungsbeispiel kann die Maske eine Halbschattenmaske sein, die anzeigt, welche Pixel zu einem Halbschatten korrespondieren.
  • In zumindest einem Ausführungsbeispiel kann jeder Thread zu einem jeweiligen Pixel korrespondieren und die Region des Frames, für die ein statistischer Wert berechnet wird, kann zu den Pixeln der Gruppe von Threads korrespondieren. Ferner kann ein Frame in Regionen von Pixel unterteilt werden, wobei jede Region zu einer j eweiligen Gruppe von Threads und/oder zeitlich planbaren Einheiten korrespondiert. Unter Verwenden offenbarter Ansätze mag kein Nachbearbeitungsdurchgang benötigt werden, um statistische Werte zu bestimmen, die verwendet werden, um Entrauschen über Renderdaten zu informieren, wodurch die Prozessierzeit zum Entrauschen von Renderdaten reduziert wird. Zum Beispiel können die Threads von zeitlich planbaren Einheiten Samples der virtuellen Umgebung und die statistischen Werte aus den Samples (z.B. als Teil eines Ausführend eines strahlerzeugenden Shaders) bestimmen. Die statistischen Werte können aus Registern der Threads berechnet werden, die signifikant geringere Zugrisszeiten als Speicher, der für Nachbearbeiten verwendet wird, haben können.
  • In zumindest einem Ausführungsbeispiel können beim Anwenden eines Entrauschungsdurchgangs auf Renderdaten (z.B. die geraytracten Samples) die statistischen Werte für die Regionen verwendet werden, um ein Anwenden von Entrauschungsfiltern auf ein oder mehrere Pixel von Regionen zu vermeiden. Zum Beispiel mag, wo ein Maskenwert der Halbschattenmaske anzeigt, dass eine Region außerhalb eines Halbschattens ist, kein Entrauschungsfilter auf Pixel innerhalb der Region angewendet werden. Die Offenbarung stellt ferner Ansätze zum Bestimmen eines oder mehrerer Parameter von Entrauschungsfiltern bereit. Zum Beispiel können, zusätzlich oder alternativ zum Verwenden der statistischen Werte zum Bestimmen, welche Pixel übersprungen werden, wenn ein Entrauschungsfilter angewendet wird, statistische Werte verwendet werden, um einen oder mehrere Parameter des Entrauschungsfilters für einen Pixel zu bestimmen. Beispiele der Parameter umfassen Parameter die einen Filterradius, Filtergewichte und/oder einen Bereich von Werten, die beim Filtern zu berücksichtigen sind, definieren.
  • Mit Bezug auf 1 ist 1 ein Datenflussdiagramm, welches einen beispielhaften Prozess 140 zum Erzeugen eines Ausgabebildes 120 zeigt unter Verwenden eines Bild-Render-Systems 100, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung. Diese und andere Anordnungen, die hierin beschrieben werden, werden nur als Beispiele dargelegt. Andere Anordnungen und Elemente (z.B. Maschinen, Schnittstellen, Funktionen, Befehle, Gruppierungen von Funktionen, usw.) können zusätzlich oder anstelle von den gezeigten verwendet werden und einige Elemente können komplett weggelassen werden. Ferner sind viele der hierin beschriebenen Elemente funktionale Entitäten, die als diskrete oder verteilte Komponenten oder in Verbindung mit anderen Komponenten und in jeder geeigneten Kombination, Anordnung oder Position implementiert sein können. Verschiedene Funktionen, die hierin als von Entitäten durchgeführt beschrieben werden, können mittels Hardware, Firmware und/oder Software ausgeführt werden. Zum Beispiel können verschiedene Funktionen mittels eines Prozessors ausgeführt werden, der Befehle, die im Speicher gespeichert sind, ausführt.
  • In zumindest einem Ausführungsbeispiel kann das Bild-Render-System 100 zumindest zum Teil in dem Datencenter 800 von 8 implementiert sein. Als verschiedene Beispiele kann das Bild-Render-System 100 ein oder mehreres von einem System zum Durchführen von Simulationsoperationen, einem System zum Durchführen von Simulationsoperationen, um autonome-Maschinen-Anwendungen zu testen oder zu validieren, einem System zum Durchführen von Deep-Learning-Operationen, einem unter Verwenden einer Edge-Vorrichtung implementierten System, einem System, das eine oder mehrere virtuelle Maschinen (VMs) beinhaltet, einem System, das zumindest teilweise in einem Datencenter implementiert ist, oder einem System, das zumindest teilweise mittels Verwendens von Cloud-Berechnungs-Ressourcen implementiert ist, umfassen oder darin beinhaltet sein.
  • Das Bild-Render-System 100 kann konfiguriert sein, um Bilder von virtuellen Umgebungen, wie eine virtuelle Umgebung 300 von 3, zu rendern. Um ein Bild einer virtuellen Umgebung (was auch als eine Szene referenziert werden kann) zu rendern, kann das Bild-Render-System 100 einen Raytracer 102, einen Bildfilterer 104, einen Bildkombinierer 106 und einen dreidimensionalen (3D) Renderer 108 einsetzen.
  • Der Raytracer 102 kann konfiguriert sein, um Strahlen durch eine virtuelle Umgebung zu tracen, unter Verwenden irgendeiner von einer Vielfalt von möglichen Raytracing-Techniken, um geraytracte Samples von einem oder mehreren Aspekten der virtuellen Umgebung (z.B. Beleuchtungsbedingungen wie beispielsweise Sichtbarkeit) bezüglich Positionen in der virtuellen Umgebung zu erzeugen. Die geraytracten Samples können bestimmt werden, unter Verwenden von zeitlich planbaren Einheiten von einem oder mehreren Parallelprozessoren, wie beispielsweise die GPU(s) 708 von 7. Ferner kann das geraytracte Sample erfasst oder auf andere Weise verwendet werden, um Renderdaten 122 (z.B. mittels der zeitlich planbaren Einheiten) zu erzeugen. Der Raytracer 102 kann auch konfiguriert sein, um (z.B. mittels der zeitlich planbaren Einheiten) Werte aus den geraytracten Samples, beispielsweise statistische Werte (z.B. Summen von Sichtbarkeitswerten in zeitlich planbaren Einheiten) zu berechnen. Die Werte können aus den Renderdaten 122 bestimmt werden, unter Verwenden der zeitlich planbaren Einheiten, und können anzeigen, ob entsprechende Positionen und/oder Pixel zu einem Halbschatten eines Schattens korrespondieren. In Ausführungsbeispielen können die Werte durch Maskendaten 124 erfasst werden oder ansonsten verwendet werden, um diese zu erzeugen.
  • Der Bildfilterer 104 kann konfiguriert sein, um die Renderdaten des Raytracers 102 (oder andere Renderdaten) basierend zumindest auf den Werten, die aus den geraytracten Samples (z.B. unter Verwenden der Maskendaten 124) berechnet werden, zu filtern. Zum Beispiel kann, wo ein Wert eine Position anzeigt oder ein Pixel zu einem Halbschatten (z.B. weiße Pixel in den Maskendaten 124 von 1) korrespondiert, der Entrauscher einen Entrauschungsfilter auf die Position oder den Pixel anwenden. Wo ein Wert eine Position anzeigt oder ein Pixel zu einer voll beleuchteten oder voll beschatteten Region (z.B. schwarze Pixel in den Maskendaten 124 von 1) korrespondiert, kann der Entrauscher ein Anwenden eines Entrauschungsfilters auf die Position oder den Pixel überspringen (auch „vorzeitiges Aus“ (early out) genannt).
  • In einigen Ausführungsbeispielen kann der Bildkombinierer 106 Daten, die zu den gefilterten Renderdaten 122 (z.B. gefilterte Schatten-/Sichtbarkeits-Daten) korrespondieren, mit Daten, die ein 3D-Rendern der virtuellen Umgebung (z.B. ohne geraytracte Schatten-Daten) repräsentieren, kombinieren, um das Ausgabebild 120 zu erzeugen. Der 3D-Renderer 108 kann konfiguriert sein, um die 3D-Renderung zu erzeugen, unter Verwenden irgendeines geeigneten Ansatzes, was Raytracing umfassen mag oder nicht umfassen mag. In Ausführungsbeispielen kann die 3D-Renderung Pixel Farbinformationen für einen Frame der virtuellen Umgebung umfassen.
  • Wie hierin beschrieben, kann der Raytracer 102 konfiguriert sein, um Strahlen durch eine virtuelle Umgebung hindurch zu tracen, unter Verwenden einer Vielfalt von möglichen Raytracing-Techniken, um geraytracte Samples von einem oder mehreren Aspekten der virtuellen Umgebung in Bezug auf Positionen in der virtuellen Umgebung zu erzeugen. Der Raytracer 102 kann auch konfiguriert sein, um Werte aus den geraytracten Samples, wie beispielsweise statistische Werte (z.B. Summen von Sichtbarkeitswerten in zeitlich planbaren Einheiten), zu berechnen, die von anderen Komponenten der Renderpipeline, wie beispielsweise dem Bildfilterer 104, eingesetzt werden. In verschiedenen Ausführungsbeispielen kann Raytracer 102 zeitlich planbare Einheiten von einem oder mehreren Prozessoren zum parallel Prozessieren einsetzen, um die geraytracten Samples und Werte, die von den geraytracten Samples abgeleitet werden, zu erzeugen. Indem dies getan wird, können die Werte (z.B. in den Maskendaten 124 reflektiert) abgeleitet werden, ohne dass ein Nachbearbeitungsdurchgang benötigt wird. Neben anderen möglichen Vorteilen können die Werte schneller berechnet werden, als wenn konventionelle Ansätze verwendet würden, da auf die Daten, die zum Berechnen der Werte (z.B. die Renderdaten 122) verwendet werden, aus Registern von Threads, im Gegensatz zu gemeinsamen oder globalen Speicher, zugegriffen werden kann.
  • In verschiedenen Ausführungsbeispielen kann eine zeitlich planbare Einheit auf eine Hardware zeitlich planbare Gruppe von Threads referenzieren, die zum parallel Prozessieren verwendet werden kann. Ein Thread kann auf einen GPU Thread oder einen CPU Thread referenzieren. In verschiedenen Beispielen kann ein Thread, zumindest zum Teil, unter Verwenden eines Einzelbefehl-Mehrfachthread-Ausführungsmodell (Single Instruction, Multiple Thread; SIMT) implementiert sein. Ein Thread kann auch als ein Arbeitselement (work item), ein Basiselement von zu prozessierenden Daten, ein individueller Pfad (individual lane), oder eine Sequenz von Einzelbefehl-Mehrfachdaten-Pfadoperationen (Single Instruction, Multiple Data; SIMD) referenziert werden.
  • Beispiele von zeitlich planbaren Einheiten umfassen Verzerrungen (warps) in Bezug auf NVIDIA-Terminologie (z.B. CUDA-basierte Technologie) oder Wellenfronten in Bezug auf AMD-Terminologie (z.B. OpenCL-basierte Technologie). Für CUDA-basierte Technologie kann eine zeitlich planbare Einheit, im Zuge eines Beispiels und nicht einschränkend, 32 Threads umfassen. Für OpenCL-basierte Technologie kann eine zeitlich planbare Einheit, im Zuge eines Beispiels und nicht einschränkend, 64 Threads umfassen. In einem oder mehreren Ausführungsbeispielen kann eine zeitlich planbare Einheit auf einen Thread von SIMD Befehlen referenzieren. In einem oder mehreren Ausführungsbeispielen kann eine zeitlich planbare Einheit eine Sammlung von Operationen umfassen, die im Lockstep ausführen, die gleichen Befehle laufen lassen und dem gleichen Kontrollstruktur-Pfad (control-flow path) folgen. In einigen Ausführungsbeispielen können individuelle oder Gruppen von Pfaden (lanes) oder Threads einer zeitlich planbaren Einheit von der Ausführung ausgeblendet (masked off) werden.
  • In verschiedenen Ausführungsbeispielen kann der Raytracer 102 einen oder mehrere Shader oder Programme betreiben, die mittels einer oder mehrerer zeitlich planbaren Einheiten zum parallel Prozessieren ausgeführt werden, um die geraytracten Samples und die Werte, die aus den geraytracten Samples abgeleitet werden, zu erzeugen. Zum Beispiel können die geraytracten Samples mittels eines gleichen Shaders wie die Werte, die aus den geraytracten Samples abgeleitet werden, erzeugt werden. Der Shader kann, zum Beispiel, ein Shader sein, der Strahlen erzeugt, wo Code des Shaders, der Strahlen erzeugt, mittels einer oder mehrerer Gruppen von Threads und/oder zeitlich planbaren Einheiten (z.B. parallel) ausgeführt wird.
  • Nun auf 2 Bezug nehmend ist 2 ein Diagramm, das ein Beispiel zeigt, wie Werte einer Renderung 200 zu Werten einer Maske 202 korrespondieren können, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung. Die Renderung 200 kann zu den Renderdaten 122 von 1 korrespondieren und die Maske 202 kann zu den Maskendaten 124 von 1 korrespondieren. In zumindest einem Ausführungsbeispiel kann der Raytracer 102 eine Renderung oder einen Frame in Regionen unterteilen, wo jede Region zu einem oder mehreren Pixeln und/oder Positionen der virtuellen Umgebung 300 korrespondieren kann. Zum Beispiel kann die Renderung 200 in Regionen 210A, 210B, 210C, 210D, 210E bis 210N (hierin auch gemeinschaftlich als „Regionen 210“ referenziert) unterteilt werden. In zumindest einem Ausführungsbeispiel kann der Raytracer 102 (z.B. Shadercode, der mittels Threads ausgeführt wird) die Regionen 210 so konfigurieren, dass sie nicht überlappen und dass sie eine Gänze eines Frames oder einer Renderung erfassen. Zum Beispiel korrespondiert in 2 jede Region 210 zu einer rechteckigen Region von Pixeln des Frames.
  • In dem gezeigten Beispiel korrespondiert jede Region 210 zu einer zeitlich planbaren Einheit und jeder Thread innerhalb einer zeitlich planbaren Einheit korrespondiert zu einem jeweiligen Pixel oder Zelle der Region 210. Insbesondere betrifft das gezeigte Beispiel ein Verzerren, wo jede Region 210 zu 32 Pixeln und Threads korrespondieren kann. Wo die Renderung 200 Hrender Pixel × Vrender Pixel ist und jede Region HRegion Pixel × VRegion Pixel ist, können Hrender/HRegion × Vrender/VRegion Regionen in der Renderung 200 sein. Jede Region 210 in 2 umfasst eine 8x4 Region von Pixeln, was zu 32 Pixel der zeitlich planbaren Einheit korrespondiert. Daher können in dem gezeigten Beispiel - für einen Frame der 1920x1080 Pixel hat - 64.800 der Regionen 210 sein. Andere Beispiele können sich auf Wellenfronten beziehen und jede Region 210 kann zu 64 Pixeln und Threads korrespondieren. Der Raytracer 102 kann die Pixel oder Zellen einer zeitlich planbaren Einheit in jeder geeigneten Weise verteilen. Zum Beispiel mag in verschiedenen Ausführungsbeispielen eine zeitlich planbare Einheit nicht notwendigerweise rechteckig sein, mag nicht notwendigerweise zusammenhängend sein, mag nicht notwendigerweise nicht überlappend mit anderen zeitlich planbaren Einheiten sein und/oder jeder Thread mag nicht notwendigerweise zu einem einzelnen Pixel korrespondieren.
  • Wie hierin beschrieben kann der Raytracer 102 unter Verwenden von Threads einer zeitlich planbaren Einheit Werte bestimmen, die zu geraytracten Samples korrespondieren. In zumindest einem Ausführungsbeispiel können die Pixel oder Zellen einer Region 210 Werte der geraytracten Samples und/oder Werte, die aus den geraytracten Samples abgeleitet sind, speichern. Zum Beispiel kann jeder Thread einen Wert eines geraytracten Samples für einen Pixel oder eine Zelle speichern, der mittels des Threads in einem Register erzeugt wurde.
  • Beispiele von geraytracten Samples werden in Bezug auf 3 beschrieben. Nun Bezug nehmend auf 3 ist 3 ein Diagramm, das ein Beispiel für Erfassen von geraytracten Samples der virtuellen Umgebung 300 zeigt, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung. Das Bild-Render-System 100 kann konfiguriert sein, um den Raytracer 102 zu verwenden, um ein Bild unter Verwenden irgendeiner Anzahl von Raytracing-Durchgängen zu rendern, um die Bedingungen einer virtuellen Umgebung zu sampeln.
  • Das Beispiel der 3 ist in Bezug zu Samples von Sichtbarkeit und spezifischer Samples von Sichtbarkeit des einen oder der mehreren Pixel bezüglich einer Lichtquelle in der virtuellen Umgebung 300 beschrieben. In solchen Beispielen kann die Renderung 200 von 2 zu einer Schattenmaske eines Frames korrespondieren. Jedoch können offenbarte Ansätze mit anderen Typen von geraytracten Samples implementiert werden, die solche umfassen können, die ein binäres Signal (z.B. einen Wert von 0 oder 1 haben) oder ein nichtbinäres Signal formen. In einigen Ausführungsbeispielen können die geraytracten Samples Umgebungsverdeckungen, globale Beleuchtungen oder andere Eigenschaften des einen oder der mehreren Pixel und/oder Positionen in Bezug auf die virtuelle Umgebung 300 repräsentieren, anzeigen oder auf andere Weise dazu korrespondieren. Wenn verschiedene Aspekte einer virtuellen Umgebung gesampelt werden, können Raytracing-Techniken angepasst werden, um für den/die Effekt(e) zu passen, die simuliert werden. Ferner mag im vorliegenden Beispiel, wenn ein Strahl mit einer Position in der virtuellen Umgebung wechselwirkt (z.B. bei der Lichtquelle 320 oder einem Verdecker (occluder) 322), kein zusätzlicher Strahl von dieser Position ausgestrahlt werden. Jedoch können für andere Raytracing-Effekte oder -Techniken ein oder mehrere Strahlen davon ausgestrahlt werden.
  • In zumindest einem Ausführungsbeispiel kann der Raytracer 102 unter Verwenden von Strahl-Erzeuger-Shader(n) (ray generation shader(s)) Strahlen ausstrahlen oder verfolgen. Verschiedene Beispiele von Strahlen, die mittels des Raytracers 102 durch die virtuelle Umgebung 300 verfolgt werden können (z.B. unter Verwenden eines Strahles je Pixel), sind in 3 in Bezug auf einen Raytracing-Durchgang 314 dargestellt. Zum Beispiel sind ein Strahl 340, ein Strahl 342 und ein Strahl 344 individuell unter den neun Strahlen, die für den Raytracing-Durchgang 314 gezeigt sind, gelabelt. Der Raytracer 102 kann die Strahlen verwenden, um kollektiv ein oder mehrere Aspekte der virtuellen Umgebung in Bezug auf Positionen in der virtuellen Umgebung 300 zu sampeln. Beispiele von 32 Positionen der Region 210D werden gezeigt, von denen Positionen 330, 332 und 334 individuell gelabelt sind. Jedoch kann jede Region 210 ähnlich in dem Raytracing-Durchgang 314 gesampelt werden.
  • In zumindest einem Ausführungsbeispiel ist jeder Strahl mit einer der Positionen assoziiert (z.B. wird von der Position ausgestrahlt) und wird verwendet, um ein geraytractes Sample für die Position zu erzeugen. Zum Beispiel ist der Strahl 340 mit der Position 332 assoziiert, der Strahl 342 ist mit der Position 330 assoziiert und der Strahl 344 ist mit der Position 334 assoziiert. In einigen Ausführungsbeispielen korrespondiert jede Position, von der der Raytracer 102 einen Strahl ausstrahlt, zu einem jeweiligen Pixel einer Region 210, wie gezeigt. Zum Beispiel können Positionen - wie beispielsweise Positionen 330, 332 und 334 - bestimmt werden, indem ein virtueller Schirm von Pixeln (z.B. aus einem z-Puffer) in den Welt-Raum (world-space) transformiert wird. Der virtuelle Schirm kann für eine Ansicht von einer Kamera in der virtuellen Umgebung 300 repräsentativ sein und die Positionen können in einigen Ausführungsbeispielen als Pixel oder Welt-Raum Pixel (z.B. der Renderung 200) referenziert werden. In anderen Ausführungsbeispielen mögen die Positionen nicht eine solche eins-zu-eins Entsprechung mit Pixeln haben. Ferner können in anderen Beispielen die Positionen als jeweilige Punkte und/oder Bereiche, an denen jeweilige Augen-Strahlen (z.B. von einer Kamera durch einen virtuellen Schirm, welcher die Pixel aufweist, hindurch ausgestrahlt werden) mit der virtuellen Umgebung interagieren, bestimmt werden.
  • In verschiedenen Ausführungsbeispielen kann die Genauigkeit eines Samples an einer Position limitiert sein, da jeder Strahl nur eine partielle Information für die Position bereitstellen mag. Als solches kann das Verwenden einer begrenzten Anzahl von Strahlen, um die virtuelle Umgebung 300 zu sampeln, zu dem Auftreten von Rauschen in den Bildern führen, insbesondere in gewissen Positionen der virtuellen Umgebung 300. Um das vorige zu illustrieren, die Strahlen, die in dem gezeigten Beispiel verwendet werden, sind Schattenstrahlen, die verwendet werden, um einen oder mehrere Aspekte der Beleuchtungsbedingungen an Positionen in Bezug auf eine Lichtquelle 320 in der virtuellen Umgebung 300 zu sampeln. Das Bild-Render-System 100 kann diese Informationen zum Beispiel verwenden, um Schatten in einem Bild basierend auf den Beleuchtungsbedingungen an den Positionen zu rendern. In einigen Ausführungsbeispielen werden Strahlen von Positionen ausgestrahlt, um eine zufällige oder quasi-zufällige Position an der Lichtquelle 320 zu sampeln. Der Raytracer 102 kann irgendeinen geeigneten Ansatz für Raytracing, wie beispielsweise stochastisches Raytracing, verwenden. Beispiele von stochastischen Raytracing-Techniken, die verwendet werden können, umfassen solche die Monte-Carlo oder Quasi-Monte-Carlo Sampling Strategien anwenden. In dem gezeigten Beispiel strahlt der Raytracer 102 (z.B. jeder Thread) in dem Raytracing-Durchgang 314 einen Strahl je Position und/oder Pixel zum Sampeln aus. In anderen Ausführungsbeispielen kann eine andere Quantität von Strahlen je Position oder Pixel ausgestrahlt werden, keine Strahlen mögen für gewissen Positionen oder Pixel ausgestrahlt werden und/oder unterschiedliche Anzahlen von Strahlen können für unterschiedliche Positionen oder Pixel ausgestrahlt werden (z.B. mittels jedes Threads). Wo mehrere Strahlen von einem Pixel oder einer Position ausgestrahlt werden, kann ein Wert für einen Pixel oder Zelle in der Renderung 200 zu einer Gesamtheit (z.B. Durchschnitt) von Werten der geraytracten Samples des Pixels oder der Position korrespondieren.
  • Während nur die Lichtquelle 320 gezeigt ist, können die Beleuchtungsbedingungen an Positionen ähnlich mit Bezug auf andere Lichtquellen und/oder Objekte in der virtuellen Umgebung 300 gesampelt werden, die mit den geraytracten Samples, die mit Bezug auf die Lichtquelle 320 abgeleitet werden, kombiniert werden, oder können verwendet werden, um eine zusätzliche Renderung 200 (oder Maske 202) zu erzeugen, die mittels des Bildfilterers 104 gefiltert und dem Bildkombinierer 106 bereitgestellt werden kann. Zum Beispiel können Beleuchtungsbedingungen für unterschiedliche Belichtungsquellen bestimmt und getrennt gefiltert (z.B. unter Verwenden der Filtertechniken, wie mit Bezug auf 1 beschrieben) und mittels des Bildkombinierers 106 (z.B. als eine andere Eingabe für den Bildkombinierer 106) kombiniert werden.
  • Wie gezeigt können einige der Strahlen wie beispielsweise Strahl 344 mit der Lichtquelle 320 interagieren, was zu geraytracten Samples führt, die anzeigen, das Licht der Lichtquelle 320 korrespondierende Positionen beleuchtet. In einigen Ausführungsbeispielen können Strahlen, die in diese Kategorie fallen, ein Sichtbarkeits-Wert von 1 zugeordnet werden, um anzuzeigen, dass diese in Bezug auf die Lichtquelle 320 sichtbar sind (angezeigt durch keine Schattierung in 2 und 3). Andere Strahlen wie beispielsweise Strahl 340 und Strahl 342 können mit einem Objekt interagieren, was zu geraytracten Samples führt, die anzeigen, das Licht der Lichtquelle 320 zumindest zum Teil blockiert und/oder abgehalten wird, die Positionen zu erreichen. Ein Beispiel eines solchen Objekts ist der Verdecker 322, der die Strahlen blockiert, die Lichtquelle 320 zu erreichen. In einigen Ausführungsbeispielen können Strahlen, die in diese Kategorie fallen, ein Sichtbarkeits-Wert von 0 zugeordnet werden, um anzuzeigen, dass diese in Bezug auf die Lichtquelle 320 nicht sichtbar sind (angezeigt durch eine Schattierung in 2 und 3). Da der Sichtbarkeits-Wert einen von zwei möglichen Werten annehmen kann, kann er zu einem binären Signal korrespondieren.
  • In zumindest einem Ausführungsbeispiel kann ein Thread die Sichtbarkeit für eine korrespondierende Position(en) bestimmen und einen korrespondierenden Wert(e) für einen oder mehrere Pixel der Region 210 speichern, die zu dem Thread (z.B. in Übereinstimmung mit Shadercode) korrespondiert. Zum Beispiel kann jeder Thread einen Sichtbarkeits-Wert (z.B. 1 oder 0) für eine(n) Position/Pixel in einem Register bestimmen und speichern. In zumindest einem Ausführungsbeispiel kann jeder Thread ein dediziertes Register zum Speichern des/der Wert(e) haben. Die Renderdaten 122 von 1 können die Werte, die in den Registern der Threads gespeichert sind, repräsentieren.
  • In dem Beispiel der 3 kann der Raytracer 102 bestimmen, dass in der Region 210D die Positionen 330 und 332 für die Lichtquelle 320 nicht sichtbar sind und alle anderen Positionen sichtbar sind. Die Position 330 ist ein Beispiel für eine Position, die innerhalb eines Halbschattens eines Schattens sein kann, der mittels des Verdeckers 322 geworfen wird, und die Beleuchtungsbedingungen können genauer berechnet werden, indem die geraytracten Samples, die von mehreren Strahlen abgeleitet werden, kombiniert werden. Zum Beispiel kann ein geraytractes Sample der Position 330, das unter Verwenden nur des Strahls 342 erzeugt wird, anzeigen, dass die Position 330 vollständig für Empfangen von Licht der Lichtquelle 320 blockiert ist. Jedoch kann es, wenn ein geraytractes Sample von der Position 330 unter Verwenden eines anderen Strahls erzeugt würde, anzeigen, dass die Position 330 zumindest teilweise durch die Lichtquelle 320 beleuchtet wird, so dass die Position 330 innerhalb eines Halbschattens ist.
  • Begrenzen der Anzahl von Strahlen, die verwendet werden, um Samples für Positionen zu erzeugen, kann daher zu Rauschen führen, was zu visuellen Artefakten in Daten führt, die mittels des Bild-Render-Systems 100 gerendert werden. Der Bildfilterer 104 kann verwendet werden, um Entrauschungstechniken zu implementieren, um das Rauschen zu reduzieren. In verschiedenen Beispielen können die Entrauschungstechniken umfassen, dass der Bildfilterer 104 räumlich und/oder zeitliches Filtern von Beleuchtungsbedingungs-Daten oder anderer Renderdaten macht, die zu dem geraytracten Samples des Raytracers 102 korrespondieren. Zum Beispiel kann der Bildfilterer 104 einen oder mehrere räumlicher-Filter Durchgänge und/oder zeitlicher-Filter Durchgänge auf die Renderdaten 122 des Raytracers 102 anwenden. In Übereinstimmung mit der Offenbarung kann der Bildfilterer 104 die Maskendaten 124 oder Daten, die auf andere Weise zu den Werten korrespondieren, die mittels der Threads aus den Werten von geraytracten Samples erzeugt werden, als Eingaben verwenden, um das Entrauschen zu informieren.
  • Zurückkehrend zu 2 kann ein Thread einen Wert(e) speichern, der/die mittels des Threads aus Werten von geraytracten Samples von zumindest einem anderen Thread in einer Region der Maske 202 erzeugt wird/werden. Die Region der Maske 202 kann einen oder mehrere Pixel oder Zellen der Maske 202 aufweisen. In dem vorliegenden Beispiel ist jede Region der Maske 202 ein einzelner Pixel oder Zelle, aber in anderen Fällen können unterschiedliche Regionen unterschiedliche Anzahlen von Pixeln oder Zellen aufweisen und/oder jede Region kann mehr als einen Pixel oder Zelle aufweisen. Die Maske 202 umfasst Regionen 212A, 212B, 212C, 212D, und 212E bis 212N (alle kollektiv als Regionen 212 referenziert). In einigen Beispielen wird jede Region 210 der Renderung 200 auf eine einzelnen Region 212 gemappt (z.B. mittels des Shadercodes, der mittels der Threads ausgeführt wird). Daher kann die Maske 202 64.800 Pixel oder Zellen aufweisen. In anderen Beispielen kann eine Region 210 auf mehrere Regionen 212 gemappt werden und/oder eine Region 212 kann zu mehreren Regionen 210 korrespondieren (z.B. Werte aus mehreren Regionen 210 können vermischt oder auf andere Weise mittels des/der Thread(s) aggregiert werden, um Werte in einer oder mehreren Regionen 210 zu bilden).
  • Zum Beispiel kann zumindest ein Thread der zeitlich planbaren Einheit, die zu der Region 210A korrespondiert, einen Wert speichern, der mittels des Threads in der Region 212A der Maske 202 erzeugt wird, wobei der Wert aus den Werten von Threads in der zeitlich planbaren Einheit erzeugt wird. Auch kann ein Thread der zeitlich planbaren Einheit, die zu der Region 210B korrespondiert, einen Wert speichern, der mittels des Threads in der zeitlich planbaren Einheit in der Region 212B der Maske 202 erzeugt wird, wobei der Wert aus den Werten von Threads in der zeitlich planbaren Einheit erzeugt wird. Ähnlich kann die Region 210C zu der Region 212C korrespondieren, die Region 210D kann zu der Region 212D korrespondieren, die Region 210E kann zu der Region 212E korrespondieren, und die Region 210N kann zu der Region 212N korrespondieren.
  • Wie hierin beschrieben kann ein Thread einen Wert für die Maske 202 berechnen (der auch als ein Maskenwert referenziert werden kann), basierend zumindest auf den geraytracten Samples jedes Threads innerhalb einer Gruppe von Threads und/oder zeitlich planbaren Einheit. Generell mögen Threads einer zeitlich planbaren Einheit nur fähig sein, auf Werte von geraytracten Samples zuzugreifen, die mittels anderer Threads in der zeitlich planbaren Einheit erzeugt werden. Daher kann jede Gruppe von Threads innerhalb einer gleichen zeitlich planbaren Einheit sein. In dem gezeigten Beispiel weist jede zeitlich planbare Einheit eine einzelne Gruppe von Threads auf und die Gruppe von Threads umfasst alle der Threads der zeitlich planbaren Einheit. Zumindest ein Thread (z.B. jeder Thread) kann die geraytracten Samples für die zeitlich planbare Einheit aggregieren und zumindest ein Thread (z.B. einer der Threads) kann ein Ergebnis in einer Region(en) der Maske 202 speichern. Daher kann die Maske 202 eine geringere Auflösung als der Frame, der gerendert wird, haben, was den Prozessier- und Speicherbedarf reduzieren kann.
  • In anderen Beispielen kann eine zeitlich planbare Einheit in mehrere Gruppen von Threads unterteilt sein. Wo eine zeitlich planbare Einheit mehrere Gruppen von Threads umfasst, kann eine Region 212 der Maske 202 für jede Gruppe von Threads bereitgestellt werden, oder die Gruppen können sich eine Region 212 teilen. Zum Beispiel kann die Region 210N der Renderung 200 eine Gruppe von 16 Threads, die zu einer 4x4 Gruppe von Pixeln linkerhand korrespondiert, und eine Gruppe von 16 Threads umfassen, die zu einer 4x4 Gruppe von Pixeln rechterhand korrespondiert. In diesem Beispiel kann die Region 212N der Maske 202 stattdessen zwei benachbarte Regionen aufweisen - eine für jede Subgruppe der Region 212D. Als Beispiele kann ein gleicher Thread(s) der zeitlich planbaren Einheit die Werte für beide Gruppen von Threads berechnen und speichern, oder unterschiedliche Threads können die Maskenwerte für jede Gruppe von Threads berechnen und speichern. Zum Beispiel kann für jede Gruppe von Threads jeder Thread innerhalb der Gruppe einen Maskenwert berechnen und zumindest einer dieser Threads kann den Wert in der Maske 202 (z.B. in einem Puffer) speichern. Ein Aufteilen einer zeitlich planbaren Einheit in mehrere Gruppen von Threads kann verwendet werden, um die Auflösung der Maske 202 zu vergrößern.
  • In zumindest einem Ausführungsbeispiel kann ein Thread geraytracte Samples empfangen und einen Wert für die Maske 202 berechnen unter Verwenden einer Welle-intrinsische-Funktion(en). Eine Welle-intrinsische-Funktion kann eine eingebaute Funktion benennen, die zum Verwenden bereitsteht, in Code der mittels eines oder mehrerer Threads einer zeitlich planbaren Einheit ausgeführt wird. Eine Welle-intrinsische-Funktion kann es einem Thread erlauben auf einen Wert eines anderen Threads in der zeitlich planbaren Einheit zuzugreifen. Verschiedene Welle-Intrinsische-Funktionen können angewandt werden, was von dem Format und/oder gewünschten Information abhängt, die mittels des/der Wert(e) erfasst werden soll, die für die Maske 202 berechnet werden. Als ein Beispiel kann ein Thread eine Welle-aktive-Summe-Funktion ausführen. Die Welle-aktive-Summe-Funktion kann einen Wert (z.B. Sichtbarkeits-Wert) eines geraytracten Samples aus jedem Thread der zeitlich planbaren Einheit (von den Registern) empfangen, eine Summe dieser Werte berechnen und die berechnete Summe als ein Ergebnis zurückgeben.
  • In dem gezeigten Beispiel kann der berechnete Wert anzeigen, ob ein oder mehrere Pixel und/oder Positionen der virtuellen Umgebung in einem Halbschatten sind. Zum Beispiel können die Werte der geraytracten Samples Sichtbarkeits-Werte sein, die entweder 0 oder 1 sind. Für eine Region 210 der Renderung 200 kann die Summe der Sichtbarkeits-Werte zwischen 0 und 32 sein. Ein Wert von 0 kann anzeigen, dass Positionen, die zu der Region korrespondieren, voll verschattet sind. Die Region 210E ist ein Beispiel für eine Region, die als völlig verschattet angezeigt sein kann. Ein Wert von 32 kann anzeigen, dass Positionen, die zu der Region 210 korrespondieren, voll beleuchtet sind. Die Regionen 210A, 210B und 210C sind Beispiele für Regionen, die als völlig beleuchtet angezeigt werden können. Ein Wert zwischen 0 und 32 (der Gesamtanzahl von Threads in der Gruppe) kann anzeigen, dass Positionen, die zu der Region korrespondieren, in einem Halbschatten sind. Die Regionen 210D und 210N sind Beispiele für Regionen, die als in einem Halbschatten angezeigt sind. Während die Beispiele für die gesamten Regionen 210 bereitgestellt werden, können sie auch ähnlich auf Subgruppen oder -regionen der Regionen 210 angewendet werden.
  • Wie hierin beschrieben kann die Maske 202 basierend auf zumindest den Werten, die von den geraytracten Samples errechnet werden, erzeugt werden. Wenn Maskenwerte der Maske 202 anzeigen, ob Positionen in der virtuellen Umgebung 300 und/oder Pixel zu einem Halbschatten korrespondieren, kann die Maske als eine Halbschattenmaske referenziert werden. Während die Werte (z.B. mittels einer Welle-intrinsische-Funktion zurückgegeben) als Maskenwerte der Maske 202 verwendet werden können, in zumindest einem Ausführungsbeispiel, verwendet ein Thread einen Wert, um einen Maskenwert zu berechnen, und speichert den Maskenwert in der Maske 202. Als ein Beispiel können die Maskenwerte der Maske 202 binäre Werte sein und jeder binäre Wert kann anzeigen, ob eine Region 212 zu einem Halbschatten korrespondiert. In zumindest einem Ausführungsbeispiel kann ein Wert von 1 anzeigen, dass eine Region 212 zu einem Halbschatten korrespondiert, und ein Wert von 0 kann anzeigen, dass eine Region 212 außerhalb ist oder nicht zu einem Halbschatten korrespondiert (ist als voll beleuchtet oder völlig beschattet angezeigt). Daher kann, unter Verwenden des obigen Beispiels, wenn der Wert, der aus den geraytracten Samples berechnet wird, 0 oder 32 ist, der Thread einen Maskenwert von 1 berechnen und speichern. Wenn der Wert, der aus den geraytracten Samples berechnet wird, größer als 0 und kleiner als 32 ist, kann der Thread einen Maskenwert von 0 berechnen und speichern. Daher haben die Regionen 212D und 212N einen Maskenwert von 0 und die anderen Regionen 212 haben einen Wert von 1. Während 0 und 32 als Beispiele für Schwellwerte verwendet werden, können unterschiedliche Schellwerte verwendet werden, um einen Maskenwert zu bestimmen und/oder nur der eine oder der andere der Schwellwerte kann eingesetzt werden.
  • Während der/die Wert(e), die mittels eines Threads aus geraytracten Samples zumindest eines anderen Threads berechnet werden, im vorliegenden Beispiel eine Summe sind, können andere Arten von statistischen Werten berechnet werden. Zum Beispiel ist in zumindest einem Ausführungsbeispiel ein berechneter Wert eine Varianz in den Werten der Gruppe von Threads. Ferner kann mehr als ein statistischer Wert berechnet werden und kann verwendet werden, um einen Maskenwert zu bestimmen, oder kann für einen anderen Zweck verwendet werden. Zum Beispiel kann die Summe mittels des Bildfilterers 104 verwendet werden, um zu bestimmen, ob ein Anwenden eines Entrauschungsfilters auf einen Pixel übersprungen wird, und die Varianz kann verwendet werden, um einen Radius eines Entrauschungsfilters, der auf einen Pixel angewendet wird und/oder ein Bereich von Werten zu bestimmen, der in der Entrauschung, die mittels des Entrauschungsfilters durchgeführt wird, einzubeziehen ist. Statistische Informationen betreffend geraytracten Samples können zum Entrauschen jeder von einer Vielfalt von unterschiedlichen Typen von geraytracten Samples nützlich sein und offenbarte Ausführungsbeispiele sind nicht auf Schatten oder Sichtbarkeit bezogene Beispiele eingeschränkt. Zum Beispiel, wie hierin beschrieben, können die geraytracten Samples von jeder Bedingung der virtuellen Umgebung, Beleuchtungsbedingung oder anderer Art (z.B. Trefferdistanz (hit distance), Tiefe, usw.) sein.
  • Wie hierin beschrieben kann der Bildfilterer 104 die Maskendaten 124 oder Daten, die auf andere Art zu Werten korrespondieren, die mittels der Threads aus Werten von geraytracten Samples (z.B. nicht notwendigerweise eine Maske) erzeugt werden, als Eingaben verwenden, um das Entrauschen zu informieren. Der Bildfilterer 104 kann Daten filtern, unter Verwenden von irgendeiner von einer Vielfalt von möglichen Filtertechniken. In einigen Beispielen führt der Bildfilterer 104 Filterung durch, unter Verwenden eines Kreuz- (cross) (oder verbundenen, join) bilateralen Filters. Der Kreuz-bilaterale Filter kann jeden Pixel mittels eines gewichteten Durchschnitts von nahen Pixel ersetzen, unter Verwenden von gaußverteilten Gewichten, die den Abstand, Varianz und/oder andere Unterschiede zwischen Pixeln berücksichtigen, um Bilder zu führen. In zumindest einem Ausführungsbeispiel kann dies involvieren, dass die Maskendaten 124 oder andere Daten, die auf andere Weise zu Werten, die mittels der Threads aus geraytracten Samples erzeugt werden, korrespondieren, mittels des Bildfilterers 104 analysiert werden, um die Filtergewichte zu bestimmen. Edge-Stopp-Funktionen können verwendet werden, um gemeinsame Oberflächen zu identifizieren, unter Verwenden von G-Puffer Attributen, um die Robustheit des Kreuz-bilateralen Filters unter Eingaberauschen zu verbessern.
  • In zumindest einem Ausführungsbeispiel verwendet der Bildfilterer 104 die Maskendaten 124, um ein Anwenden eines Entrauschungsfilters auf einen Pixel basierend auf einem Maskenwert, der mit dem Pixel assoziiert ist, früh zu beenden oder zu überspringen. Zum Beispiel kann der Bildfilterer 104 ein Anwenden eines Entrauschungsfilters für einen Pixel überspringen basierend zumindest auf dem Maskenwert, der anzeigt, dass der Pixel nicht zu einem Halbschatten korrespondiert. In zumindest einem Ausführungsbeispiel mappt der Bildfilterer 104 den/die Wert(e) für jede Region 212 in den Maskendaten auf jeden Pixel, der zu der Region 210 (oder genereller Gruppe von Threads) korrespondiert, wenn der Pixel fürs Entrauschen evaluiert wird. Zum Beispiel kann der Wert von 0 für die Region 212A der Maske 202 für jeden Pixel verwendet werden, der zu der Region 210A in der Renderung 200 korrespondiert. Basierend darauf, dass der Bildfilterer 104 bestimmt, dass ein Pixel auf einen Wert von 1 gemappt oder auf andere Weise damit assoziiert wird, kann der Bildfilterer einen Entrauschungsfilter auf den Pixel anwenden, oder anderenfalls kann der Pixel übersprungen werden.
  • Wie hierin beschrieben können ein oder mehrere Parameter eines/mehrerer Filter(s) und/oder Filterdurchgänge, die mittels des Bildfilterers 104 angewendet werden, bestimmt werden basierend zumindest auf den Maskenwert(en) und/oder statistischen Wert(en), die mittels eines Threads berechnet werden. In zumindest einem Ausführungsbeispiel kann das Filtern für einen/mehrere Pixel basierend zumindest zum Teil auf dem Wert (z.B. Varianz) geführt werden, der mittels des Threads für den/die Pixel berechnet wird. Zum Beispiel definieren der eine oder die mehreren Parameter einen Bereich von Filterwerten, Filtergewichten von Pixeln und/oder Filterradien für den/die Filter und/oder Filterdurchgänge. Der Bildfilterer 104 kann die räumlichen und/oder zeitlichen Samples von Renderdaten filtern, unter Verwenden des einen oder der mehreren Paramater. In verschiedenen Beispielen kann ein Bereich von Filterwerten einen Satz von Filterwerten für einen/mehrere Pixel definieren und kann auf der Varianz für den/die Pixel basieren. Zum Beispiel kann, beim Anwenden eines Filters und/oder Filterdurchganges auf einen Pixel, der Bildfilterer 104 den Satz der Filterwerte aus dem Filtern ausschließen, basierend zumindest darauf, dass der Satz außerhalb des Bereichs liegt. In Ausführungsbeispielen kann sich der Bereich und/oder Filterradius mit der Varianz vergrößern und verkleinern.
  • Jeder der hierin beschriebenen verschiedenen Filter und/oder Filterdurchgänge kann unter Verwenden eines Filterkernel angewendet werden. Die Filter können auch eine oder mehrere Filterrichtungen haben. Der Filterkernel eines Filters kann auf eine Matrix referenzieren (z.B. ein rechteckiges Array), die eine oder mehrere Faltungen zum Prozessieren von Bilddaten (und/oder Beleuchtungsbedingungs-Daten oder Renderdaten) für ein Bild (z.B. Datenwerte von Pixeln) definiert, um eine oder mehrere Charakteristiken des Bildes zu ändern, wie beispielsweise Schattierungen und/oder Farben der Pixel für das Bild. In einigen Beispielen kann ein Filterkernel als ein separater Filter angewendet werden. Beim Anwenden eines Filters als ein separater Filter kann die Matrix unter Verwenden von mehreren Submatrizen oder Filter repräsentiert werden, die separat auf Bilddaten in mehreren Durchgängen angewendet werden können. Wenn ein Filterkernel für einen separaten Filter bestimmt oder berechnet wird, zieht die Offenbarung in Erwägung, dass die Submatrizen direkt berechnet werden können oder aus einer anderen Matrix abgeleitet werden können.
  • Jedes Element einer Matrix eines Filterkernels kann zu einer jeweiligen Pixelposition korrespondieren. Eine der Pixelpositionen einer Matrix kann eine anfängliche Pixelposition repräsentieren, die zu einem Pixel korrespondiert, auf den der Filter angewendet wird, und kann im Zentrum der Matrix positioniert sein (z.B. verwendet, um die Position des Filters zu bestimmen). Zum Beispiel kann, wenn ein Filter auf einen Pixel, der zu der Position 332 von 3 korrespondiert, angewendet wird, der Pixel die anfängliche Pixelposition definieren. Durch Anwenden einiger Filter können Datenwerte (z.B. Sichtbarkeitswerte) für andere Pixel an Bildpositionen verwendet werden, die relativ zu dem Pixel bestimmt werden, um einen Datenwert(e) für die Pixel innerhalb des Fußabdrucks des Filterkernels zu bestimmen. Eine Filterrichtung kann die Ausrichtung der Matrix relativ zu dem Bild und/oder Pixel definieren, auf das der Filter entlang einer Filterbreite angewendet wird. Daher können, wenn ein Filter auf einen Pixel angewendet wird, andere Pixel für andere Pixelpositionen einer Matrix eines Filterkernels relativ zu der anfänglichen Pixelposition bestimmt werden, unter Verwenden der Filterrichtung(en) und des Filterkernels.
  • Jedes Element einer Matrix eines Filterkernels kann ein Filtergewicht für die Pixelposition aufweisen. Die Matrix kann auf ein Bild angewendet werden, unter Verwenden von Faltung, in der ein Datenwert für jeden Pixel des Bildes, das zu jeder Pixelposition der Matrix korrespondiert, addiert oder auf andere Weise mit Datenwerten von Pixeln kombiniert werden kann, die zu den lokalen Nachbarn in der Matrix korrespondieren, wie mittels der Filterwerte (auch als Filtergewichte referenziert) gewichtet. Für einen oder mehrere der hierin beschrieben Filter können die Filterwerte konfiguriert sein, um die Pixel zu verwischen, wie beispielsweise mittels Fittens einer Verteilung(en) an den Filterkernel (z.B. zu einer Breite und einer Höhe).
  • Die Datenwerte, auf die der/die Filter angewendet werden, können zu Beleuchtungsbedingungs-Daten (z.B. Sichtbarkeitsdaten) für die Pixel korrespondieren. Daher kann das Anwenden einer Matrix eines Filterkernels auf einen Pixel bewirken, dass die Beleuchtungsbedingungs-Daten zumindest teilweise unter den Pixeln gemeinsam benutzt werden, die zu den Pixelpositionen des Filterkernels korrespondieren. Das gemeinsame Benutzen der Beleuchtungsbedingungs-Daten kann Rauschen wegen dürftigen Sampeln von Beleuchtungsbedingungen im Raytracing mindern. In zumindest einem Ausführungsbeispiel führt der Bildfilterer 104 räumliches Filtern der Renderdaten durch. In einigen Fällen kann der Bildfilterer 104 auch zeitliches Filtern durchführen. Zeitliches Filtern kann geraytracte Sample einsetzen, die ähnlich zu den mit Bezug auf 3 beschriebenen, aber für vorherige Zustände der virtuellen Umgebung und/oder vorherige Ausgabeframes, erzeugt werden. Daher kann das zeitliche Filtern die effektive Sample-Zählung von geraytracten Samples vergrößern, die verwendet werden, um die gefilterten Beleuchtungsbedingungs-Daten für einen Pixel zu bestimmen und/oder können die zeitliche Stabilität der gefilterten Beleuchtungsbedingungs-Daten für den Pixel vergrößern.
  • Da zeitlich geraytracte Samples zu verschiedenen Zuständen der virtuellen Umgebung 300 korrespondieren können, mögen gewisse Samples nicht relevant sein oder so relevant für den gegenwärtigen Zustand der virtuellen Umgebung 300 (z.B. Objekte oder die Kamera kann sich bewegen, Lichtquellen können sich ändern), präsentieren das Risiko von visuellen Artefakten, wenn sie fürs Filtern verwendet werden. Einige Ausführungsbeispiele können Varianz in Werten (z.B. mittels der Threads der zeitlich planbaren Einheiten gemäß 2 berechnet), die zu zeitlich geraytracten Samples korrespondieren, verwenden, um zeitliches Filtern zu führen, so dass diese möglichen Artefakte reduziert oder eliminiert werden. In Übereinstimmung mit weiteren Aspekten der vorliegenden Offenbarung kann räumliches Filtern für einen Pixel für einen Frame übersprungen werden, basierend zumindest zum Teil auf Bestimmen, dass der Mittelwert, das erste Moment der Varianz und/oder Varianz, die mittels der Threads der zeitlich planbaren Einheiten aus zeitlich geraytracten Samples berechnet werden, die mit dem Pixel assoziiert sind, größer oder gleich zu einer ersten Schwelle und/oder kleiner oder gleich zu einer zweiten Schwelle sind, und dass eine Zählung der Werte eine dritte Schwelle überschreitet.
  • Gegenwärtige Ansätze können für jeden geeigneten Raytracing-Effekt oder - Technik verwendet werden, wie beispielsweise für globale Beleuchtung, Umgebungsverdeckung, Schatten, Reflektionen, Refraktionen, Streuungsphänomenen und Dispersionsphänomenen. Daher können zum Beispiel, während in einigen Beispielen die geraytracten Samples zu Sichtbarkeitssamples korrespondieren können, in anderen Beispielen die geraytracten Samples zu Farbleuchtdichte korrespondieren. Ferner können gegenwärtige Ansätze in einer unterschiedlichen Renderpipeline als die in 1 gezeigte implementiert werden, die den Bildkombinieren 106 verwenden oder nicht verwenden mag, um Ausgabe aus dem 3D-Renderer 108 zu kombinieren.
  • Nun Bezug nehmend auf 4 bis 6 weist jeder Block von Verfahren 400, 500 und 600 oder anderer hierin beschriebenen Verfahren einen Berechnungsprozess auf, der unter Verwenden irgendeiner Kombination von Hardware, Firmware und/oder Software durchgeführt wird. Zum Beispiel können verschiedene Funktionen mittels eines Prozessors ausgeführt werden, der im Speicher gespeicherte Befehle ausführt. Die Verfahren können auch als computerlesbare Befehle verkörpert werden, die in einem Computerspeichermedium gespeichert werden. Die Verfahren können als Standalone-Anwendung, ein Service oder gehosteter Service (standalone oder in Kombination mit einem anderen gehosteten Service) oder als Plug-In zu einem anderen Produkt, um einige zu nennen, bereitgestellt werden. Zusätzlich werden die Verfahren beispielhaft in Bezug auf das Bild-Reder-System 100 (1) beschrieben. Jedoch können diese Verfahren zusätzlich oder alternativ mittels jedes einem Systems oder jeder Kombination von Systemen ausgeführt werden, einschließlich, aber nicht darauf beschränkt, der hierin beschriebenen.
  • 4 ist ein Flussdiagramm, das ein Beispiel für ein Verfahren 400 zeigt, zum Verwenden einer zeitlich planbaren Einheit, um Sichtbarkeitswerte und einen Wert, der anzeigt, dass eine Position in einer Szene zu einem Halbschatten korrespondiert, zu bestimmen, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung. Das Verfahren 400 umfasst bei Block B402 ein Bestimmen, unter Verwenden einer zeitlich planbaren Einheit, von ersten Werten, die zur Sichtbarkeit korrespondieren. Zum Beispiel kann der Raytracer 102 unter Verwenden von Threads einer zeitlich planbaren Einheit, die zu der ersten Region 210D korrespondiert, erste Werte bestimmen, die zur Sichtbarkeit der virtuellen Umgebung 200 in Bezug auf zumindest die Lichtquelle 320 korrespondieren, basierend zumindest auf einem Ausstrahlen von Strahlen in die virtuelle Umgebung 300, wie beispielsweise Strahlen 340, 342 und 344. Die Renderdaten 122 von 1 können die ersten Werte repräsentieren oder die ersten Werte können auf andere Weise verwendet werden, um die Renderdaten 122 abzuleiten.
  • Das Verfahren 400 umfasst bei Block B404 ein Empfangen, unter Verwenden von zumindest einen Thread der zeitlich planbaren Einheit, eines zweiten Werts, der aus den ersten Werten berechnet wird, wobei der zweite Wert anzeigt, dass eine oder mehrere Positionen zu einem Halbschatten korrespondieren. Zum Beispiel kann der Raytracer 102, unter Verwenden von zumindest eines Threads der zeitlich planbaren Einheit, einen zweiten Wert empfangen, der aus den ersten Werten berechnet wird. Zum Beispiel kann der Thread eine Welle-intrinsische-Funktion ausführen, um einen ersten Wert aus Registern zu empfangen, die mit einem oder mehreren anderen Threads der zeitlich planbaren Einheit assoziiert sind, und den zweiten Wert aus dem/den ersten Wert(en) berechnen. Der zweite Wert kann anzeigen, dass eine oder mehrere Positionen in der virtuellen Umgebung 300 zu einem Halbschatten korrespondieren.
  • Das Verfahren 400 umfasst bei Block B406 ein Anwenden eines Entrauschungsfilters auf die ersten Werte, unter Verwenden des zweiten Werts, basierend auf einem Bestimmen, unter Verwenden des zweiten Werts, dass die eine oder die mehreren Positionen zu dem Halbschatten korrespondieren. Zum Beispiel kann die Maske 124 von 1 den zweiten Wert repräsentieren oder die zweiten Werte können auf andere Weise verwendet werden, um die Maskendaten 124 abzuleiten. Zum Beispiel kann der Thread einen Maskenwert (z.B. einen binären Wert) aus dem zweiten Wert bestimmen und den Maskenwert als die Maskendaten 124 speichern.
  • Das Verfahren 400 umfasst bei Block B408 ein Anwenden eines Entrauschungsfilters auf Renderdaten, die zu den ersten Werten korrespondieren, basierend zumindest auf einem Bestimmen, unter Verwenden des zweiten Werts, dass die eine oder die mehreren Positionen zu dem Halbschatten korrespondieren. Zum Beispiel kann der Bildfilterer 104 einen Entrauschungsfilter auf die Renderdaten 122 anwenden, basierend zumindest auf einem Bestimmen, unter Verwenden des zweiten Werts, dass die eine oder die mehreren Positionen zu dem Halbschatten korrespondieren. Während das Verfahren 400 in Bezug auf eine zeitlich planbare Einheit beschrieben wird, kann das Verfahren 400 unter Verwenden von irgendeiner Anzahl von zeitlich planbaren Einheiten durchgeführt werden, die parallel arbeiten. Zusätzlich können in einigen Ausführungsbeispielen alle Threads einer zeitlich planbaren Einheit in dem Verfahren 400 eingesetzt werden oder eine Gruppe oder Subset der Threads. Ferner brauchen die ersten Werte nicht von allen Threads oder Gruppe von Threads der zeitlich planbaren Einheit empfangen werden.
  • 5 ist ein Flussdiagramm, das ein Beispiel eines Verfahren 500 zum Verwenden von Gruppen von Threads von einer oder mehreren zeitlich planbaren Einheiten zeigt, um geraytracte Samples von Sichtbarkeit und Werten zu bestimmen, die anzeigen, ob Pixel zu Halbschatten korrespondieren, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung. Das Verfahren 500 umfasst bei Block B502 ein Bestimmen, unter Verwenden von einer oder mehreren zeitlich planbaren Einheiten, von geraytracten Samples von Sichtbarkeit. Zum Beispiel kann der Raytracer 102, unter Verwenden von Gruppen von Threads von einer oder mehreren zeitlich planbaren Einheiten von einen oder mehreren Parallelprozessoren, geraytracte Samples von Sichtbarkeit von Pixeln bestimmen, die der Gruppe zugeordnet sind mit Bezug auf zumindest die eine Lichtquelle 320 in der virtuellen Umgebung 300. In zumindest einem Ausführungsbeispiel kann eine Gruppe von Threads auf jeden Thread einer zeitlich planbaren Einheit oder ein Subset von Threads einer zeitlich planbaren Einheit referenzieren.
  • Das Verfahren 500 umfasst bei Block B504 ein Bestimmen von Werten für Gruppen von Threads der einen oder mehreren zeitlich planbaren Einheiten, wobei zumindest ein Thread einer Gruppe einen Wert von den Werten aus den geraytracten Samples der Gruppe berechnet, wobei der Wert anzeigt, ob Pixel der Gruppe zu einem Halbschatten korrespondieren. Zum Beispiel kann der Raytracer 102 Werte für die Gruppen von Threads bestimmen, wie beispielsweise jede zeitlich planbare Einheit, die zu Regionen 210 und/oder Subregionen davon korrespondiert. Für jede Gruppe der Gruppen von Threads kann zumindest ein Thread der Gruppe (z.B. jeder Thread) einen Wert der Werte aus den geraytracten Samples der Gruppe berechnen. Der Wert kann anzeigen, ob zumindest ein Pixel der Pixel (z.B. jeder Pixel), der der Gruppe zugeordnet ist, zu einem Halbschatten korrespondiert.
  • Das Verfahren 500 umfasst bei Block B506 ein Entrauschen von Renderdaten basierend zumindest auf dem Wert. Zum Beispiel kann Bildfilterer 104 die Renderdaten entrauschen, die zu den geraytracten Samples der Gruppe von Threads korrespondieren, basierend zumindest auf dem Wert der Gruppe für eine Vielzahl der Gruppen von Threads. Als ein Beispiel kann jeder Thread einer Gruppe einen Maskenwert (z.B. einen binären Wert) aus den Wert berechnen und ein oder mehrere der Threads der Gruppe kann/können den Maskenwert als die Maskendaten 124 speichern. Der Bildfilterer 104 kann die Maskendaten 124 verwenden, um die Renderdaten 122 zu entrauschen.
  • 6 ist ein Flussdiagramm, das ein Beispiel für ein Verfahren 600 zum Verwenden einer zeitlich planbaren Einheit zeigt, um geraytracte Samples und einen oder mehrere Werte, die zum Bestimmen von einen oder mehreren Parameter eines Entrauschungsfilters verwendet werden, zu bestimmen, in Übereinstimmung mit einigen Ausführungsbeispielen der vorliegenden Offenbarung. Das Verfahren 600 umfasst bei Block B602 ein Bestimmen, unter Verwenden einer zeitlich planbaren Einheit, von geraytracten Samples einer Szene. Zum Beispiel kann der Raytracer 102, unter Verwenden von Threads einer zeitlich planbaren Einheit von einem oder mehreren Parallelprozessoren, geraytracte Samples der virtuellen Umgebung 300 bestimmen.
  • Das Verfahren umfasst bei Block B604 ein Bestimmen, unter Verwenden zumindest eines Threads der zeitlich planbaren Einheit, eines oder mehrerer Werte, die aus den geraytracten Samples berechnet werden. Zum Beispiel kann der Raytracer 102, unter Verwenden zumindest eines Threads der zeitlich planbaren Einheit, einen oder mehrere Werte empfangen, die aus den geraytracten Samples berechnet werden. Zum Beispiel kann zumindest ein Thread eine Welle-intrinsische-Funktion ausführen, um einen Wert(e) von geraytracten Samples aus Registern zu empfangen, die mit einem oder mehreren anderen Threads der zeitlich planbaren Einheit assoziiert sind, und kann den einen oder die mehrere Werte aus den geraytracten Samples berechnen. In einigen Ausführungsbeispielen kann ein Wert(e) anzeigen, dass eine oder mehrere Positionen in der virtuellen Umgebung 300 zu einem Halbschatten korrespondieren. Jedoch kann in anderen Beispielen ein Wert(e) andere Informationen anzeigen, die fürs Entrauschen relevant sind.
  • Das Verfahren umfasst bei Block B606 ein Bestimmen von einem oder mehreren Parametern eines Entrauschungsfilters basierend zumindest auf dem einen oder den mehreren Werten. Zum Beispiel können die Maskendaten 124 von 1 den/die Wert(e) repräsentieren, oder der/die Wert(e) können auf andere Weise verwendet werden, um die Maskendaten 124 abzuleiten. Zum Beispiel kann ein Thread einen Maskenwert (z.B. einen binären Wert) aus dem/den Wert(en) bestimmen und den Maskenwert als die Maskendaten 124 speichern. In anderen Beispielen kann/können der/die Wert(e) als der/die Maskenwert(e) verwendet werden. Der Bildfilterer 104 kann einen oder mehrere Parameter eines Entrauschungsfilters bestimmen, basierend zumindest auf den einen oder mehreren Werten, zum Beispiel, indem die Maskendaten 124 eingesetzt werden.
  • Das Verfahren 600 umfasst bei Block B608 ein Erzeugen eines Frames der Szene basierend auf zumindest einem Anwenden des Entrauschungsfilter, um Daten zu rendern, die zu den geraytracten Samples korrespondieren, unter Verwenden des einen oder der mehreren Parameter. Zum Beispiel kann das Bild-Render-System 100 ein Ausgabebild 120 erzeugen, basierend zumindest auf einem Anwenden des Entrauschungsfilters auf die Renderdaten 122, die zu den geraytracten Samples korrespondieren, unter Verwenden des einen oder der mehreren Parameter. Während die Renderdaten 122 als Beispiel bereitgestellt werden, kann der Entrauschungsfilter verwendet werden, um andere Renderdaten zu entrauschen, wie beispielsweise Renderdaten, die zu geraytracten Samples von anderen Sichtbarkeitssamples korrespondieren.
  • BEISPIELHAFTE RECHENVORRICHTUNG
  • 7 ist ein Blockdiagramm von einem beispielhaften Rechengerät(en) 700, das/die zur Verwendung bei der Implementierung einiger Ausführungsbeispiele der vorliegenden Offenbarung geeignet ist/sind. Das Rechengerät 700 kann ein Interconnect-System 702 umfassen, das direkt oder indirekt die folgenden Geräte koppelt: Speicher 704, eine oder mehrere zentrale Verarbeitungseinheiten (CPUs) 706, eine oder mehrere Grafikverarbeitungseinheiten (GPUs) 708, eine Kommunikationsschnittstelle 710, Eingabe-/Ausgabe-(E/A-)-Ports 712, Eingabe-/Ausgabekomponenten 714, eine Leistungsversorgung 716 und eine oder mehrere Präsentationskomponenten 718 (z. B. Anzeige(n)), und eine oder mehrere Logikeinheiten 720.
  • Obwohl die verschiedenen Blöcke in 7 als über das Interconnect-System 702 mit Leitungen verbunden dargestellt sind, ist dies nicht einschränkend zu verstehen und dient nur der Übersichtlichkeit. In einigen Ausführungsbeispielen kann z. B. eine Präsentationskomponente 718, wie ein Anzeigegerät, als E/A-Komponente 714 betrachtet werden (z. B. wenn die Anzeige ein Touchscreen ist). Als ein anderes Beispiel können die CPUs 706 und/oder GPUs 708 Speicher umfassen (z. B. kann der Speicher 704 repräsentativ für eine Speichervorrichtung zusätzlich zu dem Speicher der GPUs 708, der CPUs 706 und/oder anderer Komponenten sein). Mit anderen Worten ist das Rechengerät von 7 lediglich illustrativ. Es wird nicht zwischen solchen Kategorien wie „Workstation“, „Server“, „Laptop“, „Desktop“, „Tablet“, „Client-Gerät“, „mobiles Gerät“, „Handheld-Gerät“, „Spielkonsole“, „elektronische Steuereinheit (ECU)“, „Virtual-Reality-System“ und/oder anderen Geräte- oder Systemtypen unterschieden, da alle als im Umfang der Rechenvorrichtung von 7 liegend in Betracht gezogen werden.
  • Das Interconnect-System 702 kann einen oder mehrere Links oder Busse repräsentieren, wie z. B. einen Adressbus, einen Datenbus, einen Steuerbus oder eine Kombination davon. Das Interconnect-System 702 kann einen oder mehrere Bus- oder Linktypen umfassen, z. B. einen ISA-Bus (Industry Standard Architecture), einen EISA-Bus (Extended Industry Standard Architecture), einen VESA-Bus (Video Electronics Standards Association), einen PCI-Bus (Peripheral Component Interconnect), einen PCIe-Bus (Peripheral Component Interconnect express), und/oder einen anderen Typ von Bus oder Link. In einigen Ausführungsbeispielen, gibt es direkte Verbindungen zwischen Komponenten. Zum Beispiel kann die CPU 706 direkt an den Speicher 704 verbunden sein. Ferner kann die CPU 706 direkt an die GPU 708 verbunden sein. Wo es eine direkte, oder point-to-point, Verbindung zwischen Komponenten gibt, kann das Interconnect-System 702 einen PCIe Link umfassen, um die Verbindung auszuführen. In diesen Beispielen braucht ein PCI Bus nicht in dem Rechengerät 700 enthalten zu sein.
  • Der Speicher 704 kann jedes von einer Vielfalt von computerlesbaren Medien umfassen. Bei den computerlesbaren Medien kann es sich um alle verfügbaren Medien handeln, auf die das Rechengerät 700 zugreifen kann. Die computerlesbaren Medien können sowohl flüchtige als auch nicht-flüchtige Medien sowie entfernbare und nicht-entfernbare Medien umfassen. Beispielhaft und nicht einschränkend können die computerlesbaren Medien Computer-Speichermedien und Kommunikationsmedien umfassen.
  • Die Computer-Speichermedien können sowohl flüchtige als auch nicht flüchtige Medien und/oder entfernbare und nicht entfernbare Medien umfassen, die in einem beliebigen Verfahren oder einer beliebigen Technologie zur Speicherung von Informationen, wie z. B. computerlesbare Anweisungen, Datenstrukturen, Programmmodulen und/oder andere Datentypen, implementiert sind. Beispielsweise kann der Speicher 704 computerlesbare Anweisungen speichern (z. B., die ein oder mehrere Programme und/oder ein oder mehrere Programmelemente darstellen, wie z. B. ein Betriebssystem). Computerspeichermedien können RAM, ROM, EEPROM, Flash-Speicher oder eine andere Speichertechnologie, CD-ROM, Digital Versatile Disks (DVD) oder andere optische Plattenspeicher, Magnetkassetten, Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder jedes andere Medium, das zur Speicherung der gewünschten Informationen verwendet werden kann und auf die das Rechengerät 700 zugreifen kann, umfassen, sind aber nicht darauf beschränkt. Wie hierin verwendet, umfasst der Begriff „Computer-Speichermedien“ nicht Signale per se.
  • Das Computerspeichermedium kann computerlesbare Befehle, Datenstrukturen, Programmmodule und/oder andere Datentypen in einem modulierten Datensignal verkörpern, wie beispielsweise einer Trägerwelle oder einem anderen Transportmechanismus, und umfasst jedes Informations-Übermittlungs-Medium. Der Term „moduliertes Datensignal“ kann sich auf ein Signal beziehen, das ein oder mehrere seiner Charakteristiken in solch einer Weise gesetzt oder geändert hat, um Information in das Signal zu kodieren. Auf dem Wege eines Beispiels und nicht Beschränkung kann das Computerspeichermedium drahtgebundene Medien, wie beispielsweise ein drahtgebundenes Netzwerk oder eine Direkt-Draht-Verbindung, und drahtlose Medien, wie akustische, RF, Infrarot und andere drahtlose Medien, umfassen. Kombinationen von allen oben genannten sollen ebenfalls innerhalb des Umfangs von computerlesbaren Medien umfasst sein.
  • Die CPU(s) 706 kann/können so konfiguriert sein, dass sie zumindest einige der computerlesbaren Anweisungen ausführt/ausführen, um eine oder mehrere Komponenten des Rechengeräts 700 zu steuern, um eines oder mehrere der hier beschriebenen Verfahren und/oder Prozesse durchzuführen. Die CPU(s) 706 kann/können jeweils einen oder mehrere Kerne umfassen (z. B. einen, zwei, vier, acht, achtundzwanzig, zweiundsiebzig, usw.), die in der Lage sind, eine Vielzahl von Software-Threads simultan zu verarbeiten. Die CPU(s) 706 kann/können jede Art von Prozessor umfassen und je nach Art des implementierten Rechengeräts 700 unterschiedliche Typen von Prozessoren umfassen (z. B. Prozessoren mit weniger Kernen für mobile Geräte und Prozessoren mit mehr Kernen für Server). Zum Beispiel kann, je nach Art des Rechengeräts 700, der Prozessor ein ARM-Prozessor (Advanced RISC Machines Processor) sein, der unter Verwenden eines reduzierten Befehlssatzes (RISC) implementiert ist, oder ein x86-Prozessor, der unter Verwenden eines komplexen Befehlssatzes (Complex Instruction Set Computing, CISC) implementiert ist. Das Rechengerät 700 kann eine oder mehrere CPUs 706 umfassen, zusätzlich zu einem oder mehreren Mikroprozessoren oder Zusatz-Coprozessoren, wie z. B. mathematischen Coprozessoren.
  • Zusätzlich oder alternativ zu der/den CPU(s) 706 kann/können die GPU(s) 708 so konfiguriert sein, dass sie zumindest einige der computerlesbaren Anweisungen ausführt/ausführen, um eine oder mehrere Komponenten des Rechengeräts 700 zu steuern, um eines oder mehrere der hierin beschriebenen Verfahren und/oder Prozesse durchzuführen. Eine oder mehrere der GPU(s) 708 kann/können eine integrierte GPU sein (z. B. mit einem oder mehreren der CPU(s) 706 und/oder eine oder mehrere der GPU(s) 708 kann/können eine diskrete GPU sein. In Ausführungsbeispielen kann/können eine oder mehrere der GPU(s) 708 ein Coprozessor von einer oder mehreren der CPU(s) 706 sein. Die GPU(s) 708 kann/können von dem Rechengerät 700 zum Rendern von Grafiken (z. B. 3D-Grafiken) verwendet werden oder um Universalberechnungen durchzuführen. Zum Beispiel kann/können die GPU(s) 708 zum Universalberechnen auf GPU(s) (GPGPU) verwendet werden. Die GPU(s) 708 kann/können hunderte oder tausende von Kernen umfassen, die in der Lage sind, hunderte oder tausende von Software-Threads simultan zu verarbeiten. Die GPU(s) 708 kann/können als Reaktion auf Rendering-Befehle (z. B. Rendering-Befehle von der/den CPU(s) 706, die über eine Host-Schnittstelle empfangen werden) Pixeldaten für Ausgabebilder erzeugen. Die GPU(s) 708 kann/können einen Grafikspeicher, z. B. einen Anzeigespeicher, zum Speichern von Pixeldaten oder irgendwelchen anderen geeigneten Daten, wie zum Beispiel GPGPU Daten, umfassen. Der Anzeigespeicher kann als Teil des Speichers 704 eingefügt sein. Die GPU(s) 708 kann/können zwei oder mehr GPUs umfassen, die parallel arbeiten (z. B. über eine Verbindung). Die Verbindung kann die GPUs direkt (z. B. unter Verwenden von NVLINK) verbinden oder kann die GPUs durch einen Switch (z. B. unter Verwenden von NVSwitch) verbinden. Wenn zusammen kombiniert, kann jede GPU 708 Pixeldaten oder GPGPU Daten für verschiedene Teile einer Ausgabe oder für verschiedene Ausgaben erzeugen (z. B. eine erste GPU für ein erstes Bild und eine zweite GPU für ein zweites Bild). Jede GPU kann ihren eigenen Speicher umfassen oder Speicher gemeinsam mit anderen GPUs nutzen.
  • Zusätzlich oder alternativ zu der/den CPU(s) 706 und/oder der/den (GPU(s) 708 kann/können die Logikeinheit(en) 720 so konfiguriert sein, dass sie zumindest einige der computerlesbaren Anweisungen ausführt/ausführen, um eine oder mehrere Komponenten des Rechengeräts 700 zu steuern, um eines oder mehrere der hierin beschriebenen Verfahren und/oder Prozesse durchzuführen. In Ausführungsbeispielen kann/können die CPU(s) 706, die GPU(s) 708 und/oder die Logikeinheit(en) 720 einzeln oder zusammen jede Kombination der Verfahren, Prozesse und/oder Teile davon ausführen. Eine oder mehrere der Logikeinheiten 720 kann/können Teil von und/oder in eine oder mehrere der CPU(s) 706 und/oder der GPU(s) 708 integriert sein und/oder eine oder mehrere der Logikeinheiten 720 kann/können diskrete Komponenten oder auf andere Weise extern zu der/den CPU(s) 706 und/oder der/den GPU(s) 708 sein. In Ausführungsbeispielen kann/können eine oder mehrere der Logikeinheiten 720 ein Coprozessor von einer oder mehreren der CPU(s) 706 und/oder einer oder mehreren der GPU(s) 708 sein.
  • Beispiele für die Logikeinheit(en) 720 umfassen einen oder mehrere Prozessorkerne und/oder Komponenten davon, wie beispielsweise Tensorkerne (TCs), Tensor Processing Units (TPUs), Pixel Visual Cores (PVCs), Vision Processing Units (VPUs), Graphikprozessorcluster (GPCs), Texture Processing Clusters (TPCs), Streaming Multiprocessors (SMs), Baum-Traversierungseinheiten (Tree Traversal Units, TTUs), künstliche Intelligenz Beschleuniger (Artificial Intelligence Accelerators, AIAs), Deep Learning Beschleuniger (DLAs), Arithmetisch-logische Einheiten (ALUs), Anwendungsspezifische integrierte Schaltungen (ASICs), Gleitkommaeinheiten (FPUs), Eingabe/Ausgabe-(E/A)-Elemente, Peripheral Component Interconnect (PCI), Peripheral Component Interconnect Express (PCIe) Elemente, und/oder ähnliche.
  • Die Kommunikationsschnittstelle 710 kann einen oder mehrere Empfänger, Sender und/oder Transceiver umfassen, die es dem Rechengerät 700 ermöglichen, mit anderen Rechengeräten über ein elektronisches Kommunikationsnetzwerk zu kommunizieren, einschließlich drahtgebundener und/oder drahtloser Kommunikationen. Die Kommunikationsschnittstelle 710 kann Komponenten und Funktionalität umfassen, um eine Kommunikation über jedes von einer Anzahl von verschiedenen Netzwerken zu ermöglichen, wie z. B. drahtlose Netzwerke (z. B. Wi-Fi, Z-Wave, Bluetooth, Bluetooth LE, ZigBee, usw.), drahtgebundene Netzwerke (z. B. Kommunizieren über Ethernet oder InfiniBand), Weitverkehrsnetzwerke mit geringer Leistung (z. B. LoRaWAN, SigFox, usw.) und/oder das Internet. In einem oder mehreren Ausführungsbeispielen kann die Kommunikationsschnittstelle 710 auch einen oder mehrere Prozessierkerne und/oder Komponenten davon umfassen, wie beispielsweise Daten-Prozessier-Einheiten (Data Processing Units, DPUs), um auf Daten zuzugreifen und direkt in dem lokalen Speicher von anderen Prozessiereinheiten - wie beispielsweise GPUs - des Rechengeräts 700 zu speichern.
  • Die E/A-Anschlüsse 712 können es ermöglichen, dass das Rechengerät 700 mit anderen Geräten logisch gekoppelt ist, einschließlich der E/A-Komponenten 714, der Präsentationskomponente(n) 718 und/oder anderer Komponenten, von denen einige in das Rechengerät 700 eingebaut (z. B. integriert in) sein können. Beispielhafte E/A-Komponenten 714 umfassen ein Mikrofon, eine Maus, eine Tastatur, einen Joystick, ein Gamepad, eine Spielsteuerung, eine Satellitenschüssel, einen Scanner, einen Drucker, ein drahtloses Gerät, usw. Die E/A-Komponenten 714 können eine natürliche Benutzerschnittstelle (NUI) bereitstellen, die Luftgesten, Stimme oder andere physiologische Eingaben verarbeitet, die von einem Benutzer erzeugt werden. In einigen Fällen können Eingaben zur weiteren Verarbeitung an ein geeignetes Netzwerkelement übertragen werden. Eine NUI kann eine beliebige Kombination aus Spracherkennung, Stifterkennung, Gesichtserkennung, biometrischer Erkennung, Gestenerkennung sowohl auf dem Bildschirm als auch neben dem Bildschirm, Luftgesten, Kopf- und Augenverfolgung und Berührungserkennung (wie unten in größeren Detail beschrieben) in Verbindung mit einer Anzeige des Rechengeräts 700 implementieren. Das Rechengerät 700 kann Tiefenkameras, wie z. B. stereoskopische Kamerasysteme, Infrarotkamerasysteme, RGB-Kamerasysteme, Touchscreen-Technologie und Kombinationen davon, zur Gestendetektion und -erkennung umfassen. Zusätzlich kann das Rechengerät 700 Beschleunigungsmesser oder Gyroskope (z. B. als Teil einer Trägheitsmesseinheit (IMU)) umfassen, die Erkennung von Bewegung ermöglichen. In einigen Beispielen kann die Ausgabe der Beschleunigungsmesser oder Gyroskope von dem Rechengerät 700 verwendet werden, um immersive Augmented Reality oder virtuelle Realität zu rendern.
  • Die Leistungsversorgung 716 kann eine fest verdrahtete Stromversorgung, eine Batteriestromversorgung oder eine Kombination davon umfassen. Die Stromversorgung 716 kann das Rechengerät 700 mit Strom versorgen, um den Betrieb der Komponenten des Rechengeräts 700 zu ermöglichen.
  • Die Präsentationskomponente(n) 718 kann/können eine Anzeige (z. B. einen Monitor, einen Touchscreen, einen Fernsehbildschirm, ein Heads-up-Display (HUD), andere Anzeigetypen oder eine Kombination davon), Lautsprecher und/oder andere Präsentationskomponenten umfassen. Die Präsentationskomponente(n) 718 kann/können Daten von anderen Komponenten (z. B. der/den GPU(s) 708, der/den CPU(s) 706, usw.) empfangen und die Daten ausgeben (z. B. als ein Bild, Video, Ton, usw.).
  • BEISPIELHAFTE NETZWERKUMGEBUNGEN
  • Netzwerkumgebungen, die für die Verwendung beim Implementieren von Ausführungsbeispielen der Offenbarung geeignet sind, können eine oder mehrere Client-Vorrichtungen, Server, netzgebundenen Speicher (network attached storage, NAS), andere Backend-Vorrichtungen und/oder andere Vorrichtungstypen umfassen. Die Client-Vorrichtungen, Server und/oder andere Vorrichtungs-Typen (z.B. jede Vorrichtung) kann auf einer oder mehreren Instanzen der Rechenvorrichtung(en) 700 von 7 implementiert werden - z.B. kann jede Vorrichtung ähnliche Komponenten, Merkmale und/oder Funktionalität der Rechenvorrichtung(en) 700 umfassen.
  • Komponenten einer Netzwerk-Umgebung können miteinander via ein Netzwerk(e) kommunizieren, das/die kabelgebunden, kabellos oder beides sein kann/können. Das Netzwerk kann mehrere Netzwerke oder ein Netzwerk von Netzwerken umfassen. Auf dem Wege eines Beispiels kann das Netzwerk ein oder mehrere Weitverkehrsnetze (Wide Area Networks, WANs), ein oder mehrere lokale Netzwerke (Local Area Networks, LANs), ein oder mehrere öffentliche Netzwerke z.B. das Internet und/oder ein Telefonnetz (public switched telephone network, PSTN), und/oder ein oder mehrere private Netzwerke umfassen. Wo das Netzwerk ein drahtloses Telekommunikationsnetzwerk umfasst, können Komponenten, wie beispielsweide eine Basisstation, ein Kommunikationsturm oder selbst Zugangspunkte (access points) (sowie auch andere Komponenten) eine drahtlose Konnektivität bereitstellen.
  • Kompatible Netzwerkumgebungen können eine oder mehrere Peer-to-Peer Netzwerkumgebungen - in dem Fall mag ein Server nicht in einer Netzwerkumgebung enthalten sein - und eine oder mehrere Client-Server Netzwerkumgebungen - in dem Fall können ein oder mehrere Server in einer Netzwerkumgebung enthalten sein - umfassen. In Peer-to-Peer Netzwerkumgebungen kann eine hierin in Bezug auf einen oder mehrere Server beschriebene Funktionalität auf jeder Anzahl von Client-Vorrichtungen implementiert werden.
  • In zumindest einem Ausführungsbeispiel kann eine Netzwerkumgebung eine oder mehrere cloudbasierte Netzwerkumgebungen, eine verteilte-Berechnungsumgebung (distributed computing environment), eine Kombination davon, usw. umfassen. Eine cloudbasierte Netzwerkumgebung kann eine Framework-Schicht, einen Job-Scheduler, einen Ressourcenmanager und ein verteiltes File-System umfassen, die auf einen oder mehreren Servern implementiert werden, die einen oder mehrere Kern-Netzwerk-Server und/oder Edge-Server umfassen. Eine Framework-Schicht kann ein Framework umfassen, um Software von einer Softwareschicht zu unterstützen und/oder eine oder mehrere Anwendung(en) von einer Anwendungsschicht. Die Software oder Anwendung(en) können web-basierte Servicesoftware bzw. Anwendungen umfassen. In Ausführungsbeispielen können ein oder mehrere Client-Vorrichtungen die web-basierte Service-Software oder Anwendungen verwenden (z.B. indem auf die Service-Software und/oder Anwendungen via eine oder mehrere Programmschnittstellen (APIs) zugegriffen wird). Die Framework-Schicht kann, ohne darauf beschränkt zu sein, ein Typ von Freier- und Open-Source Software Web Anwendungs-Framework sein, wie eines das ein verteiltes Filesystem für Datenprozessierung in großen Maßstab (z.B. „Big Data“) verwendet.
  • Eine cloudbasierte Netzwerkumgebung kann Cloud Computing und/oder Cloud-Speichern bereitstellen, das jede Kombination von Berechnungs- und/oder Datenspeicherungsfunktionen ausführt, die hierin beschrieben sind (oder eine oder mehrere Teile davon). Jede dieser verschiedenen Funktionen können über mehrere Positionen von Zentral- oder Kernserver verteilt sein (z.B. von einem oder mehreren Datencentern, die über einen Staat, eine Region, ein Land, dem Globus, usw. verteilt sind). Wenn eine Verbindung zu einem Nutzer (z.B. eine Client-Vorrichtung) relativ nahe zu einem Edge-Server(n) ist, kann ein oder mehrere Kern-Server den/die Edge-Server für zumindest einen Teil der Funktionalität ausersehen. Eine cloudbasierte Netzwerkumgebung kann privat sein (z.B. auf eine einzelne Organisation beschränkt), kann öffentlich sein (z.B. benutzbar für viele Organisationen) und/oder eine Kombination davon (z.B. eine hybride Cloudumgebung).
  • Der/die Client-Vorrichtung(en) kann/können zumindest einige der Komponenten, Merkmale und Funktionalitäten der beispielhaften Rechenvorrichtung(en) 700, die hierin mit Bezug auf 7 beschrieben wurde(n) umfassen. Auf dem Wege eines Beispiels und nicht beschränkend kann eine Client-Vorrichtung als ein Personal Computer (PC), ein Laptopcomputer, eine mobile Vorrichtung, ein Smartphone, ein Tabletcomputer, eine Smartwatch, ein tragbarer Computer, ein Personal Digital Assistant (PDA), ein MP3-Spieler, ein virtuelle Realität Headset, ein Global Positioning System (GPS) oder Vorrichtung, ein Videospieler, eine Videokamera, eine Überwachungsvorrichtung oder System, ein Fahrzeug, ein Boot, ein fliegendes Fahrzeug, eine virtuelle Maschine, eine Drohne, ein Roboter, eine Handheld-Kommunikationsvorrichtung, eine Krankenhaus-Vorrichtung, eine Spielevorrichtung oder -system, ein Unterhaltungssystem, ein Fahrzeugcomputersystem, eine eingebettete Systemsteuerung, eine Fernbedienung, ein Gerät, eine Unterhaltungselektronik-Vorrichtung, eine Workstation, eine Edge-Vorrichtung, irgendeine Kombination von diesen skizzierten Vorrichtungen oder irgendeine andere geeignete Vorrichtung verkörpert sein.
  • BEISPIELHAFTES DATENCENTER
  • 8 illustriert ein beispielhaftes Datencenter 800, in dem zumindest ein Ausführungsbeispiel verwendet werden kann. In zumindest einem Ausführungsbeispiel umfasst das Datencenter 800 eine Datencenter-Infrastrukturschicht 810, eine Framework-Schicht 820, eine Softwareschicht 830 und eine Anwendungsschicht 840.
  • In zumindest einem Ausführungsbeispiel kann, wie in 8 gezeigt, die Datencenter-Infrastrukturschicht 810 einen Ressourcen-Orchestrator 812, gruppierte Berechnungsressourcen 814 und Knoten-Berechnungsressourcen („Knoten C.R.s“) 816(1)-816(N), wobei „N“ eine ganze positive Integerzahl repräsentiert, umfassen. In zumindest einem Ausführungsbeispiel können die Knoten C.R.s 816(1)-816(N), sind aber nicht darauf beschränkt, jede Anzahl von Zentralen Verarbeitungseinheiten („CPUs“) oder andere Prozessoren (einschließlich Beschleunigern, Field Programmable Gate Arrays (FPGAs), Graphikprozessoren oder Graphikprozessoreinheiten (GPUs), usw.), Speichervorrichtungen (z.B. dynamische Festwertspeicher), Speichervorrichtungen (z.B. Festkörper- oder Plattenlaufwerke), Netzwerk Eingabe/Ausgabe-(„NW E/A“)-Vorrichtungen, Netzwerkswitches, Virtuelle Maschinen („VMs“), Powermodule, und/oder Kühlmodule, usw. umfassen. In zumindest einem Ausführungsbeispiel kann/können ein oder mehrere Knoten C.R.s von den Knoten C.R.s 816(1)-816(N) ein Server sein, der/die eine oder mehrere der oben genannten Berechnungsressourcen hat.
  • In zumindest einem Ausführungsbeispiel können gruppierte Berechnungsressourcen 814 separate Gruppierungen von Knoten C.R.s einschließen, die innerhalb eines oder mehrerer Racks (nicht gezeigt) untergebracht sind, oder viele Racks, die in Datencentern an verschiedenen geographischen Positionen (auch nicht gezeigt) untergebracht sind. Separate Gruppierungen von Knoten C.R.s innerhalb gruppierter Berechnungsressourcen 814 können gruppierte Berechnungs-, Netzwerk-, Memory-, oder Speicher-Ressourcen einschließen, die konfiguriert oder allokiert sein können, um eine oder mehrere Arbeitslasten zu unterstützen. In zumindest einem Ausführungsbeispiel können mehrere Knoten C.R.s einschließlich CPUs, oder anderer Prozessoren innerhalb eines oder mehrerer Racks gruppiert sein, um Rechenressourcen bereitzustellen, um eine oder mehrere Arbeitslasten zu unterstützen. In zumindest einem Ausführungsbeispiel kann/können ein oder mehrere Racks auch jede Anzahl von Powermodulen, Kühlmodulen und/oder Netzwerk-Switches in jeder Kombination umfassen.
  • In zumindest einem Ausführungsbeispiel kann der Ressourcen-Orchestrator 822 einen oder mehrere Knoten C.R.s 816(1)-816(N) und/oder gruppierte Berechnungs-Ressourcen 814 konfigurieren oder anderweitig steuern. In zumindest einem Ausführungsbeispiel kann Ressourcen-Orchestrator 822 eine Software-Design-Infrastruktur-(„SDI“)-Management-Entität für Datencenter 800 umfassen. In zumindest einem Ausführungsbeispiel kann der Ressourcen-Orchestrator Hardware, Software oder irgendeine Kombination davon umfassen.
  • In zumindest einem Ausführungsbeispiel, wie in 8 gezeigt, umfasst Framework-Schicht 820 einen Job-Scheduler 844, einen Konfigurationsmanager 834, einen Ressourcenmanager 836 und ein verteiltes File-System 838. In zumindest einem Ausführungsbeispiel kann die Framework-Schicht 820 ein Framework umfassen, um Software 832 von Softwareschicht 830 und/oder eine oder mehrere Anwendung(en) 842 von Anwendungsschicht 840 zu unterstützen. In zumindest einem Ausführungsbeispiel kann/können Software 832 oder Anwendung(en) 842 web-basierte Servicesoftware bzw. Anwendungen umfassen, wie beispielsweise diejenigen, die vom Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In zumindest einem Ausführungsbeispiel kann Framework-Schicht 820, ist aber nicht darauf beschränkt, ein Typ von Freier- und Open-Source Software Web-Anwendungs-Framework sein, wie zum Beispiel Apache SparkTM (nachfolgend „Spark“), das ein verteiltes File-System 838 für Datenprozessierung in großen Maßstab (z.B. „Big Data“) verwenden kann. In zumindest einem Ausführungsbeispiel kann Job-Scheduler 844 einen Spark-Treiber umfassen, um Scheduling von Arbeitslasten zu ermöglichen, unterstützt mittels verschiedener Schichten vom Datencenter 800. In zumindest einem Ausführungsbeispiel kann der Konfigurationsmanager 834 fähig sein, verschiedene Schichten, wie beispielsweise Software-Schicht 830 und Framework-Schicht 820, einschließlich Spark und verteiltem File-System 838 zum Unterstützen von Datenprozessierung großen Maßstabs, zu konfigurieren. In zumindest einem Ausführungsbeispiel kann der Ressourcenmanager 836 fähig sein, geclusterte oder gruppierte Berechnungsressourcen zu managen, die zum Unterstützen von verteiltem File-System 838 und Job-Scheduler 844 zugeordnet oder allokiert sind. In zumindest einem Ausführungsbeispiel können geclusterte oder gruppierte Berechnungsressourcen gruppierte Berechnungsressource 814 bei der Datencenter-Infrastrukturschicht 810 umfassen. In zumindest einem Ausführungsbeispiel kann der Ressourcenmanager 836 mit Ressourcen-Orchestrator 812 koordinieren, um diese zugeordneten oder allokierten Berechnungsressourcen zu managen.
  • In zumindest einem Ausführungsbeispiel kann Software 832, die in Softwareschicht 830 enthalten ist, Software enthalten, die von zumindest Teilen von Knoten C.R.s 816(1)-816(N), gruppierten Berechnungsressourcen 814 und/oder verteilten File-System 838 von Framework-Schicht 820 verwendet wird. Ein oder mehrere Typen von Software können, aber sind nicht darauf beschränkt, Internet Webpage Suchsoftware, E-Mail Virus-Scansoftware, Datenbank-Software und Streaming Videoinhalt-Software umfassen.
  • In zumindest einem Ausführungsbeispiel kann/können Anwendung(en) 842, die in Anwendungs-Schicht 840 enthalten sind, ein oder mehrere Typen von Anwendungen umfassen, die durch zumindest Teile von Knoten C.R.s 816(1)-816(N), gruppierten Berechnungsressourcen 814 und/oder verteilten File-System 838 von Framework-Schicht 820 verwendet werden. Ein oder mehrere Typen von Anwendungen können umfassen, sind aber nicht darauf beschränkt: jede Anzahl von einer genomischen Anwendung, einem kognitiven Berechnen (cognitive compute) und einer maschinenlern-Anwendung, einschließlich Trainings- oder Inferenzier-Software, maschinenlern-Framework-Software (z.B. PyTorch, TensorFlow, Caffe, usw.) oder andere maschinenlern-Anwendungen, die in Verbindung mit einem oder mehreren Ausführungsbeispielen verwendet werden.
  • In zumindest einem Ausführungsbeispiel kann jeder von Konfigurationsmanager 834, Ressourcenmanager 836 und Ressourcen-Orchestrator 812 jede Anzahl und Typ von selbstmodifizierenden Aktionen implementieren, basierend auf jedem Umfang und Typ von Daten, die in jeder technisch realisierbare Weise erlangt werden. In zumindest einem Ausführungsbeispiel können selbstmodifizierende Aktionen einen Datenbank-Operator von Datencenter 800 davon befreien möglicherweise schlechte Konfigurations-Entscheidungen zu machen und möglicherweise unausgenutzte und/oder schlecht performende Teile eines Datencenters vermeiden.
  • In zumindest einem Ausführungsbeispiel kann das Datencenter 800 Tools, Services, Software oder andere Ressourcen umfassen, um eine oder mehrere maschinenlern-Modelle zu trainieren, oder Informationen vorherzusagen oder zu folgern, unter Verwenden eines oder mehrerer maschinenlern-Modelle, in Übereinstimmung mit einem oder mehreren hierin beschriebenen Ausführungsbeispielen. Zum Beispiel kann in zumindest einem Ausführungsbeispiel ein maschinenlern-Modell mittels Berechnens von Gewichtsparametern trainiert werden, gemäß einer Neuronalen Netzwerk-Architektur, unter Verwenden von Software und Berechnungsressourcen, die oben in Bezug auf Datencenter 800 beschrieben wurden. In zumindest einem Ausführungsbeispiel können trainierte maschinenlern-Modelle, die zu einem oder mehreren Neuronalen Netzwerken korrespondieren, verwendet werden, um Informationen abzuleiten oder vorherzusagen, unter Verwenden von Ressourcen die oben in Bezug auf Datencenter 800 beschrieben wurden, mittels Verwendens gewichteter Parameter, die durch eine oder mehrere Trainingstechniken berechnet wurden, die hierin beschrieben werden.
  • Die Offenbarung kann im allgemeinen Kontext von Computercode oder maschinell verwendbaren Anweisungen beschrieben werden, einschließlich computerausführbarer Anweisungen, wie z. B. Programmmodule, die von einem Computer oder einer anderen Maschine, wie z. B. einem Personal Data Assistant oder einem anderen Handheld-Gerät, ausgeführt werden. Im Allgemeinen beziehen sich Programmmodule, einschließlich Routinen, Programme, Objekten, Komponenten, Datenstrukturen, usw., auf Codes, die bestimmte Aufgaben ausführen oder bestimmte abstrakte Datentypen implementieren. Die Offenbarung kann in einer Vielzahl von Systemkonfigurationen praktiziert werden, einschließlich Handheld-Geräten, Unterhaltungselektronik, Universalcomputern, spezielleren Rechengeräten, usw. Die Offenbarung kann auch in verteilten Rechenumgebungen angewendet werden, in denen Aufgaben von entfernt arbeitenden Geräten ausgeführt werden, die über ein Kommunikationsnetzwerk verbunden sind.
  • Wie hier verwendet, sollte eine Rezitation von „und/oder“ in Bezug auf zwei oder mehr Elemente interpretiert werden, nur ein Element oder eine Kombination von Elementen zu meinen. Beispielsweise kann „Element A, Element B und/oder Element C“ nur Element A, nur Element B, nur Element C, Element A und Element B, Element A und Element C, Element B und Element C oder die Elemente A, B und C umfassen. Darüber hinaus kann „zumindest eines von Element A oder Element B“ zumindest eines von Element A, zumindest eines von Element B oder zumindest eines von Element A und zumindest eines von Element B umfassen. Weiter kann „zumindest eines von Element A und Element B“ zumindest eines von Element A, zumindest eines von Element B oder zumindest eines von Element A und zumindest eines von Element B umfassen.
  • Der Gegenstand der vorliegenden Offenbarung wird hierin spezifisch beschrieben, um gesetzliche Anforderungen zu erfüllen. Die Beschreibung selbst soll jedoch nicht den Umfang dieser Offenbarung einschränken. Vielmehr haben die Erfinder in Erwägung gezogen, dass der beanspruchte Gegenstand auch auf andere Weisen verkörpert werden kann, um andere Schritte oder Kombinationen von Schritten ähnlich den in diesem Dokument beschriebenen in Verbindung mit anderen gegenwärtigen oder zukünftigen Technologien zu umfassen. Ferner sollten, obwohl die Begriffe „Schritt“ und/oder „Block“ hierin verwendet werden können, um verschiedene Elemente von verwendeten Verfahren zu bezeichnen, die Begriffe nicht so ausgelegt werden, dass sie eine bestimmte Reihenfolge unter oder zwischen den verschiedenen hier offenbarten Schritten implizieren, solange nicht und außer, wenn die Reihenfolge der einzelnen Schritte ausdrücklich beschrieben wird.

Claims (20)

  1. Ein computerimplementiertes Verfahren aufweisend: Bestimmen, unter Verwenden eines oder mehrerer Threads einer zeitlich planbaren Einheit von einem oder mehreren Parallelprozessoren, eines oder mehrerer ersten Werte, die zu einer Sichtbarkeit einer Szene in Bezug auf zumindest eine Lichtquelle in der Szene korrespondieren, basierend zumindest auf Ausstrahlen eines oder mehrerer Strahlen in der Szene; Empfangen, unter Verwenden zumindest eines Threads des einen oder der mehreren Threads, eines zweiten Werts, der aus dem einen oder den mehreren ersten Werten berechnet wird, wobei der zweite Wert anzeigt, dass eine oder mehrere Positionen in der Szene zu einem Halbschatten korrespondiert; und Anwenden eines Entrauschungsfilters auf Renderdaten, basierend zumindest auf einem Bestimmen, unter Verwenden des zweiten Werts, dass die eine oder mehreren Positionen zu dem Halbschatten korrespondieren.
  2. Das Verfahren nach Anspruch 1, wobei die zeitlich planbare Einheit ein Verzerren oder eine Wellenfront aufweist.
  3. Das Verfahren nach Anspruch 1 oder 2, wobei die eine oder mehreren Positionen einen oder mehrere Pixel aufweisen und zumindest ein Wert des einen oder der mehreren ersten Werte zu einem jeweiligen Pixel des einen oder der mehreren Pixel korrespondiert.
  4. Das Verfahren nach irgendeinem vorherigen Anspruch, wobei das Empfangen des zweiten Werts aus einer Ausgabe einer Welle-intrinsischen-Funktion ist, unter Verwenden des einen oder der mehreren Parallelprozessoren.
  5. Das Verfahren nach irgendeinem vorherigen Anspruch, wobei der zweite Wert berechnet wird, basierend zumindest auf einem Zugreifen auf den einen oder die mehreren ersten Werte aus einem oder mehreren Registern des einen oder der mehreren Threads.
  6. Das Verfahren nach irgendeinem vorherigen Anspruch, ferner aufweisend, Erzeugen einer Halbschattenmaske eines Frames der Szene unter Verwenden des zweiten Werts, wobei das Bestimmen, dass die eine oder mehreren Positionen zu dem Halbschatten korrespondiert zumindest auf einem Analysieren der Halbschattenmaske basiert.
  7. Das Verfahren nach irgendeinem vorherigen Anspruch, wobei der eine oder die mehreren ersten Werte zu einem binären Signal korrespondieren, das die Sichtbarkeit repräsentiert.
  8. Das Verfahren nach irgendeinem vorherigen Anspruch, wobei das Bestimmen des einen oder der mehreren ersten Werte und das Empfangen des zweiten Wertes mittels eines Ray-Erzeugungs-Shader durchgeführt wird, der unter Verwenden des einen oder der mehreren Threads ausgeführt wird.
  9. Das Verfahren nach irgendeinem vorherigen Anspruch, wobei das Bestimmen, dass die eine oder mehreren Positionen zu dem Halbschatten korrespondieren, ein Bestimmen, dass der zweite Wert größer als ein Schwellwert ist, aufweist.
  10. Das Verfahren nach irgendeinem vorherigen Anspruch, wobei das Bestimmen, dass die eine oder mehreren Positionen zu dem Halbschatten korrespondieren, ein Bestimmen, dass der zweite Wert kleiner als ein Schwellwert ist, aufweist.
  11. Ein computerimplementiertes Verfahren aufweisend: Bestimmen, unter Verwenden von Gruppen von Threads einer oder mehrerer zeitlich planbaren Einheiten von einem oder mehreren Parallelprozessoren, von geraytracten Samples von Sichtbarkeit von Pixeln, die der Gruppe zugeordnet sind in Bezug auf zumindest eine Lichtquelle in einer Szene; Bestimmen von Werten für die Gruppen von Threads, wobei für jede Gruppe der Gruppen von Threads zumindest ein Thread der Gruppe einen Wert der Werte aus den geraytracten Samples der Gruppe berechnet, der anzeigt, ob zumindest ein Pixel der Pixel, die der Gruppe zugeordnet sind, zu einem Halbschatten korrespondiert; und Entrauschen von Renderdaten, die zu den geraytracten Samples der Gruppen von Threads korrespondieren, basierend zumindest auf dem Wert der Gruppe für eine Vielzahl der Gruppen von Threads.
  12. Verfahren nach Anspruch 11, wobei eine erste Gruppe der Gruppen von einer ersten zeitlich planbaren Einheit der einen oder den mehreren zeitlich planbaren Einheiten ist, und eine zweite Gruppe der Gruppen von einer zweiten zeitlich planbaren Einheit der einen oder den mehreren zeitlich planbaren Einheiten ist.
  13. Verfahren nach Anspruch 11 oder 12, wobei das Entrauschen ein Anwenden eines Entrauschungsfilters auf einen Pixel aufweist, der einer ersten Gruppe der Gruppen zugeordnet ist, basierend zumindest darauf, dass der Wert der ersten Gruppe anzeigt, dass der Pixel innerhalb des Halbschattens ist.
  14. Das Verfahren nach irgendeinem der Ansprüche 11 bis 13, wobei das Entrauschen ein Anwenden eines Entrauschungs-Durchganges auf die geraytracten Samples aufweist, wobei der Entrauschungs-Durchgang einen Pixel überspringt, der einer zweiten Gruppe von Gruppen zugeordnet ist, basierend zumindest darauf, dass der Wert der zweiten Gruppe anzeigt, dass der Pixel außerhalb des Halbschattens ist.
  15. Das Verfahren nach irgendeinem der Ansprüche 11 bis 14, wobei jeder Thread der Gruppe den Wert aus den geraytracten Samples der Gruppe bestimmt.
  16. Das Verfahren nach irgendeinem der Ansprüche 11 bis 15, ferner aufweisend Erzeugen, unter Verwenden der Gruppen von Threads, einer Halbschattenmaske eines Frames der Szene, unter Verwenden der Werte, wobei das Entrauschen zumindest auf einem Analysieren der Halbschattenmaske basiert.
  17. Ein Prozessor aufweisend: einen oder mehrere Schaltkreise, um ein oder mehrere geraytracte Samples einer Szene zu bestimmen, unter Verwenden eines oder mehrerer Threads einer zeitlich planbaren Einheit von einem oder mehreren Parallelprozessoren, einen oder mehrere Werte zu empfangen, die aus dem einen oder den mehreren geraytracten Samples berechnet werden, unter Verwenden zumindest eines Threads des einen oder der mehreren Threads, einen oder mehrere Parameter eines Entrauschungsfilters zu bestimmen, basierend zumindest auf dem einen oder den mehreren Werten, und einen Frame der Szene zu erzeugen, basierend auf zumindest einem Anwenden des Entrauschungsfilters auf Renderdaten, die zu den geraytracten Samples korrespondieren, unter Verwenden des einen oder der mehreren Parameter.
  18. Der Prozessor vom Anspruch 17, wobei der eine oder die mehreren Parameter einen Filterradius des Entrauschungsfilters definieren.
  19. Der Prozessor nach Anspruch 17 oder 18, wobei der eine oder die mehreren Parameter einen Bereich definieren, wobei Werte außerhalb des Bereichs vom unter Verwenden des Entrauschungsfilter gefiltert werden ausgeschlossen sind, basierend darauf, dass sie außerhalb des Bereichs sind.
  20. Der Prozessor von irgendeinem der Ansprüche 17 bis 19, wobei das System zumindest eines aufweist von: einem System zum Durchführen von Simulationsoperationen; einem System zum Durchführen von Simulationsoperationen, um autonome Maschinenanwendungen zu testen oder zu validieren; einem System zum Durchführen von Deep-Learning-Operationen; einem System, das unter Verwenden einer Edge-Vorrichtung implementiert ist; einem System, das eine oder mehrere virtuelle Maschinen (VMs) beinhaltet; einem System, das zumindest teilweise in einem Datencenter implementiert ist; oder einem System, das zumindest teilweise unter Verwenden von Cloud-Berechnungs-Ressourcen implementiert ist.
DE102022100517.8A 2021-01-14 2022-01-11 Verwenden von intrinsischen funktionen zum schattenentrauschen in raytracinganwendungen Pending DE102022100517A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/148,888 US11727535B2 (en) 2021-01-14 2021-01-14 Using intrinsic functions for shadow denoising in ray tracing applications
US17/148,888 2021-01-14

Publications (1)

Publication Number Publication Date
DE102022100517A1 true DE102022100517A1 (de) 2022-07-14

Family

ID=82116350

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022100517.8A Pending DE102022100517A1 (de) 2021-01-14 2022-01-11 Verwenden von intrinsischen funktionen zum schattenentrauschen in raytracinganwendungen

Country Status (3)

Country Link
US (2) US11727535B2 (de)
CN (1) CN114764841A (de)
DE (1) DE102022100517A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11847737B2 (en) * 2021-04-09 2023-12-19 Nvidia Corporation Temporal denoiser quality in dynamic scenes

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6763305B2 (en) * 2002-09-13 2004-07-13 Gx Technology Corporation Subsurface illumination, a hybrid wave equation-ray-tracing method
US7970171B2 (en) * 2007-01-18 2011-06-28 Ricoh Co., Ltd. Synthetic image and video generation from ground truth data
US20090034870A1 (en) * 2007-07-31 2009-02-05 Renato Keshet Unified spatial image processing
WO2012099843A2 (en) * 2011-01-17 2012-07-26 Stc.Unm System and methods for random parameter filtering
KR101711060B1 (ko) * 2015-05-29 2017-02-28 주식회사 코어라인소프트 레이 캐스팅의 가속화 방법 및 장치
US10748332B2 (en) * 2017-03-15 2020-08-18 Nvidia Corporation Hybrid frustum traced shadows systems and methods
WO2019182911A1 (en) * 2018-03-17 2019-09-26 Nvidia Corporation Reflection denoising in ray-tracing applications
US10943387B2 (en) 2018-08-30 2021-03-09 Nvidia Corporation Generating scenes containing shadows using pixel noise reduction techniques
US20210382717A1 (en) * 2020-06-03 2021-12-09 Intel Corporation Hierarchical thread scheduling
US11521343B2 (en) * 2020-07-30 2022-12-06 Apple Inc. Graphics memory space for shader core

Also Published As

Publication number Publication date
CN114764841A (zh) 2022-07-19
US11727535B2 (en) 2023-08-15
US20220222780A1 (en) 2022-07-14
US20230351555A1 (en) 2023-11-02

Similar Documents

Publication Publication Date Title
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102018121282A1 (de) Differenzierbare rendering-pipeline für inverse graphik
DE102019101873A1 (de) Abfragespezifische Verhaltensmodifizierung von Baumtraversierung
DE102019103178A1 (de) Verfahren für vorankommen und programmierbare timeouts von baumtraversierungsmechanismen in hardware
DE102019103059A1 (de) Hieb- und stichfester Strahl-Dreieck-Schnittpunkt
DE102018127647A1 (de) Systeme und verfahren zum trainieren neuronaler netzwerke auf regression ohne referenzdaten-trainingsmuster
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102018101030A1 (de) Filterung von Bilddaten unter Verwendung eines neutralen Netzwerks
DE102018116552A1 (de) Sakkadische umleitung zur fortbewegung von virtueller realität
DE102019132001A1 (de) Vorrichtung und verfahren für einen hierarchischen beamtracer
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE112021000108T5 (de) Entrauschungstechniken für rekurrente unschärfen bei raytracing-anwendungen
DE102018128699A1 (de) Einstellen einer Winkelabtastrate während eines Renderings unter Verwendung von Blickinformationen
DE102019121200A1 (de) Bewegungsadaptives rendern mittels shading mit variabler rate
DE112019001978T5 (de) Verbesserung des realismus von szenen mit wasseroberflächen beim rendern
DE102021130031A1 (de) Erscheinungsbildgesteuerte automatische dreidimensionale modellierung
DE102021125897A1 (de) History-blockieren zum entrauschen dynamischer raytracing-szenen unter verwendung zeitlicher anhäufung
US20230351555A1 (en) Using intrinsic functions for shadow denoising in ray tracing applications
DE102021120604A1 (de) Dynamische bildglättung basierend auf netzwerkbedingungen
DE102021104310A1 (de) Reservoir-basiertes räumlich-zeitliches resampling nach wichtigkeit unter verwendung einer globalen beleuchtungsdatenstruktur
DE102023125923A1 (de) Generative modelle maschinellen lernens für datenschutzerhaltende synthetische datenerzeugung unter verwendung von diffusion
DE102020210030A1 (de) Verfahren und Vorrichtung zur Visualisierung von dreidimensionalen Objekten
DE102019121570A1 (de) Bewegungsunschärfe- und schärfentiefe-rekonstruktion durch zeitlich stabile neuronale netzwerke
DE102023105068A1 (de) Bewegungsvektoroptimierung für mehrfach refraktive und reflektierende Schnittstellen

Legal Events

Date Code Title Description
R012 Request for examination validly filed