Tessellation vs Geometry Shader

11

Korrigieren Sie mich, wenn ich falsch liege, aber sowohl der Geometry Shader- als auch der Tessellation Shader-Job sollen Scheitelpunkte in der Grafikpipeline generieren. Ich würde gerne wissen, wie unterschiedlich sie sind und wann ich sie übereinander verwenden sollte.

Caesar
quelle
6
Ich fühle mich zu faul, um eine vollständige Antwort zu schreiben, aber das Wesentliche ist, dass Geometry Shader für einen sehr kleinen, festen Verstärkungspegel vorgesehen ist, bei dem die Tessellationsstufen für eine massive, dynamische Polygonverstärkung vorgesehen sind
MickLH

Antworten:

14

Nein, der 'Job' des Geometrie-Shaders (GS) ist die primitive Bewertung.

Geometrie-Shader können tesselieren, aber sie sind begrenzt durch a) eine in Bearbeitung befindliche Obergrenze für die Anzahl der Ausgabeelemente und b) die Ausführung innerhalb eines einzelnen Shaders ... natürlich löst die Instanzierung von Shadern das zweite Problem aus, aber insgesamt sind es Geometrie-Shader effektiver bei der primativen Bewertung und / oder Wertinterpolation als bei der Tessellation.

Im Vergleich dazu wurden Tesselation Shader (TS) speziell zur Durchführung der Geometrieverdichtung eingeführt, damit sie eine gute Leistung erbringen, gegenüber einer immer größeren Anzahl von Algorithmen robust sind (Wortspiel beabsichtigt) und durch ausgangsbegrenzte Puffer weniger eingeschränkt sind.

Daniel Rákos hat einen guten Artikel über die GS / TS-Entwicklung: Geschichte der Hardware-Tessellation

Wann jeweils angewendet werden muss, ist der Fall, dass das richtige Werkzeug für den Job verwendet wird. So geht's: Erstellen Sie eine Rohentwurfspipeline ohne Tesselator, damit die Grundelemente im VS / GS / FS korrekt ausgewertet werden. Scannen Sie die auf Ansichten oder Szenen basierende Tessellation separat und fügen Sie dann den TS vor dem GS ein, um Grundelemente zu verdichten, die dann an Ihren bereits entworfenen GS übergeben werden. Wenn Sie einen anderen TS ausprobieren möchten, bauen Sie eine Alternative auf und tauschen Sie sie in die Pipeline aus. Sie können sogar einen instanziierten GS verwenden, um den richtigen TS basierend auf den Eigenschaften eines Grundelements dynamisch auszuwählen!

JasonInVegas
quelle