WebGL 2 Guide - #2 Rendering Pipeline
Das folgende Diagramm soll veranschaulichen, wie die Rendering Pipeline von WebGL aussieht:
Im weiteren Verlauf gehe ich auf die einzelnen Elemente genauer ein:
Vertex Buffer Objects (VBOs)
- enthält die Daten, die die Geometrie, welche gerendert werden soll, beschreibt.
- Vertexkoordinaten
- Vertexnormalen
- Vertexfarben
- Texturkoordinaten
Index Buffer Objects (IBOs)
- enthält Informationen über die Beziehung zwischen den Vertexpunkten.
- benutzt dazu den Index des Vertexes im Vertexbuffer.
Vertex Shader
- wird auf jeden Vertex aufgerufen
- manipuliert "per-vertex-data"
- per-vertex-data:
- Vertexkoordinaten
- Vertexnormalen
- Vertexfarben
- Texturkoordinaten
Fragment Shader
- jedes Set von drei Vertexpunkten definiert ein Dreieck. Jedem Element auf der Fläche des Dreiecks muss eine Farbe zugewiesen werden.
- Ein Flächenelement wird auch Fragment genannt.
- Da diese Elemente auf dem Bildschirm dargestellt werden sollen, werden sie auch Pixel genannt.
- Die Hauptaufgabe des Fragment Shaders ist, die Farbe eines jeden Pixels zu berechnen.
Framebuffer
- Ist ein zweidimensionaler Buffer, welcher die vom Fragment Shader berechneten Fragmente enthält.
- Wenn die Fragmente berechnet wurden, wird daraus ein 2D Bild erzeugt und auf dem Bildschirm dargestellt.
- Der Framebuffer ist das finale Element in der Rendering Pipeline.
Attributes
- Sind Inputvariablen, welche im Vertex Shader verarbeitet werden.
- Stellen die Spezifikation dar, wie Daten aus Buffern zu lesen sind.
- Stellen die Spezifikation dar, wie Daten dem Vertex Shader zu Verfügung gestellt werden.
- Bsp.:
- Es werden drei Positionskoordinaten als jeweils 32-bit-floats im Buffer abgelegt. Nun muss über ein Attribute definiert werden, in welchem Buffer sich diese Daten befinden, was für einen Type sie haben (3-Komponenten, 32-bit-floats), an welchem Offset diese Daten anfangen und wie viele Bytes pro Position zur nächsten führen. Da der Vertex Shader pro Vertex aufgerufen wird, sind die Attributes pro Aufruf immer unterschiedlich.
Uniforms
- Sind Inputvariablen für den Vertex Shader und dem Fragment Shader.
- Anders als bei den Attributes sind Uniforms konstant über einen Rendering Cycle. Z.B.: wird die Position einer Lichtquelle oft über Uniforms realisiert.
- Uniforms sind im Grunde globale Variablen die gesetzt werden bevor der Shader ausgeführt wird.
Textures
- Sind Arrays mit Daten auf welche das Shaderprogramm zugreifen kann.
- Bilddaten werden sehr häufig in Texturen gespeichert, aber Texturen sind im Grunde nur Daten und können auch andere Informationen enthalten als einfache Farbwerte eines Bildes.
Varyings
- Werden dazu verwendet um Daten vom Vertex Shader an den Fragment Shader zu übergeben.
- Abhängig davon, was gerendert werden soll - Punkte, Linien oder Dreiecke - werden die Werte die von einem Vertex Shader in einem Varying gesetzt wurden, bei der Ausführung des Fragmend Shaders anders interpoliert.
Rendering
- Unabhängig von der Komplexität und der Anzahl an Punkten die eine Fläche haben kann, werden Geometriedaten immer gleich behandelt.
- Es gibt zwei fundamentale Datentypen um ein 3D-Geometrieobjekt darzustellen:
- Vertices
- Indices
Vertices
- Sind Punkte, welche die Ecken eines 3D-Objekts definieren.
- Jeder Vertex besteht aus drei 32-bit-floats welche die x-, y- und z-Koordinaten des Vertexes darstellen.
- Ansammlungen von Vertexpunkten die ein 3D-Objekt darstellen, müssen in einem Vertexbuffer (VBO) abgelegt werden.
Indices
- Beschreiben, wie Vertexpunkte verbunden werden müssen, um daraus eine Fläche zu erstellen.
- Ansammlungen von Indices müssen in einem Indexbuffer (IBO) abgelegt werden.
Im nächsten Schritt werden wir unsere ersten Zeilen Code schreiben:
WebGL 2 Guide - #3 Erste Schritte
Comments
Post a Comment