-
HINTERGRUND
-
Gebiet:
-
Nachstehendes bezieht sich auf Bildsynthese (Rendern) aus virtuellen 3D-Szenen.
-
Stand der Technik:
-
Bildsynthese aus 3D-Szenen unter Verwendung von Strahlenverfolgung (Ray-Tracing) basiert auf der Auswertung einer Rendergleichung, die eine Reihe von verschachtelten Integralen umfasst, die unterschiedliches Lichtverhalten modellieren, und schwer analytisch zu lösen ist. Daher kann ein nichtanalytischer Ansatz zur Auswertung dieser Gleichungen eingesetzt werden. Eine erfolgreiche Gruppe von Ansätzen zur Approximation der Rendergleichung ist die Verwendung von Abtastverfahren. Ein Integral wird mit einer Reihe von diskreten Werten ausgewertet, die zufällig bestimmt werden können, um eine Wahrscheinlichkeitsschätzung des Integrals aus den Abtastwerten zu erhalten.
-
KURZFASSUNG
-
In einem Aspekt nutzt ein Hybridbildsynthesesystem die Strahlenverfolgung und Abtastung von Lichttransportdaten, die volumetrisch in einem 3D-Raum verteilt sind. Beispielsweise umfasst ein Verfahren zur Verwendung bei der Bildsynthese aus einer virtuellen 3D-Szene die Verfolgung eines Strahls in eine Richtung von einem Punkt in einer 3D-Szene bis zu einem Maximalabstand einer Übergangszone. Falls kein Schnittpunkt für den Strahl bestimmt wurde, der näher als ein Mindestabstand von der Übergangszone entfernt ist, dann durchläuft das Verfahren einen Kegelschnitt durch ein 3D-Gitter aus Volumenelementen in der 3D-Szene entlang der Richtung des Strahls. Jedes Volumenelement ist Daten zugeordnet, die Lichtenergie darstellen, die sich durch Oberflächen dieses Volumenelements fortpflanzt. Die Fläche des durchlaufenen Kegelschnitts, der erstellt wird, wird basierend auf einem Ausbreitungsfaktor und einem Abstand vom Punkt in der 3D-Szene zu einem aktuellen Abtastpunkt bestimmt.
-
Lichtenergiedaten werden aus den Volumenelementen gesammelt, die während des Durchlaufens des Kegelschnitts geschnitten werden, und Beleuchtungsinformationen werden für den Punkt in der 3D-Szene aus der aus den Volumenelementen gesammelten Lichtenergie erzeugt. In manchen Aspekten können Verfahren für jeden ausgesendeten Strahl einen Kegelschnitt erstellen (der den Kegelabschnitt definiert). Jeder Kegel kann axial entlang einer Richtung eines entsprechenden Strahls zentriert sein. Das Durchlaufen eines Kegels kann an einem Mindestabstand von einem Strahlursprung beginnen, wobei der Mindestabstand gemäß Strahleigenschaften bestimmt werden kann.
-
Auf Daten, die Lichtenergieausbreitung beschreiben, wird während des Kegeldurchlaufs zugegriffen. Solche Daten können Richtungs- und Intensitätsdaten in Verbindung mit der Lichtenergieausbreitung aus einem jeweiligen Volumenelement ausdrücken. Solche Lichtenergie kann Licht, das seinen Ursprung im Volumenelement hat, und Licht, das sich durch das Volumenelement ausbreitet (und das gemäß Merkmalen von Objekten, die in einem solchen Volumenelement enthalten sind, modifiziert werden kann), umfassen. Beispielsweise kann jedes 3D-Gitterelement ein Würfel sein, und jede Fläche des Würfels kann Lichtrichtungs- und Intensitätsdaten aufweisen, die dieser zugeordnet sind. Jeder Würfel eines gegebenen Gitters schließt ein Volumen ein, das in einem oder mehreren größeren Gitterelementen eingeschlossen ist (mit Ausnahme der größten Elemente). Körnigere Elemente stellen kleinere Volumina in der 3D-Szene dar und stellen Lichtrichtungs- und Farbintensitätsdaten präziser dar, weil weniger körnige Elemente eine Mischung aus den Richtungs- und Farbintensitätsdaten mehrerer körnigerer Elemente umfassen. Die Lichttransportdaten können durch Vorwärtsverfolgung eines oder mehrerer Strahlen von jeder Lichtquelle und Hinterlegen von diskretisierten Lichtenergiedatensätzen in der 3D-Szene gemäß den Ergebnissen der Vorwärtsverfolgung erzeugt werden. Beispielsweise können durch Vorwärtsverfolgung Schnittpunkte zwischen einer Geometrie in der 3D-Szene und den vorwärtsverfolgten Strahlen bestimmt werden, was in der Hinterlegung eines Lichtenergiedatensatzes mit Merkmalen resultiert, die gemäß Merkmalen dieser Oberfläche bestimmt wurden. Nach der Hinterlegung dieser Lichtenergiedatensätze in der Szene können diese Datensätze gemäß einem speziellen Format oder Formaten, in denen diese Daten ausgedrückt würden, verarbeitet werden. Diese Lichtenergiedatensätze können auch für mehrere Zwecke verwendet werden, einschließlich zur Bereitstellung von Photonenkarten (Photon Mapping) zur Verwendung bei Photonenabfragen.
-
Ein weiterer Aspekt betrifft ein System zur Bereitstellung von globalen Beleuchtungsdaten für die 3D-Bildsynthese. Das System umfasst einen Satz von Lichtenergiedaten, wobei jeder Datensatz eine Position in einer 3D-Szene hat und Daten in Bezug auf Lichtenergietransport in einem Abschnitt der 3D-Szene umfasst. Das System umfasst einen Abfragelöser, der ausgelegt ist, eine Abfrage zu empfangen, die einen Unterabschnitt der 3D-Szene definiert, für den Lichtenergietransportdaten zurückgegeben werden sollen. Der Abfragelöser ist ausgelegt, um die Lichtenergiedatensätze zu suchen, um Datensätze innerhalb der Unterabschnitte der 3D-Szene zu identifizieren und einen Abstraktionsprozess auf den identifizierten Datensätzen anzuwenden, um ein abstrahiertes Ergebnis für die Abfrage zu erzeugen, und um das abstrahierte Ergebnis auszugeben. Das abstrahierte Ergebnis kann beispielsweise zu einem Schattierungsmodul zurückgegeben werden, das auf einem Prozessor ausgeführt wird. Das Schattierungsmodul kann die Abfrage ausgeschickt haben. Der Abfragelöser kann durch eine Schaltung mit fixer oder begrenzter Funktion implementiert sein, die verbunden ist, um Abfragen zur Auflösung von Prozessoren zu empfangen, die einen Maschinencode ausführen, der Ergebnisse aus den Abfragen während der Durchführung des Schattierungsvorgangs verwendet.
-
Der Abstraktionsvorgang kann eine Mehrzahl von Abstraktionsfunktionen umfassen, an den identifizierten Datensätzen umfassen, wobei jede der Mehrzahl von Abstraktionsfunktionen den identifizierten Datensätzen einen anderen Satz von relativen Wertigkeiten zuordnet. Jede der Mehrzahl von Abstraktionsfunktionen kann für eine jeweils vorbestimmte Anzahl von Datensätzen eingestellt sein. Der Abstraktionsvorgang kann ein Zählen einer Anzahl von identifizierten Datensätzen und Interpolieren zwischen Ergebnissen von zwei der Abstraktionsvorgängenumfassen, wenn die gezählte Anzahl an identifizierten Datensätzen zwischen der jeweils vorbestimmten Anzahl von Datensätzen der beiden Abstraktionsvorgänge liegt.
-
Der Abfragelöser kann mit einer Programmausführungseinheit implementiert sein, die in der Lage ist, mit einem aus einer Mehrzahl von vordefinierten Programmen ausgewählten Programm ausgelegt zu werden, um den Abstraktionsvorgang umzusetzen. Der Abfragelöser kann ausgelegt sein, um den Verlauf eines Strahls unter Verwendung einer definierten Schrittgröße durchzuführen. Eine Ausführungseinheit im Abfragelöser kann auslegbar sein, um eine Funktion an jedem Punkt entlang des Durchlaufs auszuwerten. Die Funktion kann durch eine Strahldatenstruktur identifiziert werden, die den durchzuführenden Strahl definiert. Die Funktion kann durch eine Geometrie innerhalb eines Hüllkörpers identifiziert werden, innerhalb dessen der Strahl auszuführen ist. Die Abfrage kann eine Richtungsangabe umfassen, und der Abfragelöser kann die Richtungsangabe verwenden, um Richtungen von Lichtenergietransport in den Lichtenergiedatensätzen zu vergleichen und Datensätze auszuschließen, die nicht der Richtungsangabe in der Abfrage entsprechen.
-
Der Abfragelöser kann eine Ordnung der identifizierten Datensätze erstellen, die auf dem relativen Abstand von einem durch die Abfrage definierten Ort basiert. Der Abfragelöser kann eine Gewichtungsfunktion für jeden Datensatz anwenden, die den Platz des Datensatzes in der Ordnung verwendet, um eine Gewichtung zu bestimmen, die für die Lichtenergietransportdaten in diesem Datensatz anzuwenden sind.
-
Die Abfrage kann einen Parameter umfassen, und der Abfragelöser kann ausgelegt sein, um den Abstraktionsvorgang gemäß dem Parameter in der Abfrage zu konfigurieren. Die Abfrage kann eine Angabe eines Abstraktionsvorgangs umfassen, die aus einer Mehrzahl von vordefinierten Abstraktionsvorgängen ausgewählt ist und vom Abfragelöser für diese Abfrage anzuwenden ist. Die Abfrage kann Informationen für eine Funktion aufweisen, die bei der Erzeugung von relativen Gewichtungen für jeden identifizierten Datensatz zu verwenden ist, um das abstrahierte Ergebnis zu erstellen. Beispielswiese kann die Abfrage eine Auswahl aus einem Polynom und Koeffizienten für das Polynom aufweisen, wobei das Polynom inkrementell ausgewertet wird, falls Datensätze in nach zunehmendem Abstand gereihter Reihenfolge von einem Ort, der in der Abfrage spezifiziert ist, identifiziert werden. Aspekte der Offenbarung betreffen Verfahren, die durch einen solchen Abfragelöser implementiert wird, und Verfahren durch Systeme, die einen solchen Abfragelöser umfassen, implementiert sind.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt Bauteile eines Hybridbildsynthesesystems, bei dem Strahlenverfolgung und Volumenbildsyntheseeingaben verwendet werden;
-
2–3 zeigen Aspekte der Verwendung von Gittern aus Volumenelementen, um Lichtenergiecharakterisierungsinformationen im 3D-Raum zu lokalisieren;
-
4 zeigt eine Geometriebeschleunigungsstruktur, die beim Verfolgen von Strahlen in einer 3D-Szene verwendet werden kann;
-
5–7 zeigen 2D-Ansichten eines Beispiels für eine Hybridstrahlenverfolgung und einen Kegeldurchlauf innerhalb von Gittern aus Volumenelementen;
-
8 zeigt ein Beispiel für einen Ansatz zur Erzeugung von Gittern aus Volumenelementen, die Lichtenergiecharakterisierungsinformationen enthalten;
-
9–10 zeigen Beispiele für Ansätze für Hybridstrahlenverfolgung und volumetrische Lichtenergieschätzung zur Bestimmung von Schattierungsinformationen für Punkte in einer 3D-Szene oder Pixeln einer Bildsynthese, die beispielsweise erstellt wird;
-
11 zeigt eine weitere Generalisierung der spezielleren Beispiele aus 9 und 10;
-
12 zeigt ein Beispiel für ein Verarbeitungssystem, in dem offenbarte Aspekte implementiert werden können;
-
13 zeigt ein Beispiel für ein Abfragelösersystem;
-
14 zeigt Lichtenergiedatensätze, die sich in Volumenelementen befinden;
-
15 zeigt Aspekte eines Ansatzes zur Bestimmung einer Gruppe von Datensätzen, die auf eine Abfrage nächster Nachbarn (Kearest-Neighbor-Abfrage) ansprechen;
-
16 zeigt eine Mehrzahl von Gewichtungskurven, die für Daten für Datensätze angewendet werden können, die als auf eine gegebene Abfrage ansprechend bestimmt wurden;
-
17 zeigt eine Reihenfolge von Lichtdatensätzen nach zunehmendem Abstand, bezogen auf Abstrahierungsdaten aus Datensätzen, die auf eine Abfrage ansprechen;
-
18 zeigt, dass Mischfunktionen und Abfragen unterschiedliche relative Gewichtungen oder Prioritäten für verschiedene Merkmale von Datensätzen innerhalb einer Gruppe von Datensätzen aufweisen können;
-
19 zeigt ein Beispiel für ein System zur Abfrageauflösung, das eine Mehrzahl von Abfragelösereinheiten aufweist, die jeweils Schaltungen mit begrenzter Programmierbarkeit zur Ausführung bestimmter Funktionen aufweisen können;
-
20 zeigt Aspekte eines Beispiels für ein Verfahren zur Abstrahierung von Daten aus Datensätzen, die als auf eine Abfrage ansprechend angesehen werden;
-
21 zeigt ein Beispiel für einen Abstraktionsvorgang; und
-
22 zeigt ein Beispiel für einen Datenfluss innerhalb von Systemen, die Abfrageauflösung und Datenabstrahierung gemäß der Offenbarung durchführen.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Strahlenverfolgung kann lebhafte und detaillierte Bilder aus 3D-Szenendefinitionen erzeugen und zur Modellierung von kompliziertem/n Lichtverhalten und -effekten eingesetzt werden. Strahlenverfolgung wird hier als Abtastverfahren verwendet, um Abtastwerte von Lichttransportdaten für Abschnitte einer 3D-Szene zu entnehmen oder zu entwickeln, die relativ nahe bei einem Punkt sind, für den Schattierungsinformationen erhalten werden müssen. Hier wird, wenn eine Abtastung von einem Punkt stammt, der relativ nahe beim Strahlenursprung ist, diese weniger Rauschen aufweisen als eine Abtastung, die von einem Punkt erhalten wird, die weiter vom Strahlenursprung entfernt ist, weil das Raumvolumen, in dem die Abtastung erhalten wird, zunimmt, falls der Abstand vom Ursprung zunimmt. Die Strahlenabtastung kann bei einer relativ geringen Stichprogendichte durchgeführt werden (z. B. eine Abtastdichte, die ein verrauschtes Bild erzeugen würde, falls die Abtastungen von Abschnitten der 3D-Szene stammten, die relativ weit vom Ursprung der Strahlen entfernt ist). Wird die Abtastdichte relativ gering halten, kann der Berechnungsaufwand für die Strahlenverfolgung niedriger gehalten werden.
-
In Verbindung mit diesem Strahlenverfolgungsansatz wird eine Abtastung von diskretisierten Lichttransportdatensätzen (nachstehend erläutert), die Unterabschnitten der 3D-Szene zugeordnet sind, die weiter weg vom Strahlenursprung sind, durchgeführt (z. B. außerhalb eines Maximalabstands, bis zu dem der/die Strahl(en) verfolgt wurde(n)). Ergebnisse einer oder mehrerer Schattierungen, die durch (einen) Strahlschnittpunkt(e) induziert wurden, und Daten von den Lichttransportdatensätzen können beide verwendet werden, um das endgültige Schattierungsergebnis zu erhalten.
-
Genauer gesagt umfasst Strahlenverfolgung ein Identifizieren eines Schnittpunkts zwischen einem Strahl, der in der 3D-Szene wandert, und einer Oberfläche. Dann kann diese Oberfläche schattiert werden, um die Punktabtastung durchzuführen, die verwendet wird, um Merkmale einer Oberfläche zu bestimmen, von welcher der Strahl ausgesendet wurde. Das Identifizieren eines Schnittpunkts für einen Strahl kann ein rechentechnisch teurer Vorgang sein. Um das Schnittpunkttesten rechentechnisch effizienter zu gestalten, kann eine Geometriebeschleunigungsstruktur bereitgestellt werden, die Elemente umgebende Abschnitte der Oberflächen (die aus Grundobjekten bestehen können) in der 3D-Szene aufweist. Beispielsweise kann eine Geometriebeschleunigungsstruktur einen Hierarchiebaum aus an der Achse ausgerichteten minimal umgebenden Rechtecken (Bounding Box) umfassen, die in Blattknoten enden, die kollektiv alle Grundobjekte umgeben, welche die Oberflächen in der 3D-Szene bilden. Die Geometriebeschleunigungsstruktur wird verwendet, um eine kleinere Gruppe von Oberflächen zu identifizieren, die vom Strahl geschnitten werden könnten; somit wird ein Strahl zuerst durch die Beschleunigungsstruktur geführt, und dann wird er auf Schnittpunkte mit beliebigen Oberflächen getestet, die immer noch Kandidaten für Schnittpunkte mit diesem Strahl sind.
-
Ein Ansatz, der eine Vorberechnung von Lichttransportinformationen innerhalb von vorbestimmten Raumvolumina in einer 3D-Szene bereitstellt, kann verwendet werden, um Lichtdurchgangsinformationen in verschiedenen Abschnitten einer solchen 3D-Szene zu charakterisieren. Während der Bildsynthese kann es wünschenswert sein, Merkmale von Lichtenergie zu bestimmen, die an einem gegebenen Punkt in der 3D-Szene ankommt, und die vorberechneten Lichttransportinformationen können verwendet werden. Ein Gitter aus Volumenelementen kann eine Möglichkeit bereitstellen, bestimmte Lichtinformationen bestimmten Teilen einer 3D-Szene zuzuordnen, wie nachstehend erläutert ist.
-
Ein Beispiel für ein Gitter aus Volumenelementen ist eine Gruppe von ”gepackten” Volumina, typischerweise mit einheitlicher Form, die eine 3D-Szene ausfüllen. Beispielsweise kann eine Gruppe von Würfeln mit einer gegebenen Dimensionalität gepackt werden, um die 3D-Szene auszufüllen. In manchen Fällen können mehrere Gitter aus Volumenelementen definiert sein, um die 3D-Szene mehrere Male zu füllen. Beispielsweise kann eine Mehrzahl von Gittern aus Volumenelementen, die jeweils eine Gruppe von Würfeln mit einer gegebenen Größe aufweisen, verwendet werden, um die Szene zu füllen. Funktionell bedeutet das, dass ein größerer Würfel eines Gitters mehrere Würfel geringerer Größe eines anderen Gitters enthält (falls z. B. ein Element entlang jeder Dimension geteilt ist, dann würde das zu 8 Elementbestandteilen führen). Die Gitter aus Volumenelementen werden jedoch nicht durchquert, indem sie einer Verbindung oder einem Pfad von einem größeren Volumenelement zu einem kleineren folgen. Auf die Volumenelemente wird stattdessen während des Durchlaufs von einem Punkt (z. B. einem Ursprung des Strahls) in eine Richtung durch die 3D-Szene zugegriffen, und auf Daten von Volumenelementen, die während dieses Durchlaufs geschnitten werden, wird zugegriffen. Falls mehrere Gitter mit unterschiedlicher Größe die 3D-Szene besetzen, kann eine Auswahl einer bestimmten Größe von Volumenelementen getroffen werden, um eine Abtastung jeder Position in der 3D-Szene zu erhalten, an der Abtastungen genommen werden. Ein Durchlauf kann erzeugt werden, indem eine definierte Form (z. B. ein Kegel) auf Überlappungen mit einer Sequenz von Volumenelementen getestet wird. Die Volumenelemente können überlappen, beispielsweise dort, wo sich die Größe der getesteten Volumenelemente verändert.
-
Als Beispiel kann eine Gruppe von Volumenelementen erzeugt werden, die von kleinen Elementen bis zu größeren Elementen, die kleinere Elemente enthalten, reichen. Jedes Volumenelement kann eine 6-seitige regelmäßige Form (z. B. ein Würfel) aufweisen. Jede Fläche der Form kann Licht parametrisieren, das durch diese Fläche wandert. Ein Volumenelement, das andere Volumenelemente enthält, wird Daten zugeordnet, die eine Mischung der Lichttransportinformationen für jedes enthaltene Volumenelement darstellen. Somit kann jedes Volumenelement die gleiche Menge an Daten verwenden, um Lichttransportinformationen darzustellen, was dazu führt, dass Lichttransportinformationen für ein gegebenes Raumvolumen mit unterschiedlichen Genauigkeitsgraden verfügbar sind. Anders gesagt kann eine mehrere Größen aufweisende Gruppe von verschachtelten Volumenelementen, wie z. B. den eng gepackten Würfelelementen im 3D-Szenenraum (und im Gegensatz zu einem spärlichen Baum von Volumenelementen, die zum Umgeben der Szenengeometrie positioniert und dimensioniert sind), erzeugt werden, wobei jedes Volumenelement eine Charakterisierung des Lichts umfasst, das von jeder der Flächen dieses Volumenelements ausgesendet wird. Ein größeres Volumenelement stellt die Lichtemission von jedem der mehreren kleineren Volumenelemente dar, die sich darin befinden, aber mit geringerer Genauigkeit.
-
Nach der Schaffung von Volumenelementen können diese zur Bildsynthese verwendet werden, indem ein Kegelschnitt von einer Kamera oder einer Oberfläche in der 3D-Szene durchgeführt wird und die Lichtemission von allen Volumenelementflächen, die auf dem Pfad des Kegelschnitts liegen, gesammelt werden. Näher beim Ursprung des Kegels (von dem aus Kegelschnitte an jeder Abtastposition genommen werden) wird auf kleinere Volumenelemente zugegriffen und die Lichtemissionsinformationen werden verwendet, während bei größerem Abstand vom Ursprung auf größere Volumenelemente zugegriffen wird. Ein Merkmal der Abtastung eines oder mehrerer solcher Volumenelemente ist, dass jede weitere Ebene in der Volumenelementstruktur achtmal mehr Speicher benötigen kann (wobei jede Dimension gleichermaßen in ein Gitter unterteilt ist, das für vier unterschiedliche Dimensionen homogen ist). Daher ist nicht nur die Gesamtspeichergröße, die zur Speicherung der Volumenelementgruppe notwendig ist, größer, sondern auch die Speicherbandbreite, die während der Bildsynthese erforderlich ist, würde zunehmen, da die Abtastung von mehr kleinen Volumenelementen mehr Speicherbandbreite erfordert als Abtastung von weniger großen Volumenelementen (wobei die Datenmenge, die zur Darstellung der relevanten Beleuchtungsinformationen relevant ist, konstant gehalten wird). Somit ergeben mehr Schichten in der Hierarchie genauere Ergebnisse, führen aber zu höheren Speicherkosten. Ein Kegel steht hier für eine Form, die ein Volumen einschließt und eine zunehmende Querschnittsfläche in eine Richtung orthogonal zur Längsachse der Form aufweist, wobei die Form entlang dieser Achse an Länge zunimmt. In manchen Fällen kann der Kegelschnitt symmetrisch um eine solche Achse erfolgen. Hier impliziert ein Kegelschnitt (ein Querschnitt des Volumens) nicht, dass der Querschnitt eine bestimmte Form aufweist. Beispielsweise kann der Querschnitt kreisförmig, oval, rechteckig usw. sein.
-
In den nachstehenden Offenbarungen sind Beispiele für sowohl Punktabtast- als auch Volumenabtastverfahren (z. B. Strahlenverfolgung und Volumenelementabtastung) offenbart, um Beleuchtungsinformationen an einer Position in einer 3D-Szene zu bestimmen. Zusammengefasst wird nachstehend erläutert, dass Punktabtastung für eine oder mehrere Abtastungen durchgeführt wird, die auf innerhalb einem Schwellenabstand vom Punkt begrenzt sind. Beispielsweise können Strahlen verfolgt werden, um einen Schnittpunkt, falls vorhanden, innerhalb eines Schwellenabstands vom Punkt zu bestimmen. Außerhalb dieses Schwellenabstands kann eine Volumenabtastung erfolgen. In einem Beispiel wird eine Volumenabtastung durchgeführt, indem ein Kegelschnitt durch ein Gitter aus Volumenelemente geführt wird. Die Größe der Volumenelemente, von denen Abtastwerte erhalten werden, kann gemäß einem Abstand vom Punkt bestimmt werden. Solche Größen können auch gemäß einem Ausbreitungsfaktor in Verbindung mit dem Kegel gewählt werden, wobei der Ausbreitungsfaktor angibt, wie schnell der Kegel sich als Funktion des Abstands ausbreitet.
-
1 zeigt Funktionselemente eines Hybridstrahlenverfolgungssystems 10. System 10 umfasst eine Quelle für Strahlendefinitionsdaten 12, die eine Eingabe für ein Strahlenschnittpunkttestmodul 14 bereitstellt. Das Strahlenschnittpunkttestmodul 14 weist außerdem eine Beschleunigungsstruktur 15 und (eine) Quelle(n) für 3D-Szenedaten 19 auf. Die Strahlenschnittpunkttestung 14 überträgt Schnittpunkttestdaten an ein Strahlenschnittpunktschattierungsmodul 29. Die Strahlenschnittpunktschattierung 29 gibt Schattierungsergebnisse an einen Abtastpuffer 17 aus.
-
Ein volumetrischer Bildsynthesevorgang 27 empfängt Lichttransportinformationen, die aus volumetrischen Elementen durch ein volumetrisches Datenzugriffsmodul 25 erhalten werden. Das volumetrische Datenzugriffsmodul 25 kann Eingaben aus einer oder mehreren aus einer Photonenstruktur 21 und einem Volumengitterspeicher 23, der Lichttransportdaten enthält, wie nachstehend genauer erläutert ist, empfangen. Ein Gittererzeuger 22 ist ausgelegt, um die Gitter aus Volumenelementen zu erzeugen, die in Gittern 23 gespeichert sind und aus diesen bereitgestellt werden. 1 zeigt außerdem, dass ein Photonenabfragevorgang 28 bereitgestellt werden kann, um Photonenkarten abzurufen, die als Photonenkarten 20 gespeichert sind. Photonenkarten 20 können in Verbindung mit der Erzeugung der Gitter aus Volumenelementen 23 erstellt werden, als weiteres Produkt der Verarbeitung, die mit Lichtenergiedatensätze 21 erfolgt. Der volumetrische Bildsynthesevorgang 27 kann als Steuerung für volumetrische Abtastaufgaben dienen und steuern, von welchen Volumenelementen Abtastwerte erhalten werden sollen, und außerdem aus einer solchen Abtastung erhaltene Ergebnisse verarbeiten.
-
2 zeigt ein Gitter aus Volumenelementen 40, wobei ein oder mehrere der Volumenelemente 41 speziell identifiziert ist/sind. 3 zeigt ein Gitter aus Volumenelementen 43, die kleinere und dichtere Volumenelemente als Gitter 40 aufweisen. Da das Gitter 43 kleinere Elemente enthält als Gitter 40, können mehrere Elemente in Gitter 43 in einem einzigen Element aus Gitter 40 existieren. 2 und 3 implizieren nicht, dass die Volumenelemente aus Gitter 41 und 43 hierarchisch sind oder dass eine Beziehung zwischen dem Volumenelement 41 und den Volumenelementen, die Abschnitte des Volumenelements 41 einnehmen, gibt (z. B. gibt es keine Implikation, dass die Gitter von einem größeren zu einem kleineren Element, innerhalb eines Volumens des größeren Elements, durchlaufen werden, wie das bei einer hierarchischen Beschleunigungsstruktur der Fall sein kann).
-
In 3 sind Volumenelemente 50–52 speziell identifiziert. Volumenelemente sind Lichttransportcharakterisierungsdaten zugeordnet. Lichttransportcharakterisierungsdaten für ein gegebenes Volumenelement charakterisieren den Transport von Licht von diesem Element; sodass Lichtenergie in diesem Volumenelement erzeugt werden kann oder von außerhalb des Elements stammen kann. In einer Implementierung kann jedes Volumenelement einem oder mehreren Datensätzen von Energie, die von Oberflächen innerhalb dieses Volumenelements ausstrahlt, zugeordnet sein. Solche Strahlungsenergie kann basierend auf Vorwärtsverfolgung aus Emissionsquellen charakterisiert werden.
-
Beispielsweise können solche Daten Lichttransport durch spezielle Flächen der Volumenelemente darstellen. Der Klarheit der Beschreibung halber zeigt 3, dass ein Element 50 eine Fläche 90 aufweist, die einer Lichttransportcharakterisierung 82 zugeordnet ist. Die Lichttransportcharakterisierung 82 kann Informationen über Licht umfassen, das von innerhalb des Elements 50 nach außerhalb des Elements 50 abgestrahlt wird. Die Lichttransportcharakterisierung 82 kann auch Informationen über Licht, das durch die Fläche 90 in das Element 50 eintritt und umgekehrt umfassen. Eine ähnliche Lichttransportcharakterisierung 83 ist für eine Fläche 91 eines Elements 51 identifiziert. Lichttransportcharakterisierungen 84 und 85 sind für andere Fläche eines Elements 51 dargestellt. In einem Beispiel ist eine Lichttransportcharakterisierung 81 eine weniger körnige Charakterisierung von Lichttransport. Solche Lichttransportcharakterisierungen 81–85 können Informationen über Lichtrichtung, Farbe und Intensität von Licht umfassen. Die Daten können eine oder mehrere Richtungen und Quantifizierungen von Lichtenergie umfassen, die in eine der Richtungen wandert. Eine Lichttransportcharakterisierung kann Licht, das in nur eine Richtung wandert (z. B. aus dem Volumen heraus), Licht, das in verschiedene Richtungen wandert, und bidirektionalen Lichttransport charakterisieren. In anderen Implementierungen kann eine statistische Verteilung oder Kurve bereitgestellt werden, die ein Muster oder eine Verteilung von Lichtenergie über der Oberfläche jeder Fläche definiert.
-
In einem Beispiel kann eine Verteilung von Lichtenergie bereitgestellt werden, in der unter Verwendung der gleichen Verteilungsfunktion verschiedene Parameter für jede Charakterisierung hergestellt werden können. Das Muster oder die Verteilung kann gemäß der tatsächlichen Lichtenergie, die ausgesendet wird, angepasst werden. In manchen Beispielen wird ein einziger Mustertyp verwendet, der einen oder mehrere Parameter aufweist, die für jede Fläche abgestimmt werden können, und diese Parameter werden dann so weit wie möglich so ausgewählt, sodass sie der tatsächlichen Verteilung entsprechen. Wie erläutert ist die Zuordnung von Lichtenergieausbreitung durch Flächen der Volumenelemente ein Beispiel, es sind aber verschiedene Wege möglich, um Lichttransport innerhalb solch eines Volumenelements auszudrücken. Im Allgemeinen würde ein solcher Lichttransport auf eine Weise ausgedrückt, die eine Auswertung des Lichttransports entlang des Durchlaufs eines Kegels ermöglicht.
-
Ein Volumenelement 41, andererseits, umfasst Volumenelemente 43, von denen 4 (von 8) in 3 dargestellt sind. 3 zeigt auch eine Geometrie, wie etwa, dass Grundobjekte 45–46 und eine Form 47 sich innerhalb desselben Volumens befinden, das von Volumenelementen 43 eingenommen ist, obwohl gegebenenfalls keine logische Verknüpfung oder Verbindung vorhanden ist, die identifiziert, welche Geometrie innerhalb eines gegebenen Volumenelements vorhanden ist.
-
In einem Beispiel weist jede Gruppe von Volumenelementen weist eine gleichmäßige Verteilung in der 3D-Szene auf, weil die Volumenelemente dieser Gruppe in einer regelmäßigen, nichtspärlichen Struktur angeordnet sind. Viele Arten von Datenstrukturen, die bei Strahlenverfolgung eingesetzt werden, sind unregelmäßig und dafür ausgelegt, den für die Darstellung der Speicherstruktur erforderlichen Speicherplatz zu reduzieren. In einem Aspekt befinden sich die Volumenelemente in jeder Gruppe an vorbestimmten jeweiligen Positionen, und jedes ist Daten zugeordnet (”enthält Daten”), die Lichtenergie innerhalb der Grenzen dieses Hüllkörpers darstellen. Im Gegensatz dazu weist eine Beschleunigungsstruktur zur Abstrahierung einer Geometrie zur Verwendung beim Testen von Strahlen auf Schnittpunkte in der 3D-Szene Volumenelemente auf, die gemäß der Geometrie in der Szene positioniert und dimensioniert sind.
-
Eine Vorwärtsverfolgung von Lichtenergie von in die 3D-Szene einstrahlenden Lichtern kann verwendet werden, um Lichtenergie zu bestimmen, die in jedem Volumenelement dargestellt wird. Vorwärtsverfolgung kann die Verfolgung von Strahlen von jeder Lichtquelle umfassen, und für jede Stelle, an der ein Strahl schneidet, werden Daten hinterlegt, die Lichtenergie darstellen. Solch eine Hinterlegung ist additiv, da die 3D-Szene heller wird, falls mehr Lichtenergie hinterlegt wird. Solch eine Vorwärtsverfolgung weist einige Ähnlichkeiten mit einer Photonenkartierung auf, da eine Photonenkartierung ebenfalls eine Vorwärtsverfolgung aus Lichtern umfasst. Eine Photonenkartierung stellt jedoch eine Normierungsoperation bereit, die eine Gesamtmenge von Lichtenergie in der Szene konstant hält, während Photonen hinterlegt werden. Die Normierungsoperation resultiert in Oberflächen mit einer Anzahl an Photonen, die mit einer relative Komplexität dazu korreliert, wie Licht mit dieser Oberfläche interagiert. Beispielsweise kann eine matt gestrichene Wand nur wenige Photonen hinterlegt haben, während eine glänzende Glasoberfläche viel mehr aufweisen kann. In manchen Ansätzen hier kann das feinste Gitter von Volumenelementen (z. B. das Gitter mit den kleinsten Elementen) in der Größenordnung von 2^24 Elemente aufweisen, was als 8 Ebenen unter einer Wurzel ausgedrückt werden kann. Falls ein Gitter aus Volumenelementen ohne Strahlenverfolgung verwendet werden soll, kann ein feinstes Gitter in der Größenordnung von 2^40 Elementen erfordern, oder in der Größenordnung von 32.000-mal mehr Gitterelementen in der körnigsten Ebene der Gitterstruktur. Diese Beispiele sind nichteinschränkend und qualitativ.
-
4 zeigt ein Beispiel für eine Geometriebeschleunigungsstruktur 101, die durch im Beschleunigungsstrukturspeicher 15 gespeicherte Daten dargestellt sein kann. Die Geometriebeschleunigungsstruktur 101 umfasst ein Wurzelelement 102, das mit Kindelementen 104–106 verknüpft ist. Jedes Kindelement 104–107 kann wiederum mit Kindelementen 107–109 verknüpft sein. Diese Beziehungskette kann weiterlaufen, bis eine Gruppe von Blattknoten 110–112 erreicht ist. In manchen Implementierungen umgrenzt jedes Element einen Teil eines 3D-Raums, in dem eines oder mehrere Elemente einer Geometrie vorhanden sind. In manchen Implementierungen ist die Geometriebeschleunigungsstruktur 101 spärlich, sodass Bereiche einer 3D-Szene, die keine Geometrie enthalten, keine Geometriebeschleunigungsstrukturelemente aufweisen. Außerdem ist jedes Beschleunigungsstrukturelement (mit Ausnahme der Wurzel) mit einem oder mehreren Elternelementen und einem oder mehreren Kindelementen verbunden. Mehrere Kindelemente können mit demselben Elternelement verbunden sein, und mehrere Elternelemente können auch mit einem einzelnen Kindelement verbunden sein. Beispielsweise umschließt ein Elternknoten einen gegebenen Unterabschnitt des Raums, in dem sich bestimmte Abschnitte einer Geometrie befinden, und Kindknoten umschließen Auswahlbereiche in diesem Elternknoten. Geometriebeschleunigungsstrukturen können Verzweigungen mit unterschiedlicher Knotenanzahl zwischen Wurzel und den einzelnen Blättern aufweisen, können keine explizit definierte Wurzel aufweisen, können alle Grundobjekte von Knoten umschließen, die nur Grundobjekte umschließen oder andere Knoten umschließen. Folglich stellt 4 ein Beispiel und keine Einschränkung der Implementierung einer Geometriebeschleunigungsstruktur dar.
-
Beispielsweise kann eine Beschleunigungsstruktur zur Umschließung von Szenengeometrie einen Baum aus an einer Achse ausgerichteten minimal umgebenden Rechtecken umfassen (ein Baum bedeutet hier, dass es zwischen Elementen, die von einem Ausgangspunkt im Baum zu einem anderen Punkt verfolgt werden können, eine Beziehung gibt). Beispielsweise kann ein Baum aus an einer Achse ausgerichteten minimal umgebenden Rechtecken hierarchisch sein und die gesamte Geometrie von Blattknoten der Hierarchie umschlossen haben. Andere Beispiele für Beschleunigungsstrukturen umfassen K-D-Bäume und Kugelhierarchien. Funktionell gesehen kann eine hierarchische Beschleunigungsstruktur durchlaufen werden, indem bei einem Wurzelknoten, der die gesamte Szenengeometrie umschließen kann (der Wurzelknoten kann impliziert sein, als ein Ausmaß der gesamten 3D-Szene), begonnen wird und dann alle Kinder der Wurzel gesucht und auf Schnittpunkte getestet werden, wonach die Verzweigungen aller Kindknoten durchlaufen werden, die einen Schnittpunkt mit einem Strahl aufweisen, wobei demselben Muster gefolgt wird. Somit kann ein Strahl, indem eine Beschleunigungsstruktur für Geometrie durchlaufen wird, auf Schnittpunkte in einer Mehrzahl von unterschiedlichen Teilen der 3D-Szene gleichzeitig getestet werden. Das Strahlenschnittpunkttestmodul 14 greift auch auf 3D-Szenendaten aus der Quelle der 3D-Szenedaten 19 (1) zu. Solche 3D-Szenendaten können Grundobjekte umfassen, die Objekte in der 3d-Szene bilden, und in einem Beispiel wird auf diese zugegriffen, wenn ein Blattknoten geschnitten wird, sodass die Geometrie im Blattknoten auf Schnittpunkte getestet werden muss.
-
Die Geometriebeschleunigungsstruktur 101 wird vom Strahlenschnittpunkttestmodul 14 verwendet, um zu vermeiden, dass Untergruppen von Szenengeometrie explizit auf Schnittpunkte getestet werden müssen. Bei Blattknoten, für die ein Schnittpunkt mit einem bestimmten Strahl gefunden wurde, wird die Geometrie, die in diesen Blattknoten vorhanden ist, auf Schnittpunkte mit diesem Strahl getestet, und Informationen bezüglich eines nächsten Schnittpunkts können zum Strahlenschnittpunktschattierungsmodul 29 gesendet werden. Sobald eine geschnittene Oberfläche gefunden ist, kann ein Schattierer (Shader) laufen gelassen werden, um zu bestimmen, welchen Effekt die Oberfläche aufweisen wird, falls die Bildsynthese durchgeführt wird. Ein Schattierer kann beispielsweise einen Reflexionsstrahl aussenden, und er kann auch Strahlen aussenden, die auf Lichtquellen ausgerichtet sind, um zu bestimmen, welches Licht auf die geschnittene Oberfläche auftrifft.
-
9 zeigt ein Beispiel für einen Prozess zur Erstellung von Beleuchtungsinformationen für einen Punkt in einer 3D-Szene gemäß der Offenbarung. 5–7 dienen zur Erläuterung von Aspekten des Prozesses aus 9 (5–7 zeigen der Einfachheit halber 2D-Illustrationen anstelle eines 3D-Modells). In 9 wird bei 265 ein Punkt (5, 123) als Position identifiziert, für die Beleuchtungsinformationen erhalten werden sollen. Die Position kann beispielsweise ein Punkt auf einer Oberfläche eines Objekts in einer Szene sein, oder eine Abtastung eines Pixels in einer Bildsynthese. Bei 267 wird ein Strahl (Strahl 124 in 5) definiert, der von nahe beim Punkt in eine Richtung ausgesendet wird und einem Ausbreitungsfaktor zugeordnet ist. In 5 ist ein Ausdruck des Ausbreitungsfaktors (in 2D) als Kegel dargestellt, der durch die Grenzen 125 und 126 definiert ist, die den Strahl 124 einschließen. Bei 269 wird eine Übergangszone definiert, die maximale und minimale Strahlenverfolgungsabstände umfasst (Minimalabstand 131 und Maximalabstand 132 in 5). In einem Beispiel wird die Übergangszone basierend auf dem Ausbreitungsfaktor definiert. In einem Beispiel führt ein breiter Ausbreitungsfaktor dazu, dass die Übergangszone näher beim Ursprung 123 liegt.
-
Bei 271 werden unter Verwendung einer Geometriebeschleunigungsstruktur Strahlen in der 3D-Szene verfolgt, um einen Schnittpunkt innerhalb des Maximalabstands 132 der Übergangszone zu identifizieren, falls vorhanden. In 5 wird der Strahl 124 (9, 271) vom Ursprung 123 bis zum Maximalabstand 131 verfolgt, in dem Versuch, einen nächsten Schnittpunkt zwischen dem Strahl und der Oberflächengeometrie zu identifizieren, wie oben erläutert ist. Falls bei 273 ein Schnittpunkt vor der Übergangszone vorhanden ist (näher als der Minimalabstand 131 in 5), werden dann bei 275 Schattierungsergebnisse dieses Schnittpunkts zur Bestimmung von Beleuchtungsinformationen verwendet.
-
Bei 277 beginnt, ausgehend vom Minimalabstand 131, ein Kegeldurchlauf. Die Strahlenverfolgung läuft weiter durch die Übergangszone, und falls bei 279 kein Strahlschnittpunkt innerhalb der Übergangszone vorhanden ist, werden bei 281 Ergebnisse des Kegeldurchlaufs zur Erstellung von Beleuchtungsinformationen für den Punkt verwendet. Falls bei 279 ein Strahlschnittpunkt in der Übergangszone gefunden wird, dann werden bei 283 Ergebnisse des Kegeldurchlaufs mit einem Schattierungsergebnis vermischt, das von dem Strahlschnittpunkt hervorgerufen oder verursacht ist (z. B. eine Schattierungsausgabe).
-
Nun wird 5 verwendet, um weitere Aspekte des in 9 eingeführten Kegeldurchlaufs zu erläutert. Der Kegeldurchlauf umfasst, dass ein Kegelschnitt, der durch die Grenzen 125 und 126 definiert ist, vom Punkt 123 in den Raum projiziert wird (in 2D wird der Kegelschnitt zu einer Linie, die innerhalb der 2D-Ebene bewegt wird). 5 zeigt, dass ein Gitter aus Volumenelementen, die im Vergleich zu Volumenelementen von anderen Gittern jeweils ein relativ kleines Volumen haben, zur Abtastung vergleichsweise nahe zum Punkt 123 ausgewählt wird. Lichtcharakterisierungsinformationen für jedes Volumenelement, das vom Kegelschnitt geschnitten wird, werden akkumuliert (hier wird im Beispiel angenommen, dass Lichtcharakterisierungsinformationen Flächen der Volumenelemente zugeordnet sind, was ein Beispiel für eine Implementierung darstellt). Solch eine Akkumulierung kann das Verfolgen einer Menge von Lichtenergie umfassen, die innerhalb verschiedener Frequenzspektren akkumuliert ist, und auch das Akkumulieren von Opazitätswerten, die den einzelnen geschnittenen Oberfläche zugeordnet sind. Der Opazitätswert kann von Merkmalen davon abgeleitet sein, was sich im Inneren des Volumenelements befindet. Der Opazitätswert kann dazu verwendet werden, zu entscheiden, wann der Kegeldurchlauf gestoppt werden soll. Beispielsweise würde eine schwarze Wand Lichtenergie absorbieren und opak sein, sodass der Kegeldurchlauf basierend auf einer Abtastung der Lichtcharakterisierungsdaten eines Volumenelements, das diese Eigenschaften spezifiziert, gestoppt werden kann.
-
5 zeigt außerdem, dass, falls das Gitter aus Volumenelementen, an den Abtastungen genommen werden, an Größe zunimmt, eine Übergangszone bereitgestellt werden kann, in der Abtastungen von Volumenelementen beider Größen genommen werden können. Als spezielles Beispiel wird beim Umschalten zwischen einem Gitter aus Volumenelementen mit einer Größe, die dem Volumenelement 128 entspricht, zu einem Gitter aus Volumenelementen mit einer Größe, die beispielsweise dem Volumenelement 129 entspricht, eine Übergangszone zwischen 125 und 135 abgegrenzt. Volumenelemente, die gestrichelt umrandet sind (z. B. 140) zeigen, dass ein akkumulierter Opazitätswert gefunden wurde, sodass kein weiterer Kegeldurchlauf mehr notwendig ist. Ein Entscheidungskriterium, ob ein Durchlauf gestoppt werden kann, kann je nach Anwendung variieren.
-
6 zeigt einen Querschnitt 142 der Kegelprojektion, die in Bezug auf 5 erläutert wurde. In 6 weisen die Volumenelemente eine ähnliche Größe auf wie Volumenelement 127. 6 zeigt somit, dass einige Volumenelemente vollständig innerhalb des Querschnitts 142 liegen. Einige Volumenelemente liegen nur teilweise innerhalb des Querschnitts 142 (z. B. Fläche 144). Für diese Volumenelemente kann eine gewichtete Kombination der Lichtcharakterisierungsinformationen mit der von anderen Lichtcharakterisierungsinformationen kombiniert werden. 7 zeigt auf ähnliche Weise, dass die Volumenelemente an Größe zunehmen (z. B. weisen die Volumenelemente nun eine ähnliche Größe auf wie Volumenelement 128), aber der Querschnitt 143 des Kegelschnitts hat auch zugenommen. 7 zeigt auch, dass in der Praxis einige Volumenelemente vor anderen Elementen aus dem Kegeldurchlauf herausfallen; und insbesondere ist Element 146 nicht am Kegeldurchlauf beteiligt, aber umliegende Elemente sind das sehr wohl. 6 und 7 dienen auch zur Veranschaulichung, dass während des Kegeldurchlaufs Abtastungen an einer Reihe von Volumenelementen genommen werden und die Lichtcharakterisieriungsinformationen gemischt werden können, um zu einem Ergebnis zu kommen, dass im Schattierungspunkt 123 oder, falls passend, für eine andere Verarbeitung, verwendet werden kann.
-
10 zeigt eine Ergänzung zu einem Abschnitt des Prozesses aus 9. Anstatt einen Kegeldurchlauf (277 in 9) durch ein oder mehrere vordefinierte Gitter aus Volumenelementen durchzuführen, kann eine Gruppe von Abfragen zusammengestellt werden, die von diskretisierten Lichtenergiedatensätzen gemacht werden soll. Diese Abfragen können für verschiedene Bereiche eines Raums erstellt werden, der Raumvolumina entlang eines Pfads einer Kegelprojektion durch die Szene entlang eines Pfads des Strahls umschließen. Insbesondere zeigt 10 bei 314, dass eine Gruppe von Abfragen bestimmt werden kann. In einem Beispiel können Abfragen einen kugelförmigen Umfang haben, wobei Radien der Abfragen basierend auf dem Ausbreitungsfaktor des Strahls und einem Abstand vom Punkt 123 (5) bestimmt werden können. Eine Größe des abgefragten Volumens würde mit zunehmendem Abstand der Abfrage vom Punkt 123 zunehmen.
-
In einem Ansatz können verschiedene Karten oder Datenstrukturen für solche Abfragen bereitgestellt werden, die diskretisierte Lichtdatensätze enthalten. Jede Karte oder Datenstruktur kann einen anderen Abstraktionsgrad von Lichtenergiedaten aufweisen. Beispielsweise kann eine grobe Karte diskretisierte Lichtenergiedatensätze enthalten, die jeweils eine Mischung aus einer Mehrzahl solcher diskretisierter Lichtenergiedatensätze darstellen. Eine Karte oder Datenstruktur mit geeigneter Körnigkeit kann ausgewählt werden, um jede Abfrage zu erfüllen. Somit ergibt eine Abfrage mit einem großen Volumen nicht notwendigerweise mehr Datensätze, sondern kann dazu verwendet werden, eine Datenstruktur mit Lichtenergiedatensätzen abzufragen, die jeweils eine Mischung aus körnigeren Datensätzen darstellen (die wiederum unter Verwendung einer anderen Datenstruktur abgefragt werden können). In solch einem Ansatz kann es passend sein, eine einzelne Datenstruktur bereitzustellen, die für jede Abfrage verwendet werden kann, aber Datensätze mit einem geeigneten Körnigkeitsgrad werden ausgewählt, um eine bestimmte Abfrage zu erfüllen. Der geeignete Grad kann basierend auf verschiedenen Faktoren bestimmt werden, einschließlich des Volumens oder Größe der Abfrage, die mit einem Abstand von einem Punkt korrelieren können, für den Lichtenergieinformationen gesammelt werden.
-
Somit können diskretisierte Lichtenergiedatensätze als Beschreibung von Lichtenergie an einem Punkt im Raum beginnen, aber beim Mischen mit anderen Datensätzen, oder bei einer Abstraktion zu einem volumetrischen Element, kann ein resultierender Lichtenergiedatensatz für ein bestimmtes Volumen erstellt werden. Solche eine Erstellung kann im Vorhinein oder bei Bedarf erfolgen. In einem Ansatz können, falls eine solche Erstellung bei Bedarf erfolgt, Ergebnisse einer solchen Erstellung in einem Cache gespeichert werden. In einem Beispiel können gemeinsame Volumina für eine Mehrzahl von Durchlaufprozessen (z. B. unterschiedliche Kegeldurchläufe) identifiziert werden, und dann können Lichtenergiecharakterisierungsdaten mit einem geeigneten Körnigkeitsgrad (siehe 4–5 als Beispiel) erstellt werden. In einem Beispiel können Kegel von unterschiedlichen Ursprüngen durchlaufen werden, aber sie erfordern alle Lichtenergiecharakterisierungsdaten vom gleichen Abschnitt der 3D-Szene mit dem gleichen Körnigkeitsgrad (der beispielsweise durch den Abstand von den jeweiligen Ursprüngen, und beispielsweise von den jeweiligen Ausbreitungsfaktoren bestimmt werden kann.
-
In einem weiteren Ansatz können Abfragen aus mehreren überlappenden Volumina erstellt werden, und Boolesche Logik kann eingesetzt werden, um ein endgültiges Abfrageergebnis zu erhalten. Beispielsweise können Kugelabfragen erstellt werden, sodass sie sich in gewissem Ausmaß überlappen, und nur Photonen, die im überlappenden Abschnitt vorhanden sind, können zurückgegeben werden. Diese Methoden können verwendet werden, um abfragende Lichtenergiedaten zu approximieren, die Oberflächen eines Gitters aus Volumenelementen zugeordnet sind (siehe 3). Wie in 9 werden, falls kein Strahlschnittpunkt in der Übergangszone detektiert wird, bei 318 Photonenabfrageergebnisse verwendet, um Schattierungsausgaben für den Punkt zu erstellen. Falls es einen Schnittpunkt in der Übergangszone gibt (und nicht vorher, siehe 9), dann werden bei 320 Photonenabfrageergebnisse mit Ergebnissen aus der Schattierung des Schnittpunkts gemischt.
-
Nach den oben offenbarten spezielleren Beispielen zeigt 11 ein allgemeineres Verfahren, das in Implementierungen der Offenbarung umgesetzt werden kann. 11 zeigt, dass bei 345 eine Position identifiziert wird, für die Beleuchtungsinformationen erhalten werden sollen. Diese Position kann beispielsweise ein Punkt in der 3D-Szene sein (z. B. ein Punkt auf einer Oberfläche eines Objekts) oder eine Abtastung für ein 2D-Bild, das erstellt wird. Beleuchtungsinformationen werden in der Offenbarung so verwendet, dass sie jede beliebige Art von Bildsyntheseinformationen umfassen, und es wäre zu erwarten, dass solche Beleuchtungsinformationen je nach durchgeführter Bildsyntheseart variieren. Um solche Beleuchtungsinformationen zu erstellen, werden bei 347 eine oder mehrere punktuelle Abtastungen der Beleuchtung genommen, die diese Position erreicht. Bei 349 werden eine oder mehrere Volumenabtastungen für Beleuchtungszustände bestimmt, die sich auf die Position auswirken könnten, für welche Beleuchtungsinformationen erhalten werden sollen. Bei 351 wird eine Abstandseinschränkung für eine solche Volumenabtastung auf einen Abstand außerhalb eines definierten Radius von der Position festgesetzt, während umgekehrt die punktuellen Abtastungen innerhalb dieses Radius eingeschränkt werden. Bei 353 werden die Punkt- und Volumenabtastungen genommen. Bei 355 werden Ergebnisse von relativ nahen Punktabtastungen höher gewichtet als andere durchgeführte Abtastungen. Bei 357 können Ergebnisse von Punkt- und Volumenabtastungen kombiniert werden, um die Beleuchtungsinformationen für die Position zu erstellen. Somit ist der in 11 dargestellte Prozess generisch in Bezug darauf, wie die Punktabtastungen und die Volumenabtastungen genommen werden können. Die Punktabtastungen können auf einen relativ kurzen Abstand von der Position eingeschränkt werden oder auf andere Weise gemäß dem Abstand von der Position gewichtet werden, während die Volumenabtastungen über ein Volumen akkumuliert werden, das durch die 3D-Szene führt, von der Position aus. Eine Dämpfung oder ein Ausmaß der 3D-Szene kann beispielsweise einen Maximalabstand festlegen, bei dem Volumenabtastungen genommen werden.
-
Die obige Offenbarung betrifft primär die Erstellung von Bildsyntheseausgaben aus spezifizierten Datenquellen (z. B. Schattierung von Schnittpunktergebnissen und Sammeln von Daten aus Elementen aus einem oder mehreren Gittern aus Volumenelementen). 8 stellt eine Übersicht über ein Beispiel für ein Verfahren zur Erstellung von Datenquellen bereit, die bei der Erstellung der Bildsyntheseausgaben verwendet werden.
-
8 zeigt ein Beispiel für einen Prozess 205, durch den Lichttransportdaten zur Verwendung bei der Bildsynthese aus einer 3D-Szene erstellt werden können. 8 zeigt, dass der Prozess 205 bereitstellt, dass bei 206 Strahlen von in eine 3D-Szene einstrahlenden Lichtern vorwärtsverfolgt werden können. Beispielsweise kann eine jeweilige Gruppe von Strahlen für jedes Licht bestimmt werden, wobei eine Reihe von Strahlen in jeder Gruppe gemäß einer Intensität oder Bedeutung dieser Lichter bestimmt werden kann. In einem Ansatz können die Strahlen unter Verwendung von Monte-Carlo- oder Quasi-Monte-Carlo-Prinzipien spezifiziert werden. Strahlen können auch basierend auf bekannten Positionen von Objekten in einer 3D-Szene spezifiziert werden. Ein Künstler kann auch Strahlen oder Strahlenbündel, die vorwärtsverfolgt werden sollen, direkt spezifizieren. Diese Vorwärtsverfolgung macht Objekte in der Szene für jede der Lichter sichtbar. Außerdem können, sobald die Sichtbarkeit jedes Lichts bestimmt ist, weitere Generationen von Strahlen gemäß den Merkmalen der jeweiligen Oberfläche, die von jedem der Objekte geschnitten wird, vorwärtsverfolgt werden. Bei 208 können diskrete Lichtenergiedatensätze bei jeder geschnittenen Oberfläche gemäß den Merkmalen dieser Oberfläche hinterlegt werden. Beispielsweise kann eine diffuse Oberfläche eine Gruppe von Lichtenergiedatensätzen aufweisen, die auf der Oberfläche verteilt sind, während eine glänzende Oberfläche eine Reflexion aufweisen kann, die durch dichter gepackte Lichtenergiedatensätze dargestellt ist. Außerdem werden Strahlen, die von einer gegebenen Oberfläche aus verfolgt werden, gemäß der Art der Oberfläche bestimmt. Beispielsweise können Strahlen von einer reflektierenden Oberfläche gemäß dem Snelliusschem Gesetz verfolgt werden. Eine diffuse Oberfläche streut Licht stärker und kann daher dazu führen, dass mehr Strahlen in verschiedene Richtungen abgegeben werden, kann aber in einem Beispiel über einen kürzeren Abstand verfolgt werden.
-
Bei 210 kann eine Beschleunigungsstruktur zur Verwendung bei Photonenkartenabfragen basierend auf den Positionen der hinterlegten Lichtenergiedatensätzen und einem geeigneten Normierungsvorgang erstellt werden. Diese Beschleunigungsstruktur kann getrennt von einer Beschleunigungsstruktur zur Verfolgung von Strahlen in der Szene sein und sich auch von den Gittern aus Volumenelementen unterscheiden. Teile dieser oder die gesamte Struktur können gemeinsam genutzt werden.
-
Bei 214 können die Gitter aus Volumenelementen erstellt werden, indem die durch die Datensätze beschriebenen Lichtenergiedaten in jeweiligen Volumina der 3D-Szene, die in verschiedenen der Volumenelemente vorhanden sind, gesammelt werden. In einem Ansatz können flächenspezifische Darstellungen von Lichtenergieausbreitung aus den gesammelten Daten erstellt werden. Bei 216 kann eine Beschleunigungsstruktur für Strahlenverfolgung erstellt werden; dieser Abschnitt des dargestellten Prozesses 205 kann gemäß herkömmlichen Ansätzen ablaufen. In manchen Beispielen können jedoch Volumengitterelemente, die verarbeitet werden, um das 3D-Gitter aus Volumenelementen zu erstellen (bei 214), als Eingabe zur Erstellung von Elementen der Beschleunigungsstruktur verwendet werden. Beispielsweise kann ein kleinstes Volumenelement, das verarbeitet wird, für sowohl Lichtenergiedatensätze als auch Geometrie verarbeitet werden, obwohl die letztendlich Bestandteile bildenden Elemente des Gitters aus Volumenelementen und der Beschleunigungsstruktur unterschiedlich sind. In manchen Implementierungen können eine oder mehrere dieser Beschleunigungsstrukturen (für Photonenabfragen, für abstrahierende Szenengeometrie und die 3D-Gitter) gemeinsame oder teilweisen gemeinsame Strukturen sein. Beispielsweise kann eine Gruppe von an einer Achse ausgerichteten minimal umgebenden Rechtecken Szenengeometrie abstrahieren, und näher bei einem Wurzelknoten auch als Gitterelemente dienen, während Blattknoten spärlich sein können.
-
Die einzelnen oben beschriebenen Abschnitte des Prozesses 205 sind seriell dargestellt. Die Prozessabschnitte können jedoch auch parallel ablaufen. Falls beispielsweise innerhalb eines gegebenen volumetrischen Abschnitts der 3D-Szene gearbeitet wird, kann ein Teil mehrerer Prozessabschnitte (z. B. 210, 212, 214 und 216) durchgeführt werden, und dann kann ein anderer volumetrischer Abschnitt der 3D-Szene als Nächstes verarbeitet werden. Außerdem kann eine Reihe von unabhängigen Prozesssträngen (oder Verarbeitungseinheiten) der Verarbeitung der verschiedenen Abschnitte des Prozesses zugewiesen werden, sodass sie gleichzeitig ablaufen können.
-
12 zeigt ein Beispiel für ein System 401, das ein oder mehrere programmierbare Elemente und Elemente mit fixer Funktion umfasst, in dem oben offenbarte Aspekte implementiert werden können. Das System 401 umfasst eine Host-Schnittstelle 403, die eine Schnittstelle mit einem Prozessor bereitstellen kann, der primär der Ausführung von Anwendungen gewidmet ist, die das System 401 für eine ausgewählte Verarbeitungsfunktionalität verwenden können, wie z. B. zur Verarbeitung von Grafiken. Solch ein Prozessor kann in einem System auf einem Chip integriert sein. Ein Bus 404 stellt Kommunikation zwischen verschiedenen nachstehend beschriebenen Bauteilen bereit. In manchen Ansätzen kann ein Anwendungsprozessor auch mit dem Bus 404 verbunden sein, und somit ist die Host-Schnittstelle 403 kein notwendiges Bauteil. Verschiedene Datenmaster 402 können verwendet werden, um die am System 401 durchzuführende Berechnung einzurichten. Solche Datenmaster 402 umfassen einen Knotendatenmaster 405, einen Pixeldatenmaster 406, einen Rechendatenmaster 407 und einen Strahlendatenmaster 408. Der Knotendatenmaster 405 kann verwendet werden, um Geometrieverarbeitung zu erstellen, die auf einer Anordnung von Rechengruppen 410 durchgeführt werden soll. Der Pixeldatenmaster 406 kann verwendet werden, um Pixelschattierungsoperationen zu erstellen, die auf der Anordnung 410 durchgeführt werden sollen. Der Rechendatenmaster 407 kann verwendet werden, um eine parallelisierte Berechnung für allgemeine Zwecke auf der Anordnung 410 durchzuführen. Der Strahlendatenmaster 408 kann verwendet werden, um Strahlenverfolgungsoperationen auf der Anordnung 410 zu erstellen, beispielsweise Strahlschnittpunkttesten und Strahlschattierungsoperationen.
-
Die Anordnung 410 umfasst eine Gruppe von Rechenelementen, die als Kerne 421–424 identifiziert sind. Jeder Kern 421–424 umfasst einen jeweiligen lokalen Speicher 435–438. In einem Beispiel kann die Anordnung 410 auch gemeinsame Texturpipelines 430 und 431 umfassen. Eine Zeitsteuerungsvorrichtung 440 kann zwischen Aufgaben entscheiden, die von den einzelnen Datenmastern 405–408 durchzuführen sind. Ein Aufgabenverteiler 441 kommuniziert mit der Zeitsteuerungsvorrichtung 440, um Rechenaufgaben zu verteilen, die auf der Anordnung 410 durchzuführen sind. Ein Strahlencoprozessor 445 kann bereitgestellt sein, um die Strahlenverfolgungsberechnung zu unterstützen. In einem Beispiel umfasst ein Strahlencoprozessor 445 eine Sammelfunktion, die zu verarbeitende Strahlen gemäß einem oder mehreren Gruppierungskriterien in Gruppen sammelt. Das System 401 kann auch eine Reihe von anderen Coprozessors 451–453 umfassen, die spezialisierte Hardware für unterschiedliche Aktivitäten sein können, beispielsweise Audioverarbeitung oder Verarbeitung anderer digitaler Signale. Ein Texturlader 454 kann verwendet werden, um Texturinformationen auf andere Texturpipelines 430–431 zu laden. Die Anordnung 410 kann auch mit einer Cache-Hierarchie 461 kommunizieren, die auch mit einer Systemspeicherschnittstelle 462 verbunden sein kann. In 1 dargestellte Elemente können im System 401 durch die Programmieranordnung 410 implementiert sein, indem ein Strahlencoprozessor 445 verwendet wird, indem ein oder mehrere Coprozessoren verwendet werden, oder eine Kombination davon. Je nach Implementierung können unterschiedliche, weniger oder zusätzliche Bauteile in einem System gemäß 12 bereitgestellt sein. Beispielsweise können nicht alle Systeme Geometrieverarbeitung auf den gleichen physikalischen Rechenressourcen als Pixelschattierung oder Strahlenverarbeitung bereitstellen.
-
Die Anordnung 410 kann programmiert sein, um Prozesse auszuführen oder auf andere Weise in 1 gezeigte Funktionen zu implementieren. Eine Schaltung mit fixer Funktion kann auch bereitgestellt sein, um solche Funktionen oder Teile davon auszuführen. Verschiedene Abschnitte des Systems 401 können unterschiedliche Abschnitte der hier beschriebenen Prozesse und Operationen ausführen. Beispielsweise kann ein Knotendatenmaster 405 laufen, um Knotendaten zu erhalten, die bei der Erstellung einer Beschleunigungsstruktur verwendet werden, die Szenengeometrie abstrahiert, und auch während einer Vorwärtsverfolgung, um diskretisierte Lichtdatensätze zu erstellen. Die Anordnung 410 kann mit Schattierungen programmiert sein, die Reaktion auf Strahlenschnittpunkte aktiviert werden. Die Anordnung 410 kann auch programmiert sein, um die Berechnungen für den Durchlauf eines Kegelschnitts durch die offenbarten Gitter aus Volumenelementen und andere Aufgaben durchzuführen, beispielsweise das Testen von Strahlenschnittpunkten. Der Strahlencoprozessor 445 kann bereitgestellt sein, um spezielle Aufgaben für Strahlenoperationen durchzuführen. Beispielsweise kann der Strahlencoprozessor 445 laufen, um Strahlen zu sammeln, die der Anordnung 410 zur gleichzeitigen Verarbeitung präsentiert werden, und er kann laufen, um Strahlenverarbeitungsaufgaben auszulagern, die beginnen, auszufallen, um die Rechenbandbreite der Anordnung 410 vollständig oder einen unabhängig zeitlich programmierbaren Abschnitt davon zu nutzen. Abschnitte der Anordnung 410 können ausgeführt werden, um unterschiedliche Aufgaben gleichzeitig durchzuführen. Beispielsweise kann ein Abschnitt der Anordnung 410 einen Abschnitt eines Gitters für den Durchlauf produzieren, während ein weiterer Abschnitt das Durchlaufen eines Kegelschnitts durch einen vorher produzierten Abschnitt des Gitters umfasst.
-
13 zeigt Aspekte eines Beispiels für ein System, das Abfragen in Bezug auf die Feststellung von Lichtenergiedatensätzen empfangen und auf diese antworten kann. Zuerst werden Elemente des dargestellten Systems eingeführt, und dann folgt eine genauere Erläuterung. Eine Verarbeitungsgruppe für allgemeine Zwecke 475 kann einen Schattierungscode 477–479 ausführen. Jeder dieser Abschnitte eines Schattierungscodes kann beispielsweise in Reaktion auf einen identifizierten Schnittpunkt zwischen einem Strahl und einer Oberfläche instantiiert werden oder seine Ausführung beginnen. Verarbeitungsgruppe für allgemeine Zwecke 475 kann einen Hauptspeicher 471 verwenden, um Daten während der Ausführung zu speichern, und kann einen Pufferungsraum 473 umfassen, der für die nachstehend beschriebenen Zwecke verwendet werden kann. Beispielsweise gibt ein Schattierungscode 477 eine Abfrage 480 aus, die sich auf die Feststellung von Lichtenergiedatensätzen bezieht, die dann von einem Abfragelöser 485 bedient wird. Diese Abfrage kann von einer API 484 empfangen werden, die einen oder mehrere Aufrufe bereitstellt, die Kriterien spezifizieren, die in jedem solchen Aufruf enthalten sein sollen. Die API 484 stellt ein einheitliches Format für Abfragen bereit und kann eine Abstrahierung für zugrundeliegende Hardware bereitstellen, die unterschiedliche Fähigkeiten in unterschiedlichen Implementierungen aufweisen können. In manchen Implementierungen kann die API 484 eine Abfrage oder Abfragen vom Grundlinientyp unterstützen, und in anderen Implementierungen können erweiterte Abfragetypen oder -formate unterstützt werden.
-
Der Abfragelöser 485 kann aus der Beschleunigungsstruktur 487 lesen, die als Grafik einer Gruppe von verbundenen Elementen implementiert sein kann, die Untergruppen von Lichtenergiedatensätzen in einer 3D-Szene abstrahiert. Eine Untergruppe von Lichtenergiedatensätzen in Lichtenergiedatensätzen 489 kann identifiziert werden, um gelesen zu werden. Ein Arbeitsspeicher 491 kann Zwischenergebnisse von Photonenabfragen speichern. Beschreibungen von Abstrahierungsmodellierungsprozessen 493 können gespeichert und vom Abfragelöser 485 verwendet werden, um ein oder mehrere Ergebnisse für jede der Abfragen, die er empfängt, z. B. Abfrage 480, erzeugen.
-
Wenn die Ausführung des Schattierungscodes Lichtdatensatzinformationen anfordert (z. B. ein Abfrage ausgibt, um Photonen festzustellen, die innerhalb eines definierten Radius von einem spezifizierten Punkt liegen), kann der Schattierungscode mit einer vorläufigen Schätzung oder Heuristik bezüglich dessen, wie viele Photonen in Reaktion auf eine gegebene Abfrage zurückgegeben werden, kodiert haben. In einer Abfrage, die jedoch einfach alle Datensätze zurückgibt, die eine gegebene Spezifizierung erfüllen, gibt es keine a-priori-Einschränkung der Anzahl an Datensätzen, die festgestellt und zurückgegeben werden. So kann ein Schattierungscode einen Pufferplatz (z. B. Puffer 473) dafür reservieren, um Datensätzen, die aus einer Abfrage zurückgegebenen werden, aufzunehmen. Solch eine Pufferplatzreservierung müsste jedoch in der Größe für ein Szenario des ungünstigsten Falls ausgelegt werden, in dem eine große Anzahl an Datensätzen zurückgegeben wird. Außerdem kann dieser Ansatz in einer Situation, in der Speicher eingeschränkt ist oder in der Datenverkehr verringert werden soll (z. B. wegen des Energieverbrauchs) unerwünscht sein. Die folgende Offenbarung stellt verschiedene beispielhafte Ansätze bereit, um es dem Schattierungscode zu ermöglichen, eine vorhersagbarere Antwort auf solche Abfragen bereitzustellen, damit eine größere Vielfalt von Abfragen bedient werden kann und die Berechnung von nützlichen Antworten auf solche Abfragen zu beschleunigen. Diese Abfragen können auch verwendet werden, um vorberechnete Lichttransportdaten zur Verwendung in Techniken und Systemen, wie sie oben offenbart sind, zu verwenden. Abfragen gemäß der Offenbarung können auch verwendet werden, um solche vorberechneten Lichttransportdaten abzufragen und auszugeben.
-
14 zeigt ein Beispiel für Lichtenergiedatensätze, die sich innerhalb von definierten Volumenelementen eines 3-D-Raums befinden. Diese Lichtenergiedatensätze können festgestellt und vom Abfragelöser 485 verarbeitet werden. 14 zeigt, dass Lichtenergiedatensätze eine Reihe von verschiedenen Informationen enthalten kann. Die Informationen in den Lichtenergiedatensätzen können gemeinsam mit verschiedenen Arten von Abfragedefinitionen oder andere Verarbeitungsansätzen verwendet werden, um ein Endergebnis für eine gegebene Abfrage zu erstellen. Beispiele für Lichtenergiedatensätze umfassen Lichtenergiedatensätze 496 und 501. Der Lichtenergiedatensatz 496 umfasst Daten, die eine Emission 497 definieren, die eine richtungsspezifische Verteilung von Lichtenergie aufweist. Die Emission 497 kann als parametrisierte Verteilung dargestellt sein, beispielsweise durch Bereitstellung von Koeffizienten für eine auswählbare richtungsspezifische Gewichtungsfunktion. Die Emission 498 des Lichtenergiedatensatzes 501 zeigt ein einfacheres Beispiel für einen Richtungs- und Intensitätsvektor.
-
15A zeigt ein Beispiel für eine Situation, in der eine Abfrage für Lichtenergiedatensätze innerhalb eines Radius 504 von einem Abfrageort 502. In 15A befinden sich Datensätze 505–507 innerhalb des Radius 504. Ein Abfragelöser 485 kann innerhalb einer Beschleunigungsstruktur nach einem oder mehreren Elementen suchen, die das Raumvolumen, das durch die Abfrage eingeschlossen ist, umgeben. Es kann mehrere solche Elemente geben, die gemeinsam das Volumen umgeben. Der Abfragelöser 485 kann nach diesen Elementen der Beschleunigungsstruktur suchen und die geeigneten Datensätze in beliebiger Reihenfolge identifizieren (d. h. es gibt keine Garantie, dass der Abfragelöser 485 Datensätze in einer bekannte Reihenfolge identifiziert, beispielsweise nach zunehmendem Abstand vom Ursprung 502 gereiht. Außerdem wäre eine Anzahl von Datensätzen, die sich im Volumen der Abfrage befinden, anfangs unbekannt.
-
Manche Arten von Abfragen können jedoch Nutzen aus einer gewählten relativen Ordnung oder Sortierung von Datensätzen ziehen oder diese erfordern. Beispielsweise kann eine Abfrage eine spezifizierte oder maximale Anzahl an nächsten Datensätzen für einen Ort (Abfrage ”k-nächster-Nachbar” (knn)) verlangen, und diese kann auch auf einen maximalen Suchradius beschränkt sein. Unter solch einem Umstand müssten Ergebnisse, die vom Abfragelöser 485 gefunden werden, verglichen oder sortiert werden, um die Antwortdatensätze richtig zu identifizieren. Der Abfragelöser 485 kann eventuell nicht genug Arbeitsspeicher haben, um diese Ergebnisse zu speichern. Daher besteht ein Ansatz zur Implementierung einer knn-Abfrage darin, eine Reihe von nächste-Nachbarn-Abfragen auszusenden, aber jede Abfrage verfolgt, als Minimalabstand, den Abstand des vorher identifizierten Datensatzes. Dieser Minimalabstand kann auch das Identifizieren von Informationen über den vorher identifizierten Datensatz umfassen. Diese Informationen ermöglichen die Unterscheidung zweier Datensätze, die sich nicht im gleichen Abstand befinden (innerhalb einer Präzision des Tests).
-
15B zeigt ein spezielleres Beispiel dafür, wie eine knn-Abfrage (wobei k = 3 ist) implementiert werden kann. Anfangs wird eine Abfrage gemacht, die den einzelnen nächsten Datensatz des Orts 502 anfordert. Diese Abfrage gibt den Datensatz 504 aus. Dann wird eine nachfolgende Abfrage gemacht, die Informationen über den Abstand vom vorher zurückgegebenen nächsten Datensatz umfasst (dargestellt als Radius 510). Der Abfragelöser 485 kann so aus der Suche jegliche Raumabschnitte ausschließen, die näher beim Ort 502 liegen als dieser Abstand. Der Abfragelöser 485 kann herausfinden, dass der Datensatz 507 und der Datensatz 506 beide den gleichen Abstand vom Ort 502 aufweisen. Der Abfragelöser 485 würde laufen, um aus den Datensätzen 506 und 507 einen Datensatz gemäß einer Identifikatorinformation für jeden Datensatz auszugeben. Beispielsweise kann der Abfragelöser 485 einen Datensatz mit einer sequentiell früheren ID auszuwählen. Beispielsweise kann die zweite Abfrage den Datensatz 506 zurückgeben, der dem Radius 512 zugeordnet ist. Eine dritte Abfrage wird ausgesendet und ist dem Radius 512 und vom Datensatz 506 abgeleiteten identifizierenden Informationen zugeordnet (z. B. eine ausgewählte Anzahl von niedrigwertigen Bits von einer ID). Falls ein Abfragelöser den Datensatz 506 zuerst findet, dann kann der diesen Datensatz basierend auf den Identifikatorbits ausschließen und findet dann schließlich den Datensatz 507 und gibt diesen Datensatz aus.
-
Solch ein Ansatz ist geeignet, wenn der Abfragelöser 485 eine fixe Funktion oder eine Schaltung mit eingeschränkter Programmierbarkeit sein kann, die nur eine kleine Speichermenge für die Lösung jeder Abfrage zur Verfügung hat (z. B. kann nur Platz für identifizierenden Informationen eines einzigen Datensatzes sein). In einem solchen Fall muss, jedes Mal wenn der Abfragelöser einen Datensatz identifiziert, der eine Antwort auf eine Abfrage sein könnte, er entweder diesen Datensatz zurückgeben oder einen vorhandenen gespeicherten Identifikator ersetzen. Solch ein Abfragelöser kann deterministisch auf eine nächste-Nachbarn-Abfrage und durch Erweiterung gemäß dem oben beschriebenen Verfahren auf eine knn-Abfrage, k > 1, antworten.
-
16 dient zur Beschreibung von Aspekten von Verfahren zur Abstrahierung von Datensätzen, die für eine Abfrage identifiziert wurden und ein kombiniertes Ergebnis darstellen. Diese Verfahren können verwendet werden, um den Determinismus in einer Datenverkehrsmenge, die durch eine Abfrage erzeugt wird, zu erhöhen, die Abfragepufferungsanforderungen zu verringern und Hardwarebeschleunigung zur Verarbeitung von Abfrageergebnissen bereitzustellen sowie dem Künstler Kontrolle über Aspekte der hardwarebeschleunigten Filterung oder Abstrahierung von Abfrageergebnissen zu geben. Genauer gesagt zeigt 16 eine beispielhafte Gruppe von Kurven 530–534, die als unabhängige Variable eine Anzahl von Lichtdatensätzen und als abhängige Variable einen Beitragsanteil aufweisen. In manchen Implementierungen dienen diese Kurven für eine Gruppe von Lichtdatensätzen, die durch zunehmenden Abstand von einem bestimmten Ort organisiert sind. Somit beschreibt in manchen Ansätzen jede der Kurven eine andere Gesamtgewichtung für eine Gruppe von Lichtdatensätzen, die nach zunehmendem Abstand gereiht organisiert sind. Beispielsweise beschreibt die Kurve 532 eine lineare Abnahme im Beitragsanteil für jeden gefundenen inkrementellen Lichtdatensatz, während die Kurven 534 und 533 einen rascheren Abfall des Beitragsanteils beschreiben.
-
Eine Implikation dieser Verfahren ist, dass Lichtdatensätze bei unterschiedlichen Abständen von einem Ort, gemäß verschiedenen Strategien und basierend auf der relativen Position oder Dichte anderer Lichtdatensätze gemischt werden können. Beispielsweise kann in der linearen Kurve 532 jeder inkrementelle Datensatz durch ein linear abnehmendes Gewicht gewichtet werden. In manchen Ansätzen kann die Gesamtgewichtung ein konstanter Wert sein, sodass z. B. das Mischen eine Gesamtenergie, die durch die Datensätze dargestellt ist, nicht verstärkt, sondern so mischt, dass ein konstantes Energieergebnis erzeugt wird. Diese Kurven können so strukturiert sein, dass sie vordefinierte Gewichtungen für jeden inkrementellen Datensatz aufweisen, wobei von einer vorbestimmten Anzahl an Datensätzen ausgegangen wird; sie können auch parametrisiert sein, sodass die Gewichtung jedes Datensatzes basierend auf einer Gesamtzahl von Datensätzen, die gefunden wurde, bestimmt wird. Das Bestimmen der Endgewichtungen für jeden Datensatz basierend auf der Gesamtzahl an gefundenen Datensätzen kann implementiert werden, indem zuerst eine Gesamtzahl von Datensätzen bestimmt wird, bevor jeder Datensatz gewichtet und diese Ausgabe in einer Summation akkumuliert wird.
-
Darüber hinaus können zwei oder mehr dieser Kurven gemischt werden, um eine interpolierte Kurve zu erhalten. Falls beispielsweise die Kurve 532 für 15 Datensätze gewichtet ist, während die Kurve 534 für 8 Datensätze gewichtet ist, dann können, falls 10 Datensätze für eine gegebenen Abfrage identifiziert werden, die Gewichtungen für diese Datensätze bestimmt werden, indem die für jede dieser Kurven beschriebenen Gewichtungen gemischt werden.
-
In solchen Implementierungen kann eine Gruppe von Kurven vordefiniert und in einer Schaltung gespeichert oder kodiert werden, auf die der Abfragelöser 485 zugreifen kann, und sie kann Teil eines Abstrahierungsmodellierungsprozesses 493 sein. In manchen Implementierungen kann die Reihenfolge und Form der Kurven durch verschieden Polynome spezifiziert sein. Eine Auswahl von einem oder mehreren Polynomen und Parameter für diese Polynome kann mit einer Abfrage weitergegeben werden. Eine Abfrage kann ein Volumen spezifizieren, das auf eine beliebige von verschiedenen Arten auf Datensätze durchsucht werden soll, beispielsweise als Ort aus einem oder mehreren Punkten und als Distanz von diesen Punkten, Extrusionen, Rechtecke, Kugeln usw. Manche Abfragen geben eventuell kein explizites Maximalvolumen an, sondern spezifizieren stattdessen eine maximale Anzahl von Datensätzen. Manche Abfragen können eine Direktionalität spezifizieren, um bestimmte Datensätze auszuschließen. Beispielsweise kann eine Abfrage erfordern, dass Richtungen von Datensätzen positive Punktprodukte mit einer von der Abfrage spezifizierten Richtung aufweisen. 18 zeigt weitere Details bezüglich Beispielen für Abfragedefinitionsoptionen.
-
17 zeigt ein Beispiel, bei dem verschiedene Abfragen 536, 538 und 539 unterschiedliche maximale Radien vom Ursprung 540 aufweisen und daher unterschiedliche Gruppen von Datensätzen umfassen. Die Datensätze, die in Bezug auf jede der Abfragen gefunden werden, können gemäß einer gewählten Kurve aus 16 gemischt werden. Falls beispielsweise die für die Abfrage 538 identifizierten Datensätze gemäß Kurve 533 gemischt würden, und Kurve 533 zwischen 2 und 4 Datensätzen von hoch zu niedrig überginge, dann würde der 5. Datensatz einen relativ geringen Beitrag zur gewichteten Summe leisten, während der erste Datensatz einen viel höheren Beitrag aufweisen würde. Falls Kurve 534 den Übergang bei etwa 6 Datensätzen beendet und Kurve 532 den Übergang bei 12 beendet, dann könnte eine Mischung aus Kurve 534 und Kurve 532 verwendet werden, um die Gruppe aus 10 Datensätzen zu mischen, die durch die Abfrage 539 identifiziert wurde.
-
18 zeigt, dass das Mischen basierend auf verschiedenen Merkmalen kontrolliert werden kann, die die von der Abfrage spezifizierten und auch die von den Datensätzen selbst umfassen können. 18 zeigt, dass eine Abfrage eine Mischkurve für jede von einer Anzahl von verschiedenen Merkmalen von Lichtenergiedatensätzen spezifizieren kann. Beispielsweise kann eine Ähnlichkeit in der Richtung ein Faktor in einer Endgewichtungsbestimmung sein, die Farbe (oder allgemeiner der Spektrumsgehalt) des Lichtenergiedatensatzes kann ein weiterer sein, und der Abstand von einem spezifizierten Ort kann ein weiteres beispielhaftes Merkmal sein. Diese Kurven können zusammen eine endgültige Gewichtungsfunktion spezifizieren. In manchen Beispielen können unterschiedliche Kanäle eines Datensatzes unterschiedlich gewichtet sein. Diese Optionen können durch von einer Abfrage spezifiziert werden. Solch eine Abfrage kann auf eine Konvention von vorgefertigten Abfrageprofilen verweisen, oder auf Auswahlen von Kombinationen von Suchkriterien. Die Abfragelöserschaltung kann bereitgestellt werden, um solche Suchen zu beschleunigen.
-
19 zeigt eine modifizierte Version des beispielhaften Systems 401, wobei ein Strahlen- und ein Photonencoprozessor 550 bereitgestellt ist und eine Gruppe von Lösereinheiten 515–553 umfasst. Jede Lösereinheit 551–553 enthält eine Schnittpunkttesteinheit, eine Auswertungseinheit 556 und einen lokalen Speicher 557. Die Schnittpunkttesteinheit 555 kann ein nächstes Schnittpunktergebnis für eine Form zurückgeben. Die Form kann ein Grundobjekt sein, das eine Szenengeometrie bildet, ein Element einer Beschleunigungsstruktur, verschobene oder implizite Geometrie oder eine andere Oberfläche, die definiert und auf einen Schnittpunkt mit einem Strahl getestet werden kann. Die Auswertungseinheit 556 kann Aspekte der oben beschriebenen abfragebezogenen Offenbarungen implementieren. Die Auswertungseinheit 556 kann eine Schaltung umfassen, die beispielsweise nur unverzweigte Anweisungsströme ausführen kann. Die Auswertungseinheit 556 kann eine Schaltung umfassen, die eine spezifische Gruppe von Polynomen, beispielsweise ein lineares und ein quadratisches Polynom, für eine Gruppe von Koeffizienten und einen Wert der unabhängigen Variable auswerten kann. Die Auswertungseinheit 556 kann auch eine Multiplikatoreinheit umfassen, beispielsweise eine ganze Zahl, einen fixen Punkt, eine Gleitpunkteinheit mit einfacher oder doppelter Präzision. Die Multiplikatoreinheit kann eine Blockgleitpunktdarstellung einer oder mehrerer der Multiplikanden verwenden. Die Auswertungseinheit 556 kann auch einen Akkumulator implementieren, der Ergebnisse dieser Berechnungen in einem Puffer akkumulieren kann.
-
Die Auswertungseinheit 556 kann auch verwendet werden, um Abschnitte eines Algorithmus zu beschleunigen, der vorwiegend auf einer Schnittpunkttesteinheit 555, einem Kern in Anordnung 410 oder einer Kombination davon ausgeführt wird. Beispielsweise kann die Auswertungseinheit 556 einen Strom von Funktionsauswertungen ausgeben, wobei eine oder mehrere unabhängige Variablen gemäß einer Schrittgröße inkrementiert werden, beispielsweise eine Schrittgröße, die von der Schnittpunkttesteinheit 555 festgesetzt wird. Dieser Strom von Auswertungen kann verwendet werden, um volumetrische Bildsyntheseverfahren, Strahlenverfolgungen, Kegelschnitte usw. durchzuführen. In einem Beispiel kann die Auswertungseinheit 556 programmiert sein, um einen Ausdruck weiter auszuwerten, bis eine Ausgabe dieses Ausdrucks das Vorzeichen ändert, und dann aktuelle Werte für eine oder mehrere unabhängige Variablen auszugeben. Die Einheit 556 kann mehrere Werte innerhalb eines spezifizierten Bereichs der Vorzeichenumkehr ausgeben, beispielsweise einen vorherigen und einen aktuellen Wert, wodurch ein Nulldurchgangspunkt des Ausdrucks eingeschlossen wird.
-
20 zeigt ein Beispiel für ein Verfahren, das hier offenbarte Aspekte zusammenfasst. Bei 561 kann eine Abfrage zur Verarbeitung empfangen werden. Bei 563 werden Datensätze innerhalb eines durch die Abfrage definierten Volumens identifiziert. Diese Datensätze werden gemäß einem Abstraktionsmodell, das auf die Datensätze angewendet wird, abstrahiert, um ein Abfrageergebnis zu erstellen. Solche Abfrageergebnisse können das gleiche oder ein ähnliches Format aufweisen wie ein Abfrageergebnis, das für einen einzelnen Lichtenergiedatensatz ausgegeben würde, oder es kann einen Aspekt einer Verteilung der identifizierten Datensätze ausdrücken. Bei 567 wird das Abfrageergebnis ausgegeben.
-
21 zeigt ein Beispiel für ein Verfahren zur Abfragenabstraktion. Bei 569 können ein oder mehrere Datensätze, die innerhalb des Volumens lagen, basierend auf einem Zurückweisekriterium (z. B. Direktionalitätsvergleich) zurückgewiesen werden. Dies ist ein geeigneter Ansatz, wenn ein Test zuerst einen Datensatz innerhalb eines spezifizierten Volumens identifizieren kann, aber keine andere Abfragenparameter testet, sondern stattdessen solche Datensätze für eine weitere Analyse identifiziert. Bei 571 können restliche Datensätze gezählt werden, und bei 573 kann die relative Gewichtung oder das Mischkriterium definiert oder ausgewählt werden. Bei 575 werden diese Datensätze gewichtet, und bei 577 werden die gewichteten Werte summiert, um ein Abfrageergebnis zu erstellen. Bei 578 können Ergebnisse verschiedener der Gewichtung- oder Mischkriterien interpoliert werden. In einem Beispiel kann jede Gewichtungsfunktion für eine vorbestimmte Anzahl an Datensätzen eingesetzt werden, und nachdem einen Gesamtzahl von Datensätzen bestimmt wurde, die auf die Abfrage anspricht, kann ein Ergebnis aus beliebigen der Gewichtungs- oder Mischvorgänge ausgewählt werden, beispielsweise gemäß einer vorbestimmten Anzahl, die der tatsächlichen Anzahl an Datensätzen am nächsten ist. In einer Implementierung können zwei der Ergebnisse aus unterschiedlichen Gewichtungs- oder Mischvorgängen interpoliert werden, wenn ihre vorbestimmten Anzahlen die tatsächliche Anzahl an Datensätzen einschließen, die als Antwort bestimmt wurden.
-
22 zeigt weitere Aspekte einer Implementierung dieser Offenbarung. Eine programmierbare Einheit für allgemeine Zwecke 591 führt einen Schattierungscode 589 aus. Der Schattierungscode 589 sendet eine Abfrage 480 aus, die eine oder mehrere aus Abfragenumschließungsinformationen 604, Materialeigenschaften 605, Programmreferenzen 607 und Parameter 609 umfassen kann. Ein Beispiel für Materialeigenschaften 605 umfasst eine bidirektionale Reflexionsverteilungsfunktion (BRDF). In einem solchen Fall kann eine BRDF für ein Material durch eine Abfrage bereitgestellt werden, und diese BRDF kann bei der Berechnung eines Ergebnisses verwendet werden, das in Reaktion auf die Abfrage 480 ausgegeben wird. Als spezielles Beispiel kann eine Berechnung durchgeführt werden, die bestimmt, wieviel Energie einer Verteilung, die durch einen Lichtenergiedatensatz definiert ist, innerhalb einer durch den BRDF definierten Umgrenzung ausgesendet wird.
-
Eine Abfrage kann durch einen Schattierungscode 589 in einem Format ausgedrückt werden, das durch eine Anwendungsprogrammierschnittstelle (Application Programming Interface, API) 484 unterstützt wird. Eine API 484 kann durch computerausführbare Module implementiert sein, die eine Schnittstelle bereitstellen, die eine Gruppe von Parametern und andere Informationen für eine Abfrage 593 akzeptieren, was durch das Abfragespezifikatormodul 595 dargestellt ist. Das Abfragespezifikatormodul 595 kann eine oder mehrere konstituierende Abfragespezifikationen erstellen, die für Fähigkeiten eines Abfragelösers 597 geeignet sind, was Ergebnisse einer Abfrage 593 bereitstellen würde. Beispielsweise kann ein knn-Abfrageaufruf von der API 484 unterstützt werden, was eine solche Abfrage in eine Gruppe von Abfragespezifikationen umwandelt, die jeweils von zugrundeliegender Hardware bedient werden, und die Ergebnisse dieser separaten Abfragespezifikationen definierten gemeinsam die Ergebnisse für die knn-Suche. 22 zeigt außerdem, dass eine Rückkopplungsschleife für den Abfragespezifikator 595 aus dem Abfragelöser 485 bereitgestellt werden kann. Der Abfragelöser 485 kann Ergebnisse bereitstellen (z. B. Ergebnisse 601–603), wie sie auf einer einfachen Programmausführeinheit 611 verfügbar sind. Wenn ein Abfragelöser 485 die Abfrage erfüllt, indem alle antwortenden Abfragen identifiziert werden, kann der Abfragelöser 485 eine Vollständigkeitsmeldung 604 bereitstellen. Solche eine Meldung kann auch mit einem letzten Ergebnis bereitgestellt werden, das für eine Abfrage ausgegeben wird.
-
Die einfache Ausführungseinheit 611 kann ausgelegt mit einem Programm aus dem Programmspeicher 613 ausgelegt sein. Solch ein Programm kann spezifische Einschränkungen aufweisen, die für Merkmale einer einfachen Programmausführungseinheit 611 charakteristisch sind. Beispielsweise können manche Ausführungseinheiten eventuell keine verzweigten Anweisungen unterstützen, nur gereihte Anweisungsausführung durchführen, keine Bedingungsformen unterstützen oder keine Schleifen unterstützen, um Beispiele zu nennen. Diese Einschränkungen können genommen werden, um die Menge an Silicium zu reduzieren, die zur Implementierung der Ausführungseinheit notwendig ist, und/oder verzweigten Code zu vermeiden oder zu reduzieren. In einem Beispiel kann ein Programm als Gruppe von Anweisungen für eine Inkrementierung oder einen Schritt eines Algorithmus implementiert werden. Solch ein Programm kann ein Zwischenergebnis für eine oder mehrere Inkrementierungen ausgeben, oder nur ein Endergebnis. Dann kann der Abfragelöser 485 Informationen für eine(n) nachfolgende(n) Schritt oder Inkrementierung bereitstellen. Beispielsweise kann eine einfache Programmausführungseinheit 611 einen Schritt eines Strahlverlaufs oder Kegeldurchlaufs, Volumenbildsyntheseoperationen, Texturkoordinateninterpolation, Volumeninterpolation, Funktionsauswertung für eine inkrementierte unabhängige Variable usw. implementieren. Ein Programm oder Programme, die von einer einfachen Programmausführungseinheit 611 ausgeführt werden, können von (einer) Programmreferenz(en) 607 identifiziert werden, die mit einer Abfrage 480 bereitgestellt wird/werden. Ein weiterer Ansatz für eine einfache Programmausführungseinheit 611 ist die Bereitstellung einer Gruppe von mathematischen Funktionsmodellen 615, die selektiv gewählt werden können, um von der Ausführungseinheit 611 implementiert zu werden. Als Beispiel können diese Modelle Polynomfunktionen umfassen. Parameter und ein aktueller Wert oder aktuelle Wert für die unabhängige(n) Variable(n) können mit der Abfrage 480 bereitgestellt werden. Diese Parameter und aktuellen Wert können auch aus Anfangswerten vom Abfragespezifikator 595 bereitgestellt oder aktualisiert werden. Wenn beispielsweise eine Ausführungseinheit 611 eine Funktion auswerten kann und dieses Auswertungsergebnis an den Abfragelöser 485 ausgibt, kann dieser entscheiden, eine Variable zu inkrementieren oder ein Parameter zu ändern, und eine Neuauswertung dieser Funktion anfordern.
-
Die Ausführungseinheit 611 kann auch mit einer lokalen Akkumulationsfunktion 617 zusammenarbeiten, die Werte aus der Ausführungseinheit 611 akzeptiert und diese in einer Pufferposition akkumuliert. In einem Beispiel kann die Akkumulation eine einfache Summierung umfassen, wenn beispielsweise die Ausführungseinheit 611 eine Gewichtung durchgeführt hat, die Werte berücksichtig, die schon im Puffer akkumuliert wurden. In anderen Situationen kann eine lokale Akkumulierung mehr statistikbezogene Werte verfolgen, die akkumuliert wurden. Die lokale Akkumulierung 617 kann als Schreibanweisung für einen spezifischen Tel eines lokalen Speichers implementiert werden; in solchen Implementierungen ist dieser Speicher nicht vor inkorrekter Programmausführung geschützt, sodass die Ausführungseinheit 611 diesen Wert aktualisieren kann, ohne das ihr Zugriff zugeteilt werden muss. Der lokal akkumulierte Wert kann nach einer Endakkumulation an einen globalen Ergebnispuffer 618 ausgegeben werden. Die Position des globalen Puffers kann von der Abfrage 480 spezifiziert werden. Die Ausführungseinheit 611 kann auch verwendet werden, um andere Bildsyntheseaufgaben zu automatisieren oder beschleunigen. Als Beispiel können Differentiale Strahlen zugeordnet werden. Ein Differential für einen Strahl kann durch Verfolgen von zwei oder mehr zusätzlichen Strahlen modelliert werden, die im Allgemeinen in dieselbe Richtung wandern wie der Ursprungsstrahl, aber nicht exakt parallel sind. Um das Strahlendifferential zu verwenden, kann ein Modell erstellt werden, bei dem diese zusätzlichen Strahlen in Bezug auf den ursprünglichen Strahl schneiden. Die Ausführungseinheit 611 kann eine Funktion auswerten, die approximiert, wo jeder zusätzliche Strahl auftreffen würde, basierende auf seiner Richtung und einem Modell der Oberfläche, die vom ursprünglichen Strahl geschnitten wird. In einem Beispiel kann eine Berührungsebene an einen Schnittpunkt definiert werden und basiert auf einem Winkel, der zwischen jedem Differentialstrahl und dem Ursprungsstrahl gebildet wird, und die Ausführungseinheit 611 kann eine Funktion auswerten, um eine Schnittpunktposition auf dieser Berührungsebene zu identifizieren. Somit kann für einen gegebenen Schnittpunkt zwischen einem Strahl und einer Oberfläche eine Ausführungseinheit Schnittpunkte für die Differentialstrahle identifizieren. Diese Punkte können parametrisch auf einer Oberfläche (z. B. einer Berührungsfläche) ausgedrückt sein.
-
Die Bezeichnung ”Lichtenergiecharakterisierung” wird hier so verwendet, dass sie jede beliebige Art eines gerichteten Stroms von Energie oder einem anderen Material umfasst, beispielsweise zur Modellierung oder Quantifizierung von Intensität und/oder Direktionalität von Energieausbreitung. Ein ”Lichtenergiedatensatz” bezieht sich auf Daten, die einem Punkt in einem n-dimensionalen Raum (z. B. n = 3) zugeordnet sind und welche die Ausbreitung von Energie charakterisieren. Beispielsweise kann der Datensatz Daten umfassen, die Strahlendichte, z. B. Strahlendichte von Licht, oder Ausbreitung von elektromagnetischer Wellenergie, charakterisieren. Solche Datensätze können Daten umfassen, die Energie charakterisieren, die zu einem Punkt auf einer Oberfläche oder von diesem weg ausgerichtet ist oder die in einem Bereich eines definierten Orts oder definierten Volumens vorhanden ist. Unterschiedliche Datensätze können unterschiedliche Raumvolumina abdecken und überlappende Volumina aufweisen. Verschiedene Datensätze können das gleiche oder teilweise überlappende Volumina mit unterschiedlichen Abstraktionsgraden darstellen. Als allgemeines Beispiel können sich ausbreitende elektromagnetische Wellen, wie z. B. Röntgenstrahlen, Mikrowellen oder Hochfrequenzwellen, unter Verwendung solcher Energiecharakterisierungsdaten modelliert werden, sowie auch Infrarotstrahlung. Somit impliziert die Bezeichnung ”Licht” keine Einschränkung auf die Art von Energie oder ihres Transports, die durch Implementierungen der Offenbarung modelliert werden kann. In der Offenbarung können Beleuchtungs- und Schattierungsinformationen erstellt werden und es kann auf sie zugegriffen werden. Manche Beleuchtungs- und Schattierungsinformationen dienen als Ausgaben für andere Prozesse, die schlussendlich eine Bildsyntheseendausgabe ergeben. Somit können Schattierungsinformationen eventuell kein Endprodukt sein, sondern ein Zwischenprodukt. Solche Zwischendaten können verschiedene Formen aufweisen und müssen nicht direkt Farbe, Luminanz, Chrominanz oder dergleichen ausdrücken. Ein Beispiel für einen Lichtenergiedatensatz im Zusammenhang mit 3D-Bildsynthese ist ein ”Photon”, wie im Zusammenhang mit 3D-Bildsyntheseanwendungen verwendet, aber Lichtenergiedatensätze müssen nicht impliziten oder expliziten Einschränkungen von ”Photonen” unterliegen.
-
Zusätzlich zu Hardwareausführungsformen (z. B. innerhalb einer zentralen Verarbeitungseinheit (Central Processing Unit, ”CPU”), eines Mikroprozessors, einer Mikroprozessorsteuerung, eines Prozessorkerns, eines Ein-Chip-Systems (System an Chip, ”SOC”) oder einer beliebigen anderen programmierbaren oder elektronischen Vorrichtung oder damit verbunden) können Implementierungen auch in Software (z. B. computerlesbarer Code, Programmcode, Anweisungen und/oder Daten, in beliebiger Form hinterlegt sind, wie z. B. Quellen-, Objekt- oder Maschinensprache) ausgeführt sein, die beispielsweise in einem computernutzbaren (z. B. lesbaren) Medium hinterlegt ist, das ausgelegt ist, um die Software zu speichern. Solche Software kann beispielsweise die Funktion, Fabrikation, Modellierung, Simulation, Beschreibung und/oder Testung des hier beschriebenen Geräts und Verfahrens ermöglichen. Beispielsweise kann dies durch die Verwendung von allgemeinen Programmiersprachen (z. B. C, C++), GDSII-Datenbanken, Hardwarebeschreibungssprachen (HDL), einschließlich Verilog HDL, VHDL, SystemC Registertransferebene (RTL) usw., oder anderen verfügbaren Programmen, Datenbanken und/oder Schaltungs-(z. B. Schaltbild)Erfassungstools erfolgen. Ausführungsformen können in einem computernutzbaren Medium, einschließlich nichtflüchtigen Speichern, wie z. B. Speichern unter Verwendung von Halbleitern, Magnetscheiben, optischen Scheiben, eisenhaltigen, widerstandsfähigen Speichern usw., hinterlegt sein.
-
Als spezielle Beispiele versteht sich, dass Implementierungen von offenbarten Geräten und Verfahren in einem als geistiges Eigentum geschützten Halbleiterkern, wie z. B. einem Mikroprozessorkern, oder einem Abschnitt davon, der in Hardwarebeschreibungssprache (HDL) ausgeführt ist, die zur Erstellung einer spezifischen integrierten Schaltungsimplementierung verwendet werden kann, implementiert sein können. Ein computerlesbares Medium kann solche Beschreibungssprachdaten umfassen oder speichern und somit ein Fabrikat darstellen. Ein nichtflüchtiges maschinenlesbares Medium ist ein Beispiel für computerlesbare Medien. Beispiele für andere Ausführungsformen umfassen computerlesbare Medien, die Registertransfersprach-(RTL-)beschreibung speichern, die zur Verwendung in einer spezifischen Architektur- oder Mikroarchitekturimplementierung angepasst werden kann. Außerdem können die hier beschriebenen Geräte und Verfahren als Kombination aus Hardware und Software ausgeführt sein, die Hardware konfiguriert oder programmiert.
-
Wie aus der Offenbarung hervorgeht können manche der offenbarten Bauteile und Funktionalitäten in Hardware, Software, Firmware oder jeder beliebigen Kombination davon implementiert sein. Falls sie in Firmware und/oder Software implementiert sind, können die Funktionen als eine oder mehrere Anweisungen oder Codes auf einem computerlesbaren Medium gespeichert sein, wobei das Medium in einem Beispiel nichtflüchtig ist. Beispiele umfassen ein computerlesbares Medium, das mit einer Datenstruktur codiert ist, und ein computerlesbares Medium, das mit einem Computerprogramm codiert ist. Maschinenlesbare Medien umfassen nichtflüchtige maschinenlesbare Medien. Andere Arten von Medien umfassen Übertragungsmedien. Ein nichtflüchtiges Medium kann ein Medium sein, das kein Übertragungsmedium ist und auf das eine Maschine zugreifen kann. Als Beispiel, und nicht als Einschränkung, können solche computerlesbaren Medien RAM, ROM, EEPROM, CD-ROM und andere optischen Scheibenspeicher, Magnetscheibenspeicher oder andere Magnetspeichervorrichtungen oder ein beliebiges anderes Medium, das zur Speicherung eines gewünschten Programmcodes in Form von Anweisungen oder Datenstrukturen verwendet werden kann und auf das von einer Maschine zugegriffen werden kann, umfassen.
-
Fachleute werden auch erkennen, dass die verschiedenen veranschaulichenden logischen Blöcke, Module, Schaltungen und Algorithmusschritte, die in Verbindung mit den hier offenbarten Ausführungsformen beschrieben sind, als elektronische Hardware, Computersoftware in einem computerlesbaren Medium oder Kombinationen aus den beiden implementiert sein können Um diese Austauschbarkeit von Hardware und Software klarer zu veranschaulichen, wurden oben verschiedene veranschaulichende Bauteile, Blöcke, Module, Schaltungen und Schritte allgemein in Bezug auf ihre Funktionalität beschrieben. Ob solch eine Funktionalität als Hardware oder Software implementiert wird, hängt von den jeweiligen Anwendungs- und Konzeptionseinschränkungen des Gesamtsystems ab. Fachleute können die beschriebene Funktionalität für eine jeweilige Anwendung auf unterschiedliche Arten implementieren, aber solche Implementierungsentscheidungen sollten nicht als Abweichung vom Schutzbereich der vorliegenden Erfindung interpretiert werden.
-
Die Beschreibung der Aspekte und Merkmale ist bereitgestellt, um jedem Fachmann die Herstellung und Verwendung der Systeme, Geräte und die Durchführung der offenbarten Verfahren zu ermöglichen. Verschiedene Modifikationen werden für Fachleute auf dem Gebiet der Erfindung offensichtlich sein, und die in diesem Dokument beschriebenen Prinzipien könne auf andere Aspekte angewendet werden, ohne vom Wesen und Schutzbereich der Erfindung abzuweichen. Daher ist die Beschreibung nicht als Einschränkung der Ansprüche zu verstehen. Vielmehr sind die Ansprüche als Schutzbereich zu verstehen, der mit den Prinzipien und neuen Merkmalen, die hier offenbart sind, übereinstimmt.
-
Die Zeichnungen umfassen relative Anordnungen einer Struktur und eine Reihenfolge von Prozesskomponenten, die lediglich zum besseren Verständnis der Beschreibung dienen. Diese relativen Anordnungen und die Nummerierung sind keine implizite Offenbarung spezieller Einschränkungen bezüglich der Reihenfolge oder Anordnung von Elementen und Schritten in den Ansprüchen. Prozesseinschränkungen können ohne Abweichung vom Schutzbereich der Offenbarung sequentiell ausgetauscht werden, und Formulierungen der Art Mittel-plus-Funktion in den Ansprüchen sind so zu verstehen, dass sie die als die angeführte Funktion ausführenden Strukturen umfassen, die nicht nur Strukturäquivalente sondern auch äquivalente Strukturen umfassen.
-
Es wurden zwar verschiedene Beispiele und andere Informationen verwendet, um Aspekte innerhalb des Schutzbereichs der beiliegenden Ansprüche zu erläutern, aber basierend auf bestimmten Merkmalen oder Anordnungen in solchen Beispielen sind keine Einschränkungen der Ansprüche impliziert, da Fachleute in der Lage wären, diese Beispiele für eine Vielfalt von Implementierungen abzuleiten. Ferner und obwohl manche Gegenstände in einer Sprache beschrieben wurde, die für Beispiele für Strukturmerkmale und/oder Verfahrensschritte spezifisch ist, versteht sich, dass der in den beiliegenden Ansprüchen definierte Gegenstand nicht notwendigerweise auf diese beschriebenen Merkmale oder Vorgänge eingeschränkt ist. Beispielsweise kann eine solche Funktionalität unterschiedlich aufgeteilt sein oder in anderen, zusätzlichen oder weniger Bauteilen als hier identifiziert ausgeführt werden. Vielmehr sind die beschriebenen Merkmale und Schritte als Beispiele für Bauteile und Systeme sowie Verfahren innerhalb des Schutzbereichs der beiliegenden Ansprüche offenbart.