Wie funktioniert die Hardware-Tessellation?

34

Ich möchte nur, dass jemand relativ klar erklärt, wie Hardware-Tessellation funktioniert, wenn man bedenkt, dass es das neue Schlagwort mit DX11 ist.

Vielen Dank.

SD021
quelle

Antworten:

42

Ich gebe dir die "einfache" Version und lasse dich von jemand anderem über die Details informieren, wenn du interessiert bist :).

Grundsätzlich gibt es zwei Möglichkeiten, 3D-Objekte zu modellieren. Das erste ist eines, von dem man in Spielen nicht viel sieht, und es beinhaltet die Verwendung präziser, mathematisch definierter Kurven, um die Form eines Objekts zu definieren. Mit dieser Methode ist der Detaillierungsgrad (praktisch) "unendlich". Nehmen Sie zum Beispiel einen Zylinder. Ein Zylinder kann in sehr einfachen mathematischen Begriffen definiert werden: Alles, was Sie wirklich wissen müssen, ist der Radius an den Enden und die Länge des Zylinders. In Bezug auf die Geometrie sind diese Informationen alles, was wir benötigen, um den Zylinder in einer 3D-Szene zu rendern. Darüber hinaus können wir den Zylinder leicht skalieren, um ihn größer oder kleiner zu machen. Alles, was wir tun müssen, ist das Verhältnis der Länge zum Radius beizubehalten. Wir können dieselben Formeln zur Darstellung der Geometrie verwenden, jedoch mit unterschiedlichen Parametern. Wir können einen Torus ("Donut") darstellen Form) auch einfach: Wir müssen nur den Innenradius und den Außenradius kennen. Daraus können wir den Durchmesser (und damit den Radius) des Donut-Körpers (den "Kuchen") berechnen, indem wir den Innenradius vom Außenradius abziehen. Der kreisförmige Körper wickelt sich entlang des durch den Innenradius definierten Bogens. Diese Art der 3D-Definition ist schön, da sie relativ einfach ist (was zu einer kleinen Modelldatei führt) und der Detaillierungsebene keine nennenswerte Grenze gesetzt ist. Der Nachteil ist, dass die heutige Videohardware nicht dafür ausgelegt ist, solche Modelle (wenn überhaupt) effizient zu verarbeiten. Der kreisförmige Körper wickelt sich entlang des durch den Innenradius definierten Bogens. Diese Art der 3D-Definition ist schön, da sie relativ einfach ist (was zu einer kleinen Modelldatei führt) und der Detaillierungsebene keine nennenswerte Grenze gesetzt ist. Der Nachteil ist, dass die heutige Videohardware nicht dafür ausgelegt ist, solche Modelle (wenn überhaupt) effizient zu verarbeiten. Der kreisförmige Körper wickelt sich entlang des durch den Innenradius definierten Bogens. Diese Art der 3D-Definition ist nett, da sie relativ einfach ist (was zu einer kleinen Modelldatei führt) und der Detaillierungsebene keine nennenswerte Grenze gesetzt ist. Der Nachteil ist, dass die heutige Videohardware nicht dafür ausgelegt ist, solche Modelle (wenn überhaupt) effizient zu verarbeiten.

Die andere Möglichkeit besteht darin, einfache Geometrie zu kombinieren, um die Form, die wir darstellen möchten, zu approximieren. Wir machen das mit einem Prozess namens Tessellation . Wir könnten einen Zylinder tessellieren, indem wir ihn in primitivere Formen zerlegen: zwei Kreise und eine Reihe langer Rechtecke, die sich um die Außenkante wickeln. Die Kreise können weiter in viele winzige Dreiecke zerlegt werden, ebenso wie die Rechtecke entlang der Kante. Das Endergebnis ist ein Modell, das nur aus Dreiecken besteht:

Bild des dreieckigen Zylinders

Oder für den Torus:

Bild des dreieckigen Torus

Die gute Nachricht ist, dass die Video-Hardware für diese Art von Geometrie optimiert ist. Heutige GPUs haben kein Problem damit, jede Sekunde Tonnen und Tonnen von Dreiecken zu produzieren. Es gibt jedoch ein offensichtliches Problem: Wir versuchen, gekrümmte Oberflächen mit Formen darzustellen, die flache Kanten haben. Damit unser Zylinder wie ein Zylinder aussieht (im Gegensatz zu einem Würfel), möchten wir ihn in viele Teile zerlegenvon kleinen Dreiecken. Nun, wie viele wollen wir? Es hängt davon ab, ob. Mit welcher Hardware wird die Szene gerendert? Mit schnellerer Hardware können Dreiecke schneller gerendert werden als mit langsamerer Hardware, was zu schnelleren Bildraten führt. Es sind andere Faktoren zu berücksichtigen, z. B. wie viele andere Objekte in der Szene vorhanden sein werden und wie komplex sie sein werden. In Spielen gibt es in der Regel viele Objekte in einer bestimmten Szene. Darüber hinaus können Objekte unterschiedliche Szenen mit unterschiedlichen visuellen Komplexitätsgraden durchlaufen. Es ist schwierig, den Detaillierungsgrad für die Tessellierung unserer Modelle zu ermitteln.

