Heute geht es viel um Spiele. Denn anscheinend sind diese fast das Einzige, das Xyrill und ttimeless einfällt, wenn es um 3D-Grafik geht.
Allgemeiner dreht sich diese Folge darum, was es alles braucht, um Körper in virtuellen Welten darzustellen.
Der Abschluss der vierteiligen Reihe über Grafik, und was dazu notwendig ist.
Shownotes
Vergleich zu 2D-Desktop-Grafik (STP008)
Zeichenreihenfolge ist nicht so offensichtlich (Was ist vorne? Was ist hinten?)höherer Anspruch an Realismus: dynamische Beleuchtung, Texturierung, etc.Randbemerkung: auch 2D-Spiele werden heute meist in einer 3D-Szene aufgebautGrundeinheit für 3D-Modelle: nicht der Pixel, sondern das Polygon (deswegen kommen wir um Fließkommazahlen nicht herum)Vorbemerkungen zu den folgenden Schritten:
all dies passiert für jedes Einzelbild von vorne (also bei 60Hz 60-mal pro Sekunde)zur Illustration verlinken wir auf Beispielbilder aus den Übungsunterlagen für einen Kurs in 3D-Rendering-GrundlagenSchritt 1: 3D-Modell mit Polygonen
Polygon heißt wörtlich "Vieleck", aber 3D-Modelle bestehen meist nur aus DreieckenPolygone mit vier und mehr Ecken können mittels Triangulation in Dreiecke zerlegt werdenDarstellung eines 3D-Modells als Gitternetzgrundsätzlich ein Paar aus Blickpunkt und Blickrichtung, aber mit einigen weiteren Parameternmathematische Grundlage: QuaternionenSichtfeld (Field of View): beim Menschen 130°; bei Videospielen meist weniger, je nachdem, wieviel Platz der Bildschirm im Sichtfeld einnimmt (z.B. 90° am PC, 60° an Konsolen)Schritt 3: Ausmalen der Polygone (Rasterisierung)
Backface Culling (Rückseiten-Auslese): wir werfen alle Polygone weg, die von uns wegzeigenBeispiel mit ausgemalten Polygonen nach Backface CullingZ-Buffer: wenn wir Polygone ausmalen, dann malen wir nur die Pixel aus, bei denen wir nicht schon Polygone gemalt haben, die näher an der Kamera dran sindBeispiel mit ausgemalten Polygonen unter Verwendung des Z-Buffersbis jetzt war jedes Polygon einfarbig, jetzt kleben wir Bilder auf (analog zu Modellbausätzen)in der Praxis ein großes Bild für das ganze Modelljede Ecke jedes Polygons wird zu einem Punkt in der Textur zugeordnetBeispiel mit Polygonen, die mit ihrer Textur ausgemalt sindEinwurf: Was unterscheidet einen Grafikprozessor (GPU) von einem Hauptprozessor (CPU)?
CPU-Kerne führen einzelne Befehle auf einzelnen Daten ausGPU führt einzelne Befehle auf vielen Daten gleichzeitig aus, z.B. Rasterisierung von 10000 Polygonen gleichzeitig oder Z-Buffer-Prüfung für 10000 Pixel gleichzeitigdadurch auch für andere massiv parallelisierbare Operationen interessant ("GPGPU", General Purpose GPU), z.B. wissenschaftliche Simulationen, maschinelles Lernen, Passwortknackenbis jetzt haben wir die Fixed Function Pipeline beschrieben, eine im GPU-Treiber fest vorgegebene Kette von Rendering-Schrittenneuere GPU (seit den frühen 2000ern) erlauben das Einbetten von eigenen Programmen (Shadern) in die PipelineVertex Shader: wird einmal pro Vertex (Ecke eines Polygons) aufgerufen, um die 2D-Position auf dem Bildschirm zu berechnen (ansonsten normale Berechnung anhand der konfigurierten Kameraposition)Fragment Shader: wird einmal pro Pixel aufgerufen, um gegebenenfalls die Farbe des Pixels zu modifizierenBeispiel eines Fragment-Shaders, der eine Farbtextur auf 6 feste Farbstufen reduziertbei traditionallen 2D-Spielen mit Sprites war Beleuchtung meist global (z.B. jedes Objekt hat 2 Sprites, einmal für dunkle und einmal für helle Szenen)dynamische Beleuchtung: heute meist als Teil des Fragment ShadersBeispiel: Phong's Approximation einer natürlichen BeleuchtungAnteil: ambiente Beleuchtung (überall gleich stark, Grundausleuchtung wie in einem Fernsehstudio)Anteil: diffuse Beleuchtung (abhängig davon, wie sehr die beleuchtete Fläche zur Lichtquelle hingewendet ist)Anteil: spekulare Beleuchtung (Glänzen; stark überbetont auf Flächen, die fast exakt zur Lichtquelle hingewendet sind)es gibt noch so viel mehr: Kantenglättung (Antialiasing), lineares und anisotropisches Filtern, Normal Mapping, Raytracing