Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

12
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie II Teil 1: Simulation und 3D- Programmierung WS 2010/2011 Dennis Kiewning Fortgeschrittene Techniken (750 – 755): Stereo-3D-Grafik - Raumaufteilung - Light-Mapping

description

Fortgeschrittene Techniken (750 – 755): Stereo-3D-Grafik - Raumaufteilung - Light-Mapping. Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof . Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie II Teil 1: Simulation und 3D-Programmierung - PowerPoint PPT Presentation

Transcript of Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Page 1: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Universität zu KölnInstitut für Historisch-Kulturwissenschaftliche InformationsverarbeitungProf. Dr. Manfred ThallerAM 3 Übung: Softwaretechnologie II Teil 1: Simulation und 3D-ProgrammierungWS 2010/2011

Dennis Kiewning

Fortgeschrittene Techniken (750 – 755):

Stereo-3D-Grafik - Raumaufteilung - Light-Mapping

Page 2: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Stereo-3D-Grafik 9.4

Prinzip:

• Trennen der Bilder : Zwei Bilder rendern

• Zwei Bilder mit Rot und Blau kombinieren: Rot/BlauFilter (Brille)

Vorteile:

• Kostengünstig• Funktioniert mit (fast) jeder Grafikkarte• Einfach zu implementieren

Nachteil:

• eine Farbe geht komplett verloren: - bei Rot-Blau: Grün - bei Rot-Grün: Blau

Page 3: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Implementierung:

• Render-State D3DRS_COLORWRITEENABLE kontrolliert, welche Farbkanäle beim Rendern geschrieben werden und welche nicht:

1) Szene beginnen und alle Puffer leeren

2) D3DRS_COLORWRITEENABLE D3DCOLORWRITEENABLE_RED

3) Die Szene von links rendern

4) Z- und Stencil-Buffer leeren

5) D3DRS_COLORWRITEENABLE D3DCOLORWRITEENABLE_BLUE

6) Die Szene von rechts rendern

7) Szene beenden und den Bildpuffer sichtbar machen

Stereo-3D-Grafik 9.4

Page 4: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Beispielprogramm:

• Galactica unterstützt 3D-Brillen:

#define _3D_GLASSES oben in die Datei GAME.CPP schreiben

Stereo-3D-Grafik 9.4

Page 5: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Raumaufteilung 9.5

• Bisher standen Spielfiguren und bewegliche Objekte im Mittelpunkt.

• Andere Spieltypen werden allerdings häufig durch ein statisches Objekt – den „Level“ – eingenommen.

Problem:

• Solche Objekte besitzen viel mehr Dreiecke als jedes andere Objekt.

Lösung:

• Rekursives Rendern!

Page 6: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Rekursives Rendern:

• Modell aufteilen und nur sichtbare Teile rendern: - BSP (Binary Space Partition)

- Generieren eines Octrees

Grundprinzip:

„Man hat den Level rekursiv unterteilt, und man kennt die Bounding-Box oder die Bounding-Sphere jedes einzelnen Teils (Knotens). Das Rendern erfolgt nun ebenfalls rekursiv.“

Raumaufteilung 9.5

Page 7: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

void RenderNode(Node* pNode) {

// Ist der Knoten sichtbar? if(tbBoxVisible(pNode, g_aViewFrustum)) {

// Ja, er ist sichtbar! // Wenn es ein Endknoten ist, rendern wir seine Dreiecke.

if(pNode->bIsLeaf) {

// Effekt starten // ... // Rendern g_pD3D->SetStreamSource(...); g_pD3D->SetIndices(...); g_pD3D->DrawPrimitive(...);

} else {

// Es ist kein Endknoten! // Nun rufen wir rekursiv die Unterknoten auf.

for(int i = 0; i < pNode->iNumChilds; i++) { // Unterknoten rendern RenderNode(pNode->apChild[i]); }

} } }

Raumaufteilung 9.5

Rekursives Rendern:

(Bounding-Box)

Page 8: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

PVS und Portale:

• Auch mit BSP-Trees oder Octrees muss die Grafikkarte immer noch viele „überflüssige“ Dreiecke rendern.

Lösung:

• PVS –Potencially Visible Set: Eine Liste, die alle Knoten eines Baums enthält, die potenziell sichtbar sind:

- Funktioniert bei Indoor-Levels - Türen die Räume verbinden = Portale

Raumaufteilung 9.5

Page 9: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Raumaufteilung 9.5

PVS und Portale:

• Erstellen eines neuen Sichtbereich: ein neues View-Frustum

• Vor dem Rendern eines Knotens prüfen, ob er sich im neu generierten Sichtbereich befindet.

Vorteile:

• Große Teile des Levels „wegcullen“

• Rendern dynamischer Objekte außerhalb des Sichtfelds sparen

Page 10: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Light-Mapping 9.5.3

Light-Mapping:

• Grundgedanke: Lichtquellen reduzieren

• Textur, die lediglich die Beleuchtung eines Dreiecks darstellt

• Diffuse und Lightmap werden über den Operator D3DTOP_MODULATE verbunden

Page 11: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Light-Mapping 9.5.3

Light-Maps generieren:

1) Lohnt es sich eine Light-Map anzufertigen?

2) Größe der Light-Map für jedes Dreieck festlegen: Light-Map-Texel durchsuchen und dessen Beleuchtung berechnen

Ray-Tracing (Radiosity)

3) Light-Maps in einer großen Textur zusammenfassen:verringert beim Rendern den Aufruf von SetTexture

Wichtig:

• Vertizes der Dreiecke brauchen jeweils zwei Texturkoordinatenpaare: Diffuse + Lightmap

Page 12: Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Die TriBase-Klasse tbOctree 9.5.4

Die TriBase-Klasse tbOctree:

• Übergabe einer Modelldatei

• Anschließende Umwandlung in einen BSP-Tree oder einen Octree

• tbOctree-Klasse zum Rendern des Octrees verwenden