Ein weiteres Problem ist die geometrische Komplexität: Während eine kurvenbasierte Definition eines Zylinders sehr einfach ist (Radius und Länge), kombiniert eine tessellierte Definition wahrscheinlich Hunderte von Dreiecken, von denen jedes unabhängig definiert werden muss. Folglich wird unsere tessellierte Modelldatei sehr viel größer sein. Nehmen wir an, wir haben ein mathematisch definiertes Modell für etwas Komplexes, wie eine Person. Unsere Modelldatei ist möglicherweise nur 24 KB groß. Nun, sobald dieses Modell tesselliert ist, könnte die resultierende Datei 24 MB (24.000 KB) groß sein. Das ist ein ziemlicher Unterschied.

Die Hardware-Tessellation nutzt Geometrie-Shader , um die hardwareunterstützte Tessellation in Echtzeit (oder nahezu in Echtzeit) durchzuführen . Im Wesentlichen bietet es einen Mechanismus, mit dem ein mathematisch definiertes 3D-Modell in ein tesselliertes Format umgewandelt werden kann, das von der Grafikkarte effizient gerendert werden kann. Traditionell haben Spieleentwickler Tessellation im Studio durchgeführt und die tessellierten Modelle mit dem Spiel ausgeliefert. Mithilfe der Hardware-Tessellation können wir diesen Vorgang verschieben, bis das Spiel tatsächlich auf dem Computer des Spielers ausgeführt wird. Dies hat einige schwerwiegende Vorteile:

  1. Die Größe des 3D-Inhalts des Spiels nimmt dramatisch ab (weniger Discs oder kleinere Downloads und weniger Festplattenspeicher erforderlich).

  2. Wir können den Detaillierungsgrad in Echtzeit steuern . Laufen wir auf einem hochmodernen Tier eines Spielautomaten? In diesem Fall können wir sehr detailliert tessellieren. Laufen wir auf einem alten Laptop mit integrierter Grafik? Kein Problem; Wir können einfach den Detaillierungsgrad reduzieren, um die Leistung zu steigern.

Das ist das Wesentliche. Es ist wahrscheinlich nicht 100% genau, da ich kein 3D-Programmierer bin, aber das sollte Ihnen eine bessere Vorstellung davon geben, worum es bei all der Aufregung geht :).

Prost,
Mike

Mike Strobel
quelle
Wow ... genial! Längste 'Übersicht', die ich je gelesen habe: P
6
Es gibt noch eine andere Sache, die den Grad der erforderlichen Tessellation bestimmt - die Größe des Objekts auf dem Bildschirm. Mit der Laufzeit-Tessellation haben Sie überall die richtige Detailebene, ohne mehrere Versionen jedes Objekts zu erstellen.
Adam
Ist das ein bisschen CPU-lastig?
Jcora
@Bane, meintest du GPU intensiv? Die CPU könnte sich weniger darum kümmern.
Nate Zaugg
0

Schade, dass die meisten Entwickler Tessellation derzeit oder in naher Zukunft nicht nutzen. Momentan verwenden sie nur Tess, um die meisten ebenen Flächen gemäß ihrer Höhenkarte zu verschieben. Das führt auch zu einem guten Aussehen, aber ich denke immer noch, dass viel leistungsfähigere Technologien schlecht eingesetzt werden.

Zemit
quelle
Die Tools und Produktions-Pipelines müssen überarbeitet und neu aufgebaut werden (wie Sie sicher besser als die meisten anderen wissen, @SamHocevar, damit dieser Kommentar nicht auf Sie zielt), und die neue Hardware muss sich zu einem erheblichen Prozentsatz vermehren.
Rob Craig
@RobCraig Beachten Sie, dass ich gerade die Schreibweise in diesem Kommentar korrigiert habe. Ich bin nicht der ursprüngliche Autor.
Sam Hocevar
@SamHocevar Yup, dachte ich mir - danke für die Klarstellung!
Rob Craig