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

Popular posts from this blog

[Python] Machine Learning Intro #1 - Hello World

[Python] Passwort cracker for Zip-archives

WebGL 2 Guide - #1 Einführung