vorlesung „computergraphik 2“ d. grüntjens folien ...cg/ss13/cg2/01_3d engines.pdf · u n i v...

63
U N I V E R S I T Ä T KOBLENZ · LANDAU (1) 3D Engines Vorlesung „Computergraphik 2“ D. Grüntjens Folien: Stefan Rilling / D. Grüntjens

Upload: others

Post on 02-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

(1) 3D Engines

Vorlesung„Computergraphik 2“

D. GrüntjensFolien: Stefan Rilling / D. Grüntjens

Page 2: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Organisatorisches CG2 und CG3 werden im selben Semester

hintereinander gelesen CG 2 vom 18.04.2012 bis 13.06.2013 CG 3 vom 14.06.2012 bis 13.07.2013

Lehrveranstaltungen Vorlesungen: Do 10-12 Uhr in E313, Fr 12-14 Uhr in E114 Übung: Mo 8-10 Uhr in G310

Klausuren CG2 13.06.2013, 10-12 Uhr in E313 CG3 25.07.2013, 10-12 Uhr in E313

Page 3: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Organisatorisches Übungsbetrieb startet am 22.04.2013

Alle Daten, Materialien etc. unter

Veranstaltungsseite CG2 und CG3

Page 4: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

OrganisatorischesÜbersicht

18.04.2013 01. 3D Engines 19.04.2013 02. Hierarchien 25.04.2013 03. Raytracing-Beschleunigungen 26.04.2013 04. Beleuchtung 02.05.2013 05. Radiosity 03.05.2013 06. Buffer 09.05.2013 Christi Himmelfahrt10.05.2013 07. GPU 1 11.05.2013 08. GPU 2

Page 5: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

OrganisatorischesÜbersicht

17.05.2013 09. GPU 3 23.05.2013 Pfingsten23.05.2013 Pfingsten 30.05.2013 Fronleichnam31.05.2013 10. GPU 4 06.06.2013 11. GPU 5 07.06.2013 Wiederholung 13.06.2012 Klausur

Page 6: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Computergrafik 1 war ja ganz nett... Immerhin können wir jetzt einfache Sachen rendern.

Page 7: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Aber wie kriegt man denn nun so etwas hin?

Page 8: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

CG2 - Heute: 3D Engines

Top down: Zuerst das „große Ganze“, dann die Details im Laufe der Vorlesung.

Page 9: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine (engl. Maschine, Motor, Triebwerk)

Eine 3D Engine ist eine Softwarekomponente zur Darstellung von 3D Graphik (Renderingsystem)

D. h. eine 3D Engine ist eine Sammlung von Klassen und Funktionen

Neuerer Begriff für (szenegraphbasierte) Renderingsysteme

Eine 3D Engine ist keine Applikation

Eine 3D Engine ist keine Spielengine

Page 10: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D-Engine: Einordnung

Treiber

3D-Engine

Programmierer

Page 11: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D-Engine: Einordnung Low Level Graphik APIs ungeeignet für die Erstellung

komplexer Welten Einfaches Beispiel: Drehender Würfel mit Textur in OpenGL

• Wie lade ich die Textur?• Wie repräsentiere ich den Würfel?• Wie repräsentiere ich die Rotation?

Abstraktion der Low-Level Graphik-Schnittstelle Objektorientierte Datenrepräsentation

Daten werden mit Semantik versehen

Page 12: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D-Engine: Abstraktion Bsp. Definition einer Lichtquelle in OpenGL

glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);

glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, specular);

glLightfv(GL_LIGHT0, GL_POSITION, position);

Page 13: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D-Engine: Abstraktion Bsp. Definition einer Lichtquelle im Idealfall (Pseudocode)

Objektorientierte Definition Daten haben die erwartete Bedeutung

Entsprechende Low-Level Funktionalität wird gekapselt

LightSource l;l.setAmbientColor(ambient);l.setDiffuseColor(diffuse);l.setPosition(position);l.setMode(SPOT_LIGHT);

Page 14: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D-Engine: Semantik Bsp. Low Level Graphik Schnittstelle: Keine Zuordnung der

Daten

Applikation•Raum

•Lampe•Stuhl•Tisch

•Festmahl

3D-Engine•3D Objekt

•Geometrie•Materialen•Lichtquellen

•Punkt•Spot•gerichtet

Low Level API•Dreiecke

•Eckpunkte•Material State•Texturobjekte•Lichtquellen•Transformationsmatritzen

Semantik & Abstraktion wird mehr

Page 15: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D-Engine: Semantik

Mit einer 3D-Engine wird es einfacher, große Systeme zu programmieren.

