-
Hintergrund
-
Dies bezieht sich allgemein auf Grafikverarbeitung und insbesondere auf Tesselation in Renderingsystemen, wie z. B. interaktives, Echtzeit- und Offline-/Film-Rendering.
-
Moderne Grafikprozessoren beinhalten dedizierte Hardware für das Tesselieren von Flächen in viele kleine Dreiecke. Die DirectX 11-Anwendungsprogrammierschnittstelle („DX11”) (API) addiert drei neue Stufen zu der Grafik-Pipeline, um Tesselation zu unterstützen: den Hull-Shader, den Tesselator mit fester Funktion und den Domain-Shader. Der Hull-Shader wird einmal pro Patch und einmal pro Kontrollpunkt ausgeführt, typischerweise, um Tesselationsfaktoren zu berechnen und um Kontrollpunktgrundlagen zu ändern. Der Tesselator mit fester Funktion nimmt Tesselationsfaktoren als Eingaben, und generiert einen großen Satz von Eckpunktpositionen in der Domain des Eingabegrundelements und Konnektivitätsinformationen zwischen Eckpunkten. Die Konnektivitätsinformationen bilden viele kleine Dreiecke. Der Domain-Shader wird einmal pro generierter Eckpunktposition von dem Tesselator ausgeführt. Eine typische Domain-Shader-Verwendung bewertet die Position und Normale einer parametrischen Fläche, wobei er beispielsweise einen Satz von Kontrollpunkten, baryzentrischen Koordinaten und eine detaillierte Textur als Eingaben verwendet. Die Ausgabe ist ein verschobener Eckpunkt, der von einem Satz von Attributen definiert wird. Ein Attribut ist die Position, aber der Shader kann ebenfalls Normale/Tangente/Bi-Tangente/Textur-Koordinate/Farbe/Transparenz oder andere Attribute des verschobenen Eckpunkts berechnen.
-
Kurze Beschreibung der Zeichnungen
-
1 ist ein Graph, der die Eckkontrollpunkte und die Vektoren b und t zeigt; durch Bilden von Vektoren zwischen den Ecken des Patches können die OBB-Achsen abgeleitet werden;
-
2 zeigt ein Beispiel der resultierenden Umgrenzungen nach 25 Schritten der Umgrenzung eines kubischen Polynoms mit zwei separaten Verschiebungsspitzen auf der oberen Reihe, wobei die Bilder links AABBs verwenden, und die Bilder rechts OBBs verwenden, deren Achsen von Kontrollpunkten der Bézier-Kurve bestimmt werden, während die untere Reihe Perlin-Rauschen zu dem Verschiebungs-Shader hinzufügt;
-
3 ist ein dreidimensionales Beispiel von AABB- zu OBB-Umgrenzung mit der gleichen Anzahl an Unterteilungen;
-
4 zeigt die normale Umgrenzungstechnik für das normale Patch, wobei die Figur ganz links das normale Patch vor Normalisierung zeigt, das mittlere Bild jeden Kontrollpunkt als normalisiert zeigt, sodass sie die Einheitskugel abbilden, und schließlich das Bild ganz rechts zeigt, dass die Projektionen durch einen Kegel umgegrenzt sind, der eine konservative Umgrenzung der normalisierten Normale für das Patch darstellt;
-
5 zeigt, dass bei gegebenen Umgrenzungskegeln für die beiden parametrischen Derivate, angegeben durch T und B, ein Kegel, der das Vektorprodukt eines beliebigen Vektors innerhalb T und eines beliebigen Vektors innerhalb B umgrenzt, abgeleitet werden kann, und hier als N angegeben ist;
-
6 zeigt ein Beispiel von zwei verschiedenen Ansichten unter Verwendung einer Bildraum-Umgrenzungskastengröße als die Sortierkriterien, mit 16 Schritten der Unterteilung, die ausgeführt werden, und den resultierenden Unterschied bei der Unterteilungsdichte;
-
7 ist ein Ablaufdiagramm für das Umgrenzen eines verschobenen Bézier-Flächenpatches und Umgrenzungsalgorithmus in Übereinstimmung mit einer erfindungsgemäßen Ausführungsform;
-
8 ist ein Ablaufdiagramm für einen detaillierteren Ablauf zum Berechnen von Umgrenzungen eines verschobenen Patches, indem ein OBB für ein verschobenes Bézier-Patch in Übereinstimmung mit einer Ausführungsform gefunden wird;
-
9 ist ein Ablaufdiagramm für eine Ausführungsform zum Definieren des OBB für ein Basis-Patch unter Verwendung von Kontrollpunkten;
-
10 ist ein Ablaufdiagramm für eine Ausführungsform zum Finden der normalisierten Normale;
-
11 ist ein Ablaufdiagramm für eine andere Ausführungsform zum Finden der normalisierten Normale; und
-
12 ist eine Hardwaredarstellung einer erfindungsgemäßen Ausführungsform.
-
Ausführliche Beschreibung
-
Verringern der Anzahl an Domain-Shader-Auswertungen verringert die Rechnerressourcen, die für diese Stufe einer Grafik-Pipeline benötigt werden. Dies kann durch Entfernen von Patches geschehen, die nicht zum endgültigen Bild beitragen. Um dieses Entfernen effizient zu gestalten, kann ein Algorithmus für die Berechnung hierarchischer Umgrenzungen von verschobenen Flächen benutzt werden.
-
Weiterhin werden bei kachelbasierten Rendering-Architekturen Umgrenzungen für Eingabe-Grundelemente benötigt, um die Eingabe-Grundelemente effizient in Kacheln zu sortieren. Ein „Umgrenzungsvolumen” ist ein volumetrisches Objekt, wie z. B. ein Kasten oder eine Kugel, die ein anderes Objekt umschließt. Da der Domain-Shader programmierbar ist, ist es schwierig, konservative und scharfe Umgrenzungen der Ausgabepositionen zu geben, die es eventuell nötig machen, die generierten kleinen Dreiecke individuell in Kacheln zu sortieren. Dies erhöht die Speicheranforderungen bei den Kachel-Reihen, erhöht die Bandbreitenverwendung, und verringert die Effizienz hinsichtlich Entfernen verdeckter Objekte auf einem Patch-Grundelement-Level.
-
Diese Umgrenzungen können stattdessen spontan (Block 12) nur auf dem Domain-Shader basierend berechnet werden, aber ohne Notwendigkeit eines benutzerspezifizierten Parameters, so wie in 7 angezeigt. Die Umgrenzungen können sodann adaptiv präzisiert werden, da das Grundelement in kleinere Subpatches aufgespalten wird, um eine Hierarchie zu erzeugen. Bei einer Ausführungsform ermöglicht ein Algorithmus konservatives und scharfes Abgrenzen von dynamischen, verschobenen parametrischen Flächen, wie z. B. Bézier-Patches, wobei effizientes, normales Umgrenzen, ausgerichtete Umgrenzungskästen und min-max MipMap-Hierarchien der Verschiebungstextur verwendet werden. Das Patch kann entfernt werden (Block 16). Wenn nicht, dann kann das Grundelement Tesselation und Domain-Shading ausgesetzt werden (Block 18).
-
Da das Patch nicht an den Tesselator geschickt werden muss, können sowohl Domain-Shader als auch Tesselator-Aufgaben für das Patch in einigen Ausführungsformen verringert werden. Wenn das Eingabe-Patch entfernt wird, dann kann bei einigen Ausführungsformen keine Tesselation und Domain-Shading durchgeführt werden. Gleichermaßen, wenn ein Subpatch entfernt wird, kann keine weitere Verarbeitung dieses Subpatches bei einigen Ausführungsformen gemacht werden. Ansonsten wird das Subpatch tesseliert und Domain-Shading wird durchgeführt.
-
Sammlungen von bikubischen Bézier-Patches sind beliebte Rendering-Grundelemente für gleichmäßige Flächen. Bekannte Algorithmen können für Übersetzen von Catmull-Clark-Unterteilungsflächen in Sammlungen von solchen parametrischen Patches verwendet werden, während sich getreu der Grenzfläche des rekursiven Unterteilungsprozesses angenähert wird. Es ist üblich, Verschiebungen von Texturen hoher Auflösung in die Richtung des Normalvektors des Patches hinzuzufügen, um das Detail der endgültigen Fläche zu erhöhen.
-
Das Bézier-Patch mit Verschiebung kann in einem Domain-Shader bei der Rendering-API benutzt werden. Das Bézier-Patch wird kompakt von seinen Kontrollpunkten dargestellt, und diese parametrische Flächendarstellung kann effizient parallel bewertet werden (im Gegensatz zu rekursiven Unterteilungsflächen).
-
Ein Bézier-Patch, p(u, v), ist eine parametrische Fläche, d. h. eine Fläche, die über zwei parametrische Koordinaten, u und v, definiert ist. Der Ausdruck „Basis-Patch” kennzeichnet das Bézier-Patch, das noch nicht verschoben worden ist, um es von der endgültig verschobenen Fläche zu unterscheiden. Ein Domain-Shader, der ein verschobenes Bézier-Patch bei einer parametrischen Koordinate, (u, v), bewertet, berechnet die Basis-Patch-Position, p(u, v), die normalisierte Normale des Basis-Patches n ^(u, v), und einen Verschiebungswert, der (normalerweise) von einer Textur, t(u, v), genommen wird. Wenn die Verschiebung in Normalrichtung des Basis-Patches agiert, dann ist der Domain-Shader (vor Multiplikation mit der Modellansichtsprojektionsmatrix): d(u, v) = p(u, v) + n ^(u, v)t(u, v) (1)
-
Multiplizieren von d(u, v) mit der Modellansichtsprojektionsmatrix, M, erreicht die Platzgewinnungsposition (clip space position), q, bei homogenen Koordinaten: q(u, v) = Md(u, v) = M(p(u, v) + n ^(u, v)t(u, v)) (2)
-
Die normalisierten Gerätekoordinaten sind durch sx = qx/qw und sy = qy/qw gegeben.
-
Eine konservative Umgrenzung von q(u, v) über eine parametrische Domain, wobei a <= u <= b und c <= v <= d ist, kann gefunden werden.
-
Folgend wird beschrieben, wie p(u, v) umgegrenzt wird. Bézier-Patches haben die Eigenschaft einer konvexen Hülle, und sie können leicht durch ihre Kontrollpunkte umgrenzt werden. Finden eines Umgrenzungskastens mit ausgerichteter Achse (axis-aligned bounding box, AABB) für ein Bézier-Patch entspricht 3 min. und 3 max. Operationen pro Kontrollpunkt.
-
Durch wiederholtes Anwenden der Bézier-Unterteilung konvergieren die Kontrollpunktkäfige der unterteilten Patches rasch in Richtung des darunterliegenden Basis-Patches. Außerdem, wenn das Original-Patch in jedem Schritt rekursiv in zwei Stücke, pA und pB, aufgespalten wird, generieren die de Casteljau-Schritte, notwendig zum Generieren von pA, die Kontrollpunkte für pB als ein Nebenprodukt. Dies erlaubt eine effiziente Implementierung.
-
Von den Kontrollpunkten der definierten Achsen des Basis-Patches können Achsen für einen Kasten mit orientierter Umgrenzung (oriented bounding box, OBB) abgeleitet werden. Dieser Kasten umschließt das Basis-Patch enger als ein AABB. Für jeden der beiden unterteilten Patches in der gleichen Iteration werden sowohl das Basis-Patch, das normale Patch als auch die Verschiebungs-Textur sowie -Lookup präzisiert. Mit Bezug auf 8, die Schritte zeigt, die verwendet werden, um die Umgrenzung der verschobenen Fläche zu berechnen, angezeigt in Block 12 in 7, wird das Basis-Patch entlang einer Achse unter Verwendung von Bézier-Unterteilung unterteilt. Die Basis-Patch-Umgrenzung, angezeigt in Block 14, involviert das Finden der OBB-Achsen ausgehend von den Kontrollpunkten, und Projizieren aller Kontrollpunkte auf diesen Achsen. Sodann wird das Minimum und Maximum entlang jeder Achse lokalisiert, um einen OBB abzuleiten, der alle Kontrollpunkte beinhaltet, und die Eigenschaft der konvexen Hülle der Bézier-Patches bedeutet, dass die Fläche in diesem OBB beinhaltet ist.
-
Folgend, wie in Block 15 angezeigt, werden die Minima und Maxima der Verschiebung in einer min./max. Texturhierarchie nachgesehen. Danach, in Raute 19, bestimmt eine Überprüfung, ob die Verschiebung gleich Null ist. Wenn ja, wird die Modellansichtsprojektion auf die acht Ecken des Umgrenzungskastens des Patches (Block 20) angewendet, und die Umgrenzungen werden zurückgegeben (Block 23). Wenn die Verschiebung ungleich Null ist, dann wird normales Umgrenzen in Block 21 durchgeführt, wobei eine der Techniken, die hierin nachstehend beschrieben werden, genannt TPATCH und NPATCH, durchgeführt werden, und zwar vor Modellansichtsprojektionstransformierung (Block 20) und vor Rückgabe der Umgrenzungen (Block 23). Schließlich wird, in Block 23, die Modellansichtsprojektionstransformierung angewendet.
-
Für Bézier-Patches werden die Vektoren zwischen den Eckkontrollpunkten (1) summiert, um zwei Achsen zu erhalten (9, Block 24). In einem gegebenen Patch mit (m + 1) × (n + 1) Kontrollpunkten werden die vier Eckkontrollpunkte C0,0, cm,0, c0,n und cm,n bezeichnet, und die beiden Vektoren werden gebildet: t = cm,0 – c0,0 + cm,n – c0,n (3) b = c0,n – c0,0 + cm,n – cm,0 (4) t und b können als ungefähre Durchschnittsgradienten in den u- bzw. v-parametrischen Richtungen gesehen werden. Sie müssen nicht orthogonal sein. Ihr Vektorprodukt (9, Block 26) gibt eine dritte Achse: n = t Vektorprodukt von b. Um ein orthonormales Koordinatensystem zu bilden, wird x = t, y = n Vektorprodukt von t und z = n eingestellt, und jeder Vektor wird normalisiert (9, Block 28). Das endgültige Koordinatensystem ist: (x ^, ŷ, z ^). Im Vergleich zur Verwendung von AABBs verringert dies in den meisten Fällen die Grade der Umgrenzungskästen erheblich. Aufwendigere OBB-Anpassungsschemata, basierend auf dem Kontrollpunktkäfig, können abgeleitet werden, allerdings liefert in der Praxis der vorstehende einfache Ansatz Achsen für OBBs, die die Fläche fest umgrenzen. Der Qualitätsunterschied zwischen Umgrenzen mit AABBs und OBBs wird in 2 für Kurven und in 3 für ein Bézier-Patch hervorgehoben. Für Entartungsfälle wird einfach ein AABB verwendet. Wie nachstehend gezeigt, sind die OBB-Achsen ebenfalls sehr hilfreich bei den normalen Umgrenzungsalgorithmen.
-
Umgrenzen der Patchnormale n ^(u, v) über eine Domain ist wesentlich schwieriger als Umgrenzen der Basisposition, p(u, v). Die Normalrichtung wird als das Vektorprodukt von zwei parametrischen Ableitungen des Basis-Patches, p(u, v), berechnet.
-
Der Standardschreibweise für Tensorprodukt-Bézier-Flächen folgend wird eine Bézier-Patch P(u, v) wie folgt dargestellt: R
2?R
3 wird definiert durch:
wobei ci,j die Kontrollpunkte sind, m und n die Grade des Patches auf den parametrischen Koordinaten, u bzw. v, sind. Bi(u) und Bj(v) sind Bernstein-Polynome.
-
Die partiellen Derivate können geschrieben werden als
wobei
ai,j = m(ci+1,j – ci,j), (8) bi,j = n(ci,j+1 – ci,j). (9)
-
Es ist anzumerken, dass ai,j und bi,j (maßstabsgetreue) Unterschiede der Kontrollpunkte des Basis-Patch und daher Vektoren sind. Die Flächennormale (vor Normalisierung) wird definiert durch: n(u, v) = (nx, ny, nz) = ∂p / ∂u(u, v) × ∂p / ∂v(u, v). (10)
-
Die normalisierte Normale wird gegeben durch:
-
Wenn der Bi-Grad von p(u, v) auf den parametrischen Koordinaten (u, v) (m, n) ist, dann weisen die parametrischen Derivate erster Ordnung Grade (m – 1, n) und (m, n – 1) auf. Wie nachstehend ersichtlich, ist der Bi-Grad des Patches, nach Nehmen des Vektorproduktes der Patches, (m + n – 1, m + n – 1). Ein Patch, das die Normalrichtung eines bikubischen Bézier-Patches darstellt, braucht daher Bi-Grad (5, 5), um exakt dargestellt zu werden.
-
Um Verschiebung anzuwenden, ist die normalisierte Normale notwendig. Die Normalisierungsoperation (Gleichung 11) benötigt Bi-Grad 2(m + n – 1, m + n – 1) für eine exakte Darstellung der Teilausdrücke: n 2 / x, n 2 / y, und n 2 / z. Für ein bikubisches Bézier-Patch können diese Ausdrücke exakt als ein Bi-Grad-(10, 10)-Bézier-Patch dargestellt werden. In vielen Fällen ist dies untragbar aufwendig (11·11 = 121 Kontrollpunkte). Schließlich kann die reziproke Quadratwurzel mit Bernstein-Polynomen nicht exakt dargestellt werden. Außerdem sollte der Operand für die reziproke Quadratwurzel immer größer als oder gleich Null sein, da der Operand die quadrierte Länge der Normalen ist. Wenn dies nicht zutrifft, können inf oder NaN resultieren. Deshalb sollte die umgrenzte Darstellung von n 2 / x + n 2 / y + n 2 / z strikt größer als Null sein. Auf den ersten Blick erscheint dies trivial, da die Quadratwurzel einer Summe von drei quadrierten (realen) Ausdrücken größer als oder gleich Null sein sollte. Dies kann jedoch in der Praxis schwierig sein, da der Umgrenzungskasten des Kontrollpunktkäfigs für das Umgrenzen verwendet wird, und es keine Garantie gibt, dass alle Kontrollpunkte positiv sein werden.
-
Hier wird ein normaler Umgrenzungsalgorithmus beschrieben, der die meisten vorstehend erörterten Probleme vermeidet. Insgesamt gesehen wird ein Normalvektor-Bézier-Patch von den parametrischen Ableitungen abgeleitet (10, Block 32), sodann werden seine Kontrollpunkte auf die Einheitskugel projiziert (10, Block 34), und deren Raumwinkel an der Einheitskugel wird in einem OBB-Koordinatensystem umgrenzt (10, Block 36), das eine konservative Umgrenzung der normalisierten Normale liefert. Dieser normale Umgrenzungsansatz wird als NPATCH bezeichnet.
-
Die Normale wird, wie bekannt, definiert durch:
-
Unter Verwendung der Formel für Produkte von Bernstein-Polynomen:
-
Gleichung 12 wird geschrieben als:
die ein Patch mit Bi-Grad (m + n – 1, m + n – 1) mit Kontrollvektoren, vp,q, ist, gegeben durch:
-
Um die Normale des Basis-Patches konservativ über das Patch umzugrenzen, wird die Tatsache genutzt, dass die Normale nach Normalisierung Einheitslänge hat. Daher werden die Kontrollvektoren, vp,q, normalisiert, sodass sie durch Punkte auf der Einheitskugel dargestellt sind.
-
Eine schnelle Art, diese Umgrenzungen abzuleiten, ist das Verwenden der z ^-Achse aus dem OBB-Koordinatensystem, die eine Annäherung der Normalen des Patches ist, und das einfache Berechnen des minimalen Skalarprodukts zwischen einem beliebigen normalisierten Kontrollpunkt und der z ^-Achse. Dies ergibt den Kosinus des Halbwinkels eines Kegels, der die normalisierten Richtungen umschließt. Dies wird in 4 veranschaulicht.
-
Für ein bikubische Bézier-Patch beinhaltet die Berechnung von vp,q 144 Vektorprodukte. Die binomischen Koeffizienten können in einer kleinen Lookup-Tabelle vorausberechnet sein.
-
Es ist jedoch anzumerken, dass jegliche Korrelation hinsichtlich welche Richtung welcher parametrischen Koordinate entspricht verlorengeht. Die Schlüssigkeit des Ansatzes hängt davon ab, ob die nicht-normalisierte Normale gut genug umgrenzt werden kann, was über große Domains schwierig sein kann, was aber leichter mit Größenabnahme der Subdomain wird.
-
Gröbere Umgrenzungen können schneller durch Bilden von zwei Tangentenkegeln aus den Kontrollpunkten der parametrischen Ableitungs-Patches erster Ordnung erreicht werden ∂p/∂u and ∂p/∂v (siehe Gleichungen 6 und 7). Die Kontrollpunkte der Ableitungs-Patches werden normalisiert und auf der Einheitskugel umgrenzt (so wie in 4 gezeigt), wobei sie zwei Kegel T:{t ^, αt} und B:{b ^, αb} bilden. Ein Kegel, T, wird durch eine normalisierte Achse t ^ und einen Halbwinkel definiert αt.
-
Wenn die Kegel T und B sich nicht überlappen, kann ein Kegel N:(n ^, θ), der alle möglichen Vektorprodukte von zwei Vektoren umgrenzt, einer aus jeweils T und B, ausgestaltet werden. Seine Achse n ^ ist in der Richtung t × b und sein Halbwinkel, θ, ist gegeben durch:
wobei a ^ der kleinste der beiden Winkel zwischenden Kegelachsen parallel zu t ^ bzw. b ^ ist. Der Kegel, N, umgrenzt die gesamte normalisierte Normale über das Patch. Die Kegel T, B und N werden in
5 gezeigt.
-
Verwendet werden die t ^ und b ^-Achsen, die vorstehend als Achsen für die Kegel T und B abgeleitet wurden, und die Kegelwinkel für die Kegel T und B werden aus Kontrollpunkten der parametrischen Ableitungs-Patches gefunden (11, Block 40). Der Kosinus des Kegelwinkels át (áb) ist einfach das minimale Punktprodukt eines beliebigen normalisierten Kontrollpunktes aus dem Tangenten-Patch mit der t ^(b ^)-Achse. Ein Normalkegel wird durch Berechnen des Vektorproduktes von Kegeln T und B abgeleitet (11, Block 42). Die Umgrenzungen für die normalisierte Normale, die in dem OBB-Koordinatensystem ausgedrückt werden, sind: ([–sinθ, sinθ], [–sinθ, sinθ], [cosθ, 1]) (17) wobei θ der Kegelhalbwinkel des Normalkegels N ist. Unter Verwendung der Gleichheit sin2è + cos2è = 1 können die Umgrenzungen der normalisierten Normalen abgeleitet werden, wobei der Normalkegelwinkel ohne irgendwelche trigonometrischen Funktionen verwendet wird (11, Block 44). Dieser Ansatz wird als TPATCH bezeichnet.
-
Es muss unbedingt überprüft werden, dass sich die beiden Tangentenkegel nicht überlappen. Die Kegel überlappen sich, wenn át + áb > a ^, was wie gegeben αt < pi, αb < pi, and β < pi als umschrieben werden kann: cosαtcosαb – sinαtsinαb < cosβ (18)
-
Wenn diese Bedingung zutrifft oder wenn cosát < 0, cosáb < 0, wird die Einheitsbox in das OBB-Koordinatensystem zurückgegeben. Eine Einheitsbox hat die folgenden zwei extremen Eckpunkte: (–1, –1, –1) und (+1, +1, +1). Dies wird jedoch nur selten passieren, außer bei hochgradig gekrümmten Patches, da das OBB-Koordinatensystem aus einer Annäherung der lokalen Flächentangente, Bi-Normalen und Normalen des Basis-Patch berechnet wird.
-
Techniken für Umgrenzungstextur-Lookups involvieren das Beibehalten von zwei zusätzlichen MipMap-Hierarchien. Die erste speichert den maximalen Verschiebungswert über jede Texturgrundfläche und jedes Level, und die zweite speichert den minimalen Verschiebungswert der Grundfläche. Allgemein, wenn der parametrische Abstand abnimmt, nehmen auch die Texturumgrenzungen ab.
-
Die endgültigen Umgrenzungen des Verschiebungsvektors o = n ^t, sind das Produkt (in Form der Abstandsarithmetik) des Abstandes aus dem Textur-Lookup [tmin, tmax] multipliziert mit den Abständen der normalisierten Vektornormale entlang jeder Achse. Mit der Bezeichnung [a, a], um einen Abstand zu definieren, wo a die Untergrenze und a die Obergrenze ist, wird die Multiplikation von zwei Abständen definiert von: [a, a] ⊗ [b, b] = [min(ab, a b, a b, ab), max(ab, a b, a b, ab)] (19)
-
Daher ist die Abstandsversion der x-Komponente von o:
und ähnlich für die anderen Komponenten. Wenn die Texturverschiebung streng positiv ist, dann kann Gleichung 20 weiter optimiert werden.
-
Der letzte Schritt bei den meisten Domain-Shadern ist die Matrixtransformation, um Platz zu gewinnen, sodass der verbleibende Teil beim Erhalten von Umgrenzungen für q die Modellansichtsprojektionsmatrix ist, die nicht von der parametrischen Domain abhängt, und die als Konstante gesehen werden kann. Diese konstante Matrix kann leicht mit den acht Ecken des OBB multipliziert werden, der aus dem verschobenen Patch d erhalten wurde, was in Umgrenzungen für die Platzgewinnungsposition q resultiert. (Der letzte Schritt kann überflüssig sein, wenn hierarchische Umgrenzungen für Vor-Tesselationssortierung und Strahlverfolgung benutzt werden).
-
Mit gegebener anfänglicher Grobunterteilung des Patches kann bei einigen Ausführungsformen eine Prioritätswarteschlange der Umgrenzungskästen der Subdomains beibehalten werden. (Beispielsweise kann jedes Subpatch alternativ in eine Anzahl an kleineren Subpatches unterteilt werden, bis jedes Subpatch, in Hinblick auf z. B. Volumen, Flächenbereich oder Projektionsbereich „klein genug” ist) Bei jedem der folgenden Unterteilungsschritte wird das oberste Element der Warteschlange genommen, weiter unterteilt, und die unterteilten Kästen werden erneut in die Warteschlange eingefügt.
-
Das genaue Sortierkriterium ist abhängig von der Anwendung, und kann die Bildraummaße des Umgrenzungskasten, die Tiefenwerte, beinhalten, oder Kästen priorisieren, die eine Kegelstumpf-Ebene zur Ansicht von Kegelstumpf-Entfernen durchschneiden. 6 veranschaulicht ein ansichtabhängiges Unterteilungskriterium.
-
Zum Ansicht von Kegelstumpf-Entfernen werden die OBB-Ecken (in Clip-Space) gegen die Kegelstumpf-Ebenen getestet. Das Unterteilungskriterium kann so gestaltet sein, dass Subpatches, die dem Kamera-Kegelstumpf überspannen, priorisiert werden, was Geometrie außerhalb der Clip-Ebenen effizient entfernt. Die Clip-Testergebnisse des Patches können ebenfalls dafür benutzt werden, zu garantieren, dass das gesamte Patch komplett innerhalb des Ansichtskegelstumpfs liegt, sodass die Clip-Tests für generierte Dreiecke von dem Patch möglicherweise umgangen werden können.
-
Mit einem gegebenen groben Tiefenpuffer können Subpatches entfernt werden, wenn deren Umgrenzungskasten vollkommen durch bereits gezeichnete Grundelemente verdeckt ist. Das Unterteilungskriterium kann übernommen werden, sodass Subpatches, die näher an der Kamera sind, zuerst verarbeitet und an die Rasterungsstufe der Pipeline gesendet werden, und damit die Wahrscheinlichkeit von z-Entfernen erhöhen.
-
Entfernen der Rückseiten ist wegen der Schwierigkeit, die geometrische Normale nach Verschiebung effizient umzugrenzen, die schwierigste Art von Entfernen. Bei gegebener Tesselationsrate, den normalen Umgrenzungen und einem engen Abstand der Verschiebung können jedoch Umgrenzungen für die verschobene Flächennormale abgeleitet werden. Das Unterteilungskriterium kann weiter angepasst werden, sodass es auf Patches mit hoher normaler Variation abzielt, wobei die Wahrscheinlichkeit von Entfernen der Rückseiten von Subpatches erhöht wird.
-
Nach Berechnen einer Umgrenzungsdarstellung des verschobenen Bézier-Patches können diese Umgrenzungen für Vor-Tesselationssortieren in Kacheln angewendet werden. Überlappen von Kacheln kann durch hierarchische Unterteilung des größten Bildraum-Umgrenzungskastens verringert werden.
-
In einem strahlverfolgenden Umfeld ist das Unterteilungskriterium darauf abgestimmt, das gesamte Flächengebiet eines jeden OBB zu verringern, ähnlich zu dem Vorgang, wie eine Flächengebiet-Heuristik Beschleunigung von Datenstrukturen bildet. Bei Kollisionserkennung ist das Unterteilungskriterium für verringerte OBB-Volumina abgestimmt.
-
Hierarchische Umgrenzungsvolumina können für Entfernen sowie für Sortieren in Kacheln und Strahlverfolgung benutzt werden. Unter Verwendung der hierin beschriebenen Techniken können elektronische Daten in eine visuelle Form zur Anzeige auf einem Display transformiert werden.
-
Um die DX-11-Tesselations-Pipeline-Stufen effizient zu unterstützen, werden, in einer Kachelungsarchitektur, die Umgrenzungen der verschobenen Flächen vor Anwenden von Tesselation und Domain-Shading benötigt. Diese Umgrenzungen können dafür verwendet werden, die verschobenen Bézier-Patches ohne jegliche Tesselation auszulagern (d. h. Grundelemente in kachelspezifische Warteschlangen zu sortieren). Die Tesselation und Domain-Shading würden dann je nach Bedarf stattfinden. Das Verwenden von hierarchischen Umgrenzungen kann nützlich beim Auslagern, Ansicht von Kegelstumpf-Entfernen, Entfernen von Verdeckungen und Entfernen von Rückseiten sein.
-
Die hierin beschriebenen Grafikverarbeitungstechniken können in verschiedenen Hardware-Architekturen implementiert werden. Beispielsweise kann Grafikfunktionalität innerhalb eines Chipsatzes integriert sein. Alternativ kann ein getrennter Grafikprozessor verwendet werden. Als noch weitere Ausführungsform können die Grafikfunktionen durch einen Universalprozessor, einschließlich eines Mehrkernprozessors, implementiert werden.
-
Das Computersystem 130, wie in 12 gezeigt, kann eine Festplatte 134 und ein austauschbares Medium 136 umfassen, die durch einen Bus 104 mit einem Kernlogik-Chipsatz 110 gekoppelt sind. Eine Tastatur und Maus 120, oder andere herkömmliche Komponenten, können mit dem Kernlogik-Chipsatz über Bus 108 gekoppelt sein. Die Kernlogik kann bei einer Ausführungsform über einen Bus 105 mit dem Grafikprozessor 112, und dem Haupt- oder Hostprozessor 100 gekoppelt sein. Der Grafikprozessor 112 kann auch durch einen Bus 106 mit einem Framepuffer 114 gekoppelt werden. Der Framepuffer 114 kann über einen Bus 107 mit einem Bildschirm 118 gekoppelt werden. Bei einer Ausführungsform kann ein Grafikprozessor 112 ein paralleler Prozessor mit mehreren Threads und mehreren Kernen sein, der eine SIMD-(single instruction multiple data)-Architektur einsetzt.
-
Im Fall einer Softwareimplementierung kann der zugehörige Code in jedem geeigneten Halbleiter-, magnetischen oder optischen Speicher, einschließlieh des Hauptspeichers 132 oder jedem verfügbaren Speicher innerhalb des Grafikprozessors, gespeichert sein. Deshalb kann bei einer Ausführungsform der Code, um die Abläufe von 7–11 auszuführen, in einem maschinen- oder computerlesbaren Medium, wie z. B. der Speicher 132 oder der Grafikprozessor 112, gespeichert sein, und kann bei einer Ausführungsform durch den Prozessor 100 oder den Grafikprozessor 112 ausgeführt werden.
-
8–12 sind Ablaufdiagramme. Bei einigen Ausführungsformen können die Abläufe, die in diesen Ablaufdiagrammen dargestellt sind, in Hardware, Software oder Firmware implementiert sein. Bei einer Software-Ausführungsform kann ein computerlesbares Medium, wie z. B. ein Halbleiterspeicher, ein magnetischer Speicher oder ein optischer Speicher, verwendet werden, um Befehle zu speichern, und kann von einem Prozessor ausgeführt werden, um die Abläufe zu implementieren, die in einem oder mehr der Ablaufdiagramme, dargestellt in 8–13, gezeigt werden.
-
Verweise in dieser Beschreibung auf „eine Ausführungsform” bedeuten, dass ein bestimmtes Merkmal, eine Struktur oder Charakteristik, die in Verbindung mit der Ausführungsform beschrieben wird, mindestens in einer innerhalb der vorliegenden Erfindung eingeschlossenen Implementierung enthalten ist. Somit beziehen sich Verwendungen des Ausdrucks „bei einer Ausführungsform” nicht notwendigerweise auf die gleiche Ausführungsform. Außerdem können die bestimmten Merkmale, Strukturen oder Charakteristika in anderen geeigneten Formen eingeführt werden, die sich von der bestimmten veranschaulichten Ausführungsform unterscheiden, und alle solchen Formen können innerhalb der Ansprüche der vorliegenden Anmeldung eingeschlossen sein.
-
Obwohl die vorliegende Erfindung im Hinblick auf eine begrenzte Anzahl an Ausführungsformen beschrieben wurde, sind sich Fachleute bewusst, dass viele weitere Modifikationen und Varianten davon möglich sind. Die beigefügten Ansprüche sollen alle solchen Modifikationen und Varianten abdecken, die dem Sinn und Schutzbereich der vorliegenden Erfindung entsprechen.