Tessellatorphase (TS)
Die Tessellatorphase (TS) erstellt ein Samplingmuster der Domäne, das den Geometriepatch darstellt, und generiert eine Reihe kleinerer Objekte (Dreiecke, Punkte oder Linien), die diese Beispiele verbinden.
Zweck und Verwendung
Im folgenden Diagramm werden die Phasen der Direct3D-Grafikpipeline hervorgehoben.
Das folgende Diagramm zeigt die Entwicklung durch die Tessellationsphasen.
Die Entwicklung beginnt mit der Unterteilungsoberfläche mit geringem Detail. Im nächsten Schritt wird der Eingabepatch mit dem entsprechenden Geometriepatch, Domänenbeispielen und Dreiecken hervorgehoben, die diese Beispiele verbinden. Die Entwicklung hebt schließlich die Scheitelpunkte hervor, die diesen Beispielen entsprechen.
Die Direct3D-Laufzeit unterstützt drei Phasen, die tessellation implementieren, wodurch Unterteilungsflächen mit geringem Detail in detailreichere Grundtypen auf der GPU konvertiert werden. Tessellationskacheln (oder aufteilen) hochgeordnete Oberflächen in geeignete Strukturen zum Rendern.
Die Tessellationsstufen arbeiten zusammen, um Oberflächen mit höherer Reihenfolge (die das Modell einfach und effizient halten) in viele Dreiecke für das detaillierte Rendering in der Direct3D-Grafikpipeline zu konvertieren.
Tessellation verwendet die GPU, um eine detailliertere Oberfläche aus einer Oberfläche zu berechnen, die aus Quad-Patches, Dreieckspatches oder Isolines erstellt wurde. Um die hochgeordnete Oberfläche anzunähern, wird jeder Patch in Dreiecke, Punkte oder Linien unter Verwendung von Tessellationsfaktoren unterteilt. Die Direct3D-Grafikpipeline implementiert Tessellation mithilfe von drei Pipelinephasen:
- Hull-Shaderphase (HS) – Eine programmierbare Shaderphase, die einen Geometriepatch (und Patchkonstanten) erzeugt, der jedem Eingabepatch (Quad, Dreieck oder Linie) entspricht.
- Tessellatorphase (TS) – Eine Pipelinephase mit fester Funktion, die ein Samplingmuster der Domäne erstellt, das den Geometriepatch darstellt, und generiert eine Reihe kleinerer Objekte (Dreiecke, Punkte oder Linien), die diese Beispiele verbinden.
- Domain Shader -Stufe (DS) – Eine programmierbare Shaderphase, die die Vertexposition berechnet, die den einzelnen Domänenbeispielen entspricht.
Durch die Implementierung von Tessellation in der Hardware kann eine Grafikpipeline niedrigere Detailmodelle (niedrigere Polygonanzahl) auswerten und in höheren Details rendern. Während die Software-Tessellation durchgeführt werden kann, kann die von der Hardware implementierte Tessellation eine unglaubliche Menge visueller Details (einschließlich Unterstützung für die Verdrängungszuordnung) generieren, ohne die visuellen Details zu den Modellgrößen hinzuzufügen und die Aktualisierungsraten zu lähmen.
Vorteile der Tessellation:
- Tessellation spart viel Arbeitsspeicher und Bandbreite, was es einer Anwendung ermöglicht, detailliertere Oberflächen aus Modellen mit niedriger Auflösung zu rendern. Die in der Direct3D-Grafikpipeline implementierte Tessellationstechnik unterstützt auch die Verdrängungszuordnung, die atemberaubende Mengen an Oberflächendetails erzeugen kann.
- Tessellation unterstützt skalierbare Renderingtechniken, z. B. fortlaufende oder ansichtsabhängige Detailebenen, die dynamisch berechnet werden können.
- Tessellation verbessert die Leistung, indem teure Berechnungen mit niedrigerer Häufigkeit durchgeführt werden (Berechnungen für ein Modell mit niedrigeren Details). Dazu können Mischberechnungen unter Verwendung von Blendformen oder Morphzielen für realistische Animationen oder physikalische Berechnungen zur Kollisionserkennung oder Weichkörperdynamik gehören.
Die Direct3D-Grafikpipeline implementiert Tessellation in hardware, wodurch die Arbeit von der CPU auf die GPU deaktiviert wird. Dies kann zu sehr großen Leistungsverbesserungen führen, wenn eine Anwendung eine große Anzahl von Morphzielen und/oder komplexeren Skinning-/Verformungsmodellen implementiert.
Der Tessellator ist eine feste Funktionsstufe, die initialisiert wird, indem ein Hull-Shader an die Pipeline gebunden wird. (siehe How To: Initialize the Tessellator Stage). Der Zweck der Tessellatorstufe besteht darin, eine Domäne (Quad, Tri oder Linie) in viele kleinere Objekte (Dreiecke, Punkte oder Linien) zu unterteilen. Die Tessellatorkachelt eine kanonische Domäne in einem normalisierten Koordinatensystem (Null-zu-1). Beispielsweise wird eine Quad-Domäne auf ein Einheitsquadeck tesselliert.
Phasen in der Tessellatorphase (TS)
Die Tessellatorphase (TS) arbeitet in zwei Phasen:
In der ersten Phase werden die Tessellationsfaktoren verarbeitet, Rundungsprobleme behoben, sehr kleine Faktoren behandelt, Faktoren reduziert und kombiniert, wobei 32-Bit-Gleitkommaarithmetik verwendet wird.
In der zweiten Phase werden Punkt- oder Topologielisten basierend auf dem ausgewählten Partitionstyp generiert. Dies ist die Kernaufgabe der Tessellatorphase und verwendet 16-Bit-Bruchzahlen mit Festkommaarithmetik. Festkommaarithmetik ermöglicht Hardwarebeschleunigung und gleichzeitig eine akzeptable Genauigkeit. Bei einem 64 Meter breiten Patch kann diese Genauigkeit beispielsweise Punkte in einer Auflösung von 2 mm platzieren.
Typ der Partitionierung Bereich Fractional_odd [1...63] Fractional_even TessFactor-Bereich: [2..64] Ganzzahl TessFactor-Bereich: [1..64] Pow2 TessFactor-Bereich: [1..64]
Tessellation wird mit zwei programmierbaren Shaderstufen implementiert: einem Hull-Shader und einem Domänen-Shader. Diese Shaderphasen werden mit HLSL-Code programmiert, der im Shadermodell 5 definiert ist. Die Shaderziele sind: hs_5_0 und ds_5_0. Der Titel erstellt den Shader, und der Code für die Hardware wird aus kompilierten Shadern extrahiert, die an die Laufzeit übergeben werden, wenn Shader an die Pipeline gebunden sind.
Aktivieren/Deaktivieren der Tessellation
Aktivieren Sie die Tessellation, indem Sie einen Hull-Shader erstellen und an die Hull-Shader-Stufe binden (dadurch wird automatisch die Tessellatorstufe eingerichtet). Um die endgültigen Vertexpositionen aus den tessellierten Patches zu generieren, müssen Sie auch einen Domänen-Shader erstellen und an die Domänen-Shader-Phase binden. Sobald die Tessellation aktiviert ist, müssen die Dateneingaben in die Eingabeassemblerphase (Input Assembler, IA) Patchdaten sein. Die Topologie des Eingabeassemblers muss eine Patchkonstantentopologie sein.
Um die Tessellation zu deaktivieren, legen Sie den Hull-Shader und den Domänen-Shader auf NULL fest. Weder die Geometry-Shader-Stufe (GS) noch die Stream output (SO)-Phase können Hull-Shader-Ausgabesteuerungspunkte oder Patchdaten lesen.
Eingabe
Der Tessellator wird einmal pro Patch mit den Tessellationsfaktoren (die angeben, wie fein die Domäne tesselliert wird) und den Typ der Partitionierung (der den Algorithmus angibt, der zum Aufschneiden eines Patches verwendet wird) ausgeführt, die aus der Hull-Shader-Stufe übergeben werden.
Ausgabe
Der Tessellator gibt uv-Koordinaten (und optional w) und die Oberflächentopologie in die Domänen-Shader-Stufe aus.
Verwandte Themen