Ich habe meinen Teil der 3D-Spieleprogrammierung für meinen (ehemaligen) Arbeitgeber erledigt und auch in meinen eigenen benutzerdefinierten Engines für meine eigenen Indie-Spiele.
Anfänglich habe ich mit Direct3D 9 und D3DX9 angefangen, was so ziemlich alles für mich getan hat, und ich musste überhaupt nicht an Shader denken.
Danach habe ich meine ersten Direct3D 9-Shader geschrieben, aber meistens einen sehr einfachen Shader für alles verwendet, was ich getan habe.
In der letzten Iteration meiner Spiel-Engine bin ich auf Direct3D 11 umgestiegen und habe damit viele Shader erstellt. Ich habe GPU-Skinning durchgeführt, GPU-berechnete Partikel, viele Beleuchtungs- und Nachbearbeitungseffekte, alles in der GPU. Wirklich cooles Zeug.
Bisher habe ich nur Vertex- und Pixel / Fragment-Shader verwendet. Obwohl es noch viele Dinge gibt, die ich noch nicht getan habe, glaube ich, dass ich genau weiß, was die Vertex- und Pixel / Fragment-Shader tun und wie das alles in die gesamte 3D-Pipeline passt.
Aufgrund der jüngsten Entwicklungen habe ich mich sehr für die neueren Shader-Stufen interessiert. Das heißt, der Geometry Shader und noch neuer die Hull- und Domain-Shader.
Ich habe diese Stufen noch nie verwendet. Soweit ich weiß, wird der Geometry-Shader, sofern aktiviert, nach dem Vertex-Shader einmal für jeden transformierten Vertex (oder einmal pro Grundelement?) Ausgeführt und ermöglicht es Ihnen, Vertices (und Grundelemente?) Zu verwerfen. , und erstelle neue (die ich schätze gehen an den Anfang der Pipeline zurück?).
Ich vermute, dass der Geometrie-Shader hauptsächlich zum programmgesteuerten Generieren von Geometrie in der GPU verwendet wird. Eine gebräuchliche Verwendung wäre es, Billboard-Quads basierend auf einem einzelnen Vertex zu erstellen, aber ich visualisiere nicht wirklich viele andere häufige Szenarien, abgesehen von der Erzeugung von Fraktalen und anderem Material, das Sie zu 100% programmgesteuert erzeugen können.
Bei den Shadern "Hull" und "Domain" scheint es, als hätten sie etwas mit Tessellation zu tun (aus rauen Oberflächen glattere Oberflächen erstellen?) Und müssen zusammen oder überhaupt nicht verwendet werden. Der Begriff "Patch" scheint auch hier gebräuchlich zu sein.
Würde mir jemand erklären wollen, wozu diese neuen Shader-Stufen dienen, wie sie in die 3D-Pipeline passen und in welchen Fällen sollte ich sie in Betracht ziehen?