Aber: Immer, wenn Funktionalität gekapselt wird, wird es schwieriger, Spezialwünsche (z. B. komplett neue

Verfahren) zu implementieren.

Page 16: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Grundsätzlicher Aufbau

Core System

Resource Management Renderer Szenen

Management

Schauen wir uns diese Teile im Detail an...

Page 17: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Szenen Management

Erzeugen & Verwalten von 3D Objekten Verwaltung von Positionen und Orientierungen aller

Objekte (Szenengraph) Bestimmt, welche Daten an den Renderer geschickt

werden Culling Operationen Paging & Streaming großer Datenmengen Level of Detail

Core System

Resource Management Renderer

Szenen Management

Page 18: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 18 -

Traforechter Arm

glTranslatef (1.0, 0.0, 0.0);glScalef (2.0, 0.4, 1.0);

Oberarm

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glTranslatef (2.0, 0.0, 0.0);glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);glScalef (1.5, 0.4, 1.0);

Unterarm

Rechter Arm

Lokale Koordi-natensysteme

Page 19: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 19 -

Traforechter Arm

glTranslatef (1.0, 0.0, 0.0);glScalef (2.0, 0.4, 1.0);

Oberarm

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glTranslatef (2.0, 0.0, 0.0);glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);glScalef (1.5, 0.4, 1.0);

Unterarm

Rechter Arm

Welt-koordinaten

Page 20: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 20 -

Beispiel CodeTraforechter Arm

glTranslatef (1.0, 0.0, 0.0);glScalef (2.0, 0.4, 1.0);2.0, 0.4, 1.0);

Oberarm

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glTranslatef (2.0, 0.0, 0.0);glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);glScalef (1.5, 0.4, 1.0);1.5, 0.4, 1.0);

Unterarm

Rechter Arm glClear (GL_COLOR_BUFFER_BIT); glColor3f(0,0,0); glLoadIdentity(); gluLookAt( 0,0,10, 0,0,0, 0,1,0);

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glPushMatrix(); glTranslatef (1.0, 0.0, 0.0); glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix();

glTranslatef (2.0, 0.0, 0.0); glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0); glScalef (1.5, 0.4, 1.0); glutWireCube (1.0); glFlush();();

Page 21: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

View Frustum Culling

Page 22: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Räumliche Aufteilung

2 3

4

1

5 6

7 8

9

Scene

City

OfficeChurch House

House

FactoryTree Tree

Tree

Tree Tree

Tree

1 Tile 2 Tile 3 Tile 4 Tile 5 Tile 6 Tile 7 Tile 8 Tile 9 Tile

City

Trees Pine Buildings

SCS SCS

OfficeChurch

HouseHouse

Factory

Tree

Wichtig ist, daß die Hierarchie der Szene eine räumliche Aufteilung aufweist

Schlechte räuml. Aufteilung

Gute räuml. Aufteilung (wichtig fürCullingverfahren - z. B. ViewFrustum Culling)

Page 23: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Bounding Volume Hierarchie Für jeden Gruppenknoten

wird auch ein Bounding Volume berechnet und abgespeichert

Häufig verwendete Möglichkeit: Axis-Aligned Bounding Box

Anwendung View-Frustum Culling Strahltests (Selektion etc.)

2 3

4

1

5 6

7 8

9

City

Church House

Page 24: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiel: Octrees Intelligente Szenenaufteilung je nach Dichte von

Objekten

Page 25: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Szenen Management

Dynamische Objekte Müssen bei Bewegung durch die Welt neu in den Szenegraph

einsortiert werden Bounding Volumes müssen aktualisiert werden

Räumliche Aufteilung des Szenegraphen Quadtrees, Qctrees, BSP, etc. Je nach Art der virtuellen Welt (Gebäude, Landschaften,

Städte)

Core System

Resource Management Renderer

Szenen Management

Page 26: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

State Change Minimierung Beispiel: Rendern von 100 Autos 3 Materialien Pro Auto

Metall Gummi Glas

Hintereinander rendern 300 State Changes

Sortieren nach Materialien 3 State Changes

Szenengraphen nach View Frustum Culling umsortieren, um State Changes zu minimieren: Render Tree erstellen

View Frustum Culling und Render Tree: CPU!

Page 27: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Noch mehr Culling Alles, was nicht sichtbar ist, muss nicht gezeichnet

werden View-Frustum-Culling als erster Schritt Innerhalb des View-Frustums können sich Objekte

gegenseitig verdecken Occlusion Culling

Page 28: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Und noch mehr Culling Backface Culling: Bei massiven Objekten müssen nur

die Vorderseiten gerendert werden Backface: Jedes Polygon, dessen Normale von der

Kamera wegzeigt (Prüfung durch Skalarprodukt)

Beispiel: Hintere Seiten von Würfeln

Page 29: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Core System

Des Pudels Kern Grundlegende Elemente:

Low-Level Funktionen und Datenstrukturen Mathematik System Objektsystem

Core System

Resource Management Renderer Szenen

Management

Low-Level Funktionen und Datenstrukturen Mathematiksystem Objektsystem

Page 30: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Core System

Low-Level Funktionen und Datenstrukturen Container (vector, Listen, assoziative Arrays etc.)

• Vgl. STL Timer Funktionalität File I/O Speicherverwaltung (C++)

• Wird normal nicht direkt benutzt • Komfort und Sicherheit für den Programmierer

Core System

Resource Management Renderer Szenen

Management

Low-Level Funktionen und Datenstrukturen Mathematiksystem Objektsystem

Page 31: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Core System

Mathematiksystem für grafische Anwendungen Vektor- und Matrix-Algebra

• Operatoren (+, -, *, /, •,×)• Normalisieren, invertieren etc.

Funktionen (Trigonometrie etc.), Konstanten Rotationen und Orientierungen

• Rotationsmatritzen, Quaternionen

Core System

Resource Management Renderer Szenen

Management

Low-Level Funktionen und Datenstrukturen Mathematiksystem Objektsystem

Page 32: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Quaternionen und Rotationen Quaternionen

4-Tupel reeller Zahlen (w, x, y, z) Mathematische Operatoren +,-,*,/ und Betrag

Beschreibung von Rotationen Quaternionen mit Länge 1 Achsen – Winkel Repräsentation

Aus Sicht des Programmierers: Angabe von Achse und Winkel zur Beschreibung

einer Rotation

Achsen-Winkel Repräsentation

Typisches Codefragment (rotiere 45° um Y-Achse):

Quaternion q = Quaternion(45.0, Vector(0.0, 1.0, 0.0));

Page 33: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Core System

Objektsystem Runtime type information (RTTI)

• Identifikation des Objekttyps• Identifikation der Basisklasse

Objektidentifikation Referenz-Management und Smart Pointer Streaming von Daten Serialisierung (Speichern & Laden von Objekten inkl.

kompletten Zustand)

Core System

Resource Management Renderer Szenen

Management

Low-Level Funktionen und Datenstrukturen Mathematiksystem Objektsystem

Page 34: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Runtime Type Information Identifikation des Objekttyps zur Laufzeit des

Programms Wichtig bei Typkonvertierungen in

Vererbungshierarchien Beispiel: Sich verändernder Szenegraph (Pseudocode,

an C++ angelehnt)

Node

TransformsetPosition()

Geometry

Node *n0 = new Transform();Node *n1 = new Geometry();

If(n0->type == „Transform“){Transform *t = (Transform *)n0;t->setPosition(23.0, 23.0, 23.0);

}If(n1->type == „Transform“){

Transform *t = (Transform *)n1;t->setPosition(6.0, 6.0, 6.0);

}sichere Typkonvertierung

Page 35: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Runtime Type Information Üblicherweise einfaches Abspeichern der Klasse Z. B. bei Szenengraphen: Wichtig, wenn man nicht

weiß, welche Information ein Node speichert (Transformation, Geometrie)

Bei dynamischen Szenen (d. h. der Szenengraph wird dynamisch zu Laufzeit erstellt) kann man vorher nicht wissen, welche Information in einem Node steht

Alternative zu RTTI: Weitere Klasseninformationen wie Signaturen sind bekanntErmöglicht auch Strukturänderungen des Programms zur Laufzeit (durch das Programm)Häufig bei Sprachen in VMs: Z. B. Java

Page 36: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Referenz-Management und Smart Pointer Gemeinsame Benutzung von Daten

Große Datenmengen werden nur einmal geladen • Geometrie• Texturen

Referenzen an verschiedenen Stellen im Programm

Problem: Löschen von Daten Daten werden an anderer Stelle referenziert Absturz Verantwortung beim Programmierer Menschliches Versagen

Lösung: Automatisierung Objektsystem speichert Anzahl der Referenzen auf ein Objekt

• Neue Refernz Anzahl inkrementieren• Versuch, Objekt zu löschen Anzahl dekrementieren• Keine Referenz auf das Objekt Objekt kann gelöscht

werden

Page 37: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Referenz-Management und Smart Pointer

Smart Pointer: Erweiterung einfacher Zeiger

Referenzzählende Zeiger

• Bei Zuweisung einer Objektreferenz an die (smarte) Zeigervariable wird der Referenzzähler beim Objekt erhöht

• Objekte müssen korrekt initialisiert werden Erzeugung durch Objektsystem

Iteratoren sind Smart PointerZum Durchlaufen von ContainernZeigerarithmetik, dereferenzierenRandbehandlungBsp.: STL

Page 38: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Referenz-Management und Smart Pointer Pseudo-Code Beispiel: Smart Pointer und Objektsystem

SmartPointer p = ObjektSystem.erzeugeObjekt(); //1 ReferenzSmartPointer p1 = p; //2 Referenzen

p->machWas();p = NULL; //1 Referenz

Wird in praktisch allen 3D Engines verwendet Funktioniert wegen RTTI (Identifikation über Objektsystem), da

das Objektsystem so weiß, wie es ein Objekt intern verwalten muss

Realisierung in C++ Templates (Gerüste für generische Klassen, Methoden...) Typedefs (Aliasse für Datentypen) Überladung des “=“-Operators (in C++ können auch Operatoren überladen werden)

Page 39: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Resource Management

Laden & verwalten digitaler Inhalte 3D Modelle Animationen Texturen Shader

Autorensystem Exporter für Modellierungswerkzeuge

Core System

Resource Management Renderer Szenen

Management

Page 40: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Bringt die virtuelle Welt auf den Bildschirm Setzen entsprechender Render-States der zugrundeliegenden

Graphik API Datenstrukturen für darstellbare Objekte

• Transfer der 3D Modelle zur Graphikkarte Darstellung Effekte & Materialien (z.B. Schatten) Erzeugen & Verwalten von Fenstern, Viewports & Kameras

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 41: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Objekte Sammelbegriff für darstellbare Objekte Beinhaltet Daten, die einer bestimmten Position und

Orientierung zugeordnet sind Geometriedaten Material,Texturen, Shader Position & Orientierung in der Welt

Beispiel: Auto mit 4 drehenden Rädern 5 verschiedene 3D Objekte

• 4 Räder• 1 Karosserie

Geometrie der Räder kann gemeinsam verwendet werden 3D Engines bieten in der Regel eigenen Datentyp an

Wird oft als Entity bezeichnet

Page 42: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Datenstrukturen für darstellbare Objekte Vertices, Normalen, Texturkoordinaten

• Dreiecke als Basis-Geometrieprimitiv• Indizierte Vertexlisten als Basis-Datenstruktur zur

Geometrieverwaltung Zuordnung von Materialien & Texturen Zuordnung von Shadern (Programme, die direkt auf der

Grafikkarte laufen)

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 43: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Speichern von 3D Modellen

Wiederholung von Vertices 1 Vertex = 3 Float Variablen = 12 Byte Speicher wird verschwendet

• Speicher ist doch nicht mehr teuer… Ja, aber: Daten müssen transferiert werden

• Arbeitsspeicher Grafikkartenspeicher

1Einfache Vertexliste:V0 V3 V1 V3 V4 V1 V1 V4 V2 …

1

2311

2 3

Page 44: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Indizierte Vertexlisten

Liste von Eckpunkten Liste von Indizes Dreiecke werden durch Indizes in der Eckpunktliste

definiert

V0 V1 V2 V3 V4 V5 V6 V7 V8

Vertexliste:

Indexliste0 3 1 3 4 1 1 4 2 ...

1 2 3

231

0 1 2 3 4 5 6 7 8Index

Page 45: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Indizierte Vertexlisten

Geringerer Speicherbedarf Normalen und Texturkoordinaten in extra Listen Optimal für Graphikhardware

V0 V1 V2 V3 V4 V5 V6 V7 V8

Vertexliste:

Indexliste0 3 1 3 4 1 1 4 2 ...

231

1 2 3

0 1 2 3 4 5 6 7 8Index

Page 46: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Ablauf Pro Frame: Für jedes Objekt:

• Position und Orientierung setzen (Szenen Management)• Render States für Materialien, Texturen Shader etc. setzen• Objekt zeichen

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 47: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Wechseln von Render-States kann teuer werden Minimierung durch Sortieren der Objekte

Sortierung • Texturen• Materialien• Transparenzen

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 48: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

State Change Minimierung Beispiel: Rendern von 100 Autos 3 Materialien Pro Auto

Metall Gummi Glas

Hintereinander rendern 300 State Changes

Sortieren nach Materialien 3 State Changes

Page 49: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

State Change Minimierung

Schlechte räuml. Aufteilung

Gute räuml. Aufteilung

Umsortierung kurz vor dem Rendern in Rendertree: Möglichst wenige State Changes

Der entstehende Rendertree enthält dann alle Objekte, dietatsächlich gernedert werden und ist auf State Change Minimierung optimiert

Page 50: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Transparenzen Achtung: Bei Transparenzen muss sortiert werden Erst alle nicht-transparenten Objekte rendern Dann transparente Objekte von hinten nach vorne

rendern (Da ein transparentes Objekt auch hinter einem weiteren transparenten Objekt sein kann)

Deshalb sind transparente Objekte rechenintensiv!

Page 51: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Fenster und Viewport Ausgabe des Renderers muss irgendwann in einem Fenster

landen (Renderkontext) Anbindung an Windowing System des Betriebssystems Erzeugen & Verwaltung mehrerer Viewports

• Zuweisung verschiedener virtueller Kameras an Viewport• Bsp.: Rendern von Übersichtskarten

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 52: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Render Targets Die Ausgabe des Renderers muss nicht zwangsläufig im

Framebuffer landen Render to Texture Grundlage für viele Effekte und Techniken (z.B. Glow Effekte)

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 53: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engine: Renderer

Render Passes Viele Effekte lassen sich nicht mit einem Render-Schritt

realisieren• Ausgabe eines Render-Schrittes dient als Eingabe des

nächsten • Ausgabe mehrerer Render Schritte werden miteinander

kombiniert (z.B. Non Photorealistic Rendering)

Core System

Resource Management

Renderer Szenen ManagementFenster &

ViewportDatenstrukturen

Passes & Targets

Page 54: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiele Passes & Targets

Multi-Pass Silhoutte Rendering•Je ein Render-Pass für Front- und Backfaces

Glow Effekt•Rendern in Textur•Weichzeichner auf Textur•Mehrere Passes

Page 55: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

3D Engines: Auswahl

Liste mit Sicherheit sehr unvollständig Desktop-Bereich: OGRE & IRRLICHT VR-Bereich: OpenSG & Open Inventor

Page 56: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiel: Ogre 3DObject Oriented Graphics Rendering Engine

Auch schon einige kommerzielle Spiele

Page 57: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiel: Ogre 3DKommerzielle Spiele

Book of Unwritten Tales

Torchlight

Ceville

Page 58: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Ogre 3D Features:

Nutzt OpenGL oder DirectX als Renderer Szenengraphbasiertes System Kommt mit allen vorher genannten Komponenten einer 3D

Engine Sehr viele Effekte wie z. B. Schatten out-of-the-box Optimierung für verschiedene Szenen (Außenbereiche,

Portalverbundene Szenen, Innenbereiche...) In Kombination mit Blender als Modellierungstool ergibt sich

eine kostenfreie und mächtige Kombination

Wird neben OpenSG für viele Projekte in der AG Computergrafik eingesetzt (immer mehr Ogre 3D)

Recht schnell sehr spannende Ergebnisse möglich

Page 59: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiel: Ogre 3D Aufbau von Ogre 3D

Page 60: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiel: Ogre 3D Herunterladbar unter

http://www.ogre3d.org/download/sdk Schneller Einstieg:

Visual Studio • Über Microsoft Dreamspark:

http://www.uni-koblenz-landau.de/koblenz/GHRKO/software/msdnaa/msdnaa-ms-academic-alliance-fb4 Ogre SDK Application Wizard für Visual Studio (keine nervige Einstellerei

des Linkers & der Includes etc.) Gute Dokumentation

jede Menge Tutorials (Achtung: teilweise nicht ganz aktuell) http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Installing+the+Ogre+SDK

Page 61: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Beispiel: Ogre 3D

Guter Einstieg für eigene Spiele & Abschlussarbeiten :-) Tutorials durchprogrammieren Erste eigene Applikationen schreiben (z. B. ein kleines Spiel) Arbeiten „wie die Profis“ (sind wir auch!)

Page 62: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Literatur David H. Eberly: 3D Game Engine Architecture

Page 63: Vorlesung „Computergraphik 2“ D. Grüntjens Folien ...cg/ss13/cg2/01_3D Engines.pdf · U N I V E R S I T Ä T KOBLENZ · LANDAU Organisatorisches CG2 und CG3 werden im selben

U N I V E R S I T Ä TKOBLENZ · LANDAU

Die CG2...

Details zu all den angesprochenen Komponenten Erweiterte Algorithmen, Technologien etc. OpenGL 3.3!

Hoffentlich: Jede Menge Spaß!