3D Spieleprogrammierung

Werbung
3D Spieleprogrammierung
Grundlegende
Algorithmen
©2008 by Martin Faust
Übersicht
Game­Loop
Spielarchitektur
Aufäumen von Strukturen
Vorbereiten für spätere Aufgaben
Bewegungen
Zeitmessung
Zeitunabhängigkeit
GameLoop
Game­Engine
©2008 by Martin Faust
Game-Engine
Netzwerk
Physik
Objekte
Verwalten von
Logik
Sound
Grafik
©2008 by Martin Faust
Game-Loop
Torus
Tempest
©2008 by Martin Faust
Zentrales Element im Spiel!
©2008 by Martin Faust
Game-Loop Aufgaben
Game Logic
Player Update
World Update
Passive elements
Logic­based elements
AI based elements
Presentation
World
NPC
Player
Aus Daniel Sánchez­Crespo Dalmau. Core Techniques and Algorithms in Game Programming. New Riders, 2003
©2008 by Martin Faust
Grafik Subsystem Pipeline
Anwendung
Update aller beweglichen Objekte
Anwendung
(APP)
Fahrzeuge, Fußgänger, Kamera, ...
Verwaltet den Szenengraph
Sichtbarkeit
Sichtbarkeit
(CULL)
Ermittlung der sichtbaren Objekte
→ Räumliche Datenstrukturen
→ Frustum Culling
Zeichnen
(DRAW)
→ Occlusion
Zeichnen
Zeichnen aller sichtbaren Objekte
Material → Shader
©2008 by Martin Faust
Szenengraph
Verwaltet die Objekte in der Szene
Eigentlich kein Graph, sondern ein Baum
Hat genau einen Root­Knoten
Verschiedene Ebenen
Organisation von 3D Szenen
High­Level Objekte
©2008 by Martin Faust
Low Level vs. High Level
Low
High
©2008 by Martin Faust
Szenengraph
C++ Code Ahead!
Beispiel
igModel *pModel = igModel::Load(“gelände.i3b”, false);
igObject *pObject = new igObject(pModel, igObjectUseModel);
pObject­>AddToScene(iScene::GetScene(0));
igSwitchPart * pSwitch = (igSwitchPart *) pObject­>GetPart("Bahnschranke");
Computergrafik und Bildverarbeitung, Vieweg S. 296
©2008 by Martin Faust
infinity
Copyright 1999­2001 by Martin Faust
Features
SGI Onyx2/3, 16 CPUs, 4 Graphic Pipes
Indoor/Outdoor Engine mit dynamischen Portalen
Radar­ und Sensorsimulation
Large Area Database Management
Fade LOD
Irix, Linux, BeOS Unterstützung
...
Paralleles Prozessmodell (N­CPUs)
Multiprozeß und nicht Multithreaded
APP || CULL || DRAW || DBASE
©2008 by Martin Faust
ELTAM
„Elektronische Taktiksimulator für Mechanisierte Verbände“ http://www.he.admin.ch/internet/heer/de/home/verbaende/pzbr11/mittel/pzgrenbat28/berichte_pz_gren_bat_28/eltam_2005_2/eltam_2005_teile.NewWindow.parsys.0017.2.Preview.html
©2008 by Martin Faust
High Level Szenengraph
Vorteile
Der Benutzer sieht die interne Repräsentation nicht mehr
Viele Aspekte können automatisiert werden
Einfachere Synchronisation über mehrere PCs
©2008 by Martin Faust
Grafik Subsystem: APP
BeginFrame
Input einlesen
Update aller Objekte in der Szene: z.B. foreach(Object obj in Scene) obj.Update(dt);
NPCs (AI)
EndFrame
Ruft automatisch Culling und anschließendes Drawing auf
©2008 by Martin Faust
Grafik Subsystem: CULL
Ermitteln aller sichtbaren Objekte
Traversierung des Szenengraphen
Frustum­Culling
Level of Detail ermitteln
©2008 by Martin Faust
Bounding Spheres
Ein raumlich organisierter Szenengraph. Jedem Knoten ist eine Hülle (Kugeloberfläche) zugeordnet.
Computergrafik und Bildverarbeitung, Vieweg S. 297
©2008 by Martin Faust
Frustum Culling
Das View­Frustum wird durch den Sichtwinkel (engl. Field of view, fov) sowie die near/far plane bestimmt
Culling geschieht an den 6 Ebenen des Frustums
©2008 by Martin Faust
Culling von Kugeln
Distanz eines Punktes P zu einer Ebene E ist definiert als
distance = (P­EP)*EN
Damit können wir 6 Distanzen ermitteln
d0 = (BSphere.Pos ­ Camera.Pos) * Frustum.N[front];
d1 = (BSphere.Pos ­ Camera.Pos) * Frustum.N[back];
d2 = (BSphere.Pos ­ Camera.Pos) * Frustum.N[up];
d3 = (BSphere.Pos ­ Camera.Pos) * Frustum.N[down];
d4 = (BSphere.Pos ­ Camera.Pos) * Frustum.N[left];
d5 = (BSphere.Pos ­ Camera.Pos) * Frustum.N[right];
©2008 by Martin Faust
Culling
Komplett sichtbar, wenn
d0 ≥ Camera.Near+BSphere.Radius
BSphere.Radius­d1 ≤ Camera.Far
d2 ≥ BSphere.Radius
d3 ≥ BSphere.Radius
d4 ≥ BSphere.Radius d5 ≥ BSphere.Radius
Teilweise, wenn
d0 > Camera.Near­BSphere.Radius
­BSphere.Radius­d1 < Camera.Far
d2 > ­BSphere.Radius
d3 > ­BSphere.Radius
d4 > ­BSphere.Radius d5 > ­BSphere.Radius
©2008 by Martin Faust
Frustum Culling
Bounding Volumen Hierarchien ermöglichen effizientes Culling
Computergrafik und Bildverarbeitung, Vieweg S. 302
©2008 by Martin Faust
Level of Detail
Wird beim Traversal ermittelt
Reduziert die Geometrielast für weiter entfernte Objekte
Seitenbemerkung
Sichtweite für Ground Warfare Simulator ist max. 24Km
Computergrafik und Bildverarbeitung, Vieweg S. 311
©2008 by Martin Faust
Fade LOD
Fade LOD
Verhindern von Popup zwischen LOD Stufen
Continuous LOD
Meistens bei Gelände
Keine festen Stufen, sondern permanentes anpassen der Geometrie
FadeLOD, infinity
©2008 by Martin Faust
Grafik Subsystem: DRAW
Sichtbare Objekte zeichnen
©2008 by Martin Faust
Prozeßmodelle
Marble Madness
Neverball
©2008 by Martin Faust
Prozeßmodelle
Singlethreaded
APP+CULL+DRAW
APP
CULL
DRAW
APP
CULL
DRAW
APP
CULL
Multithreaded
Variante 1: (APP+CULL) || DRAW
APP
CULL
APP
CULL
DRAW
DRAW
DRAW
Variante 2: APP || (CULL+DRAW)
Variante 3: APP || CULL || DRAW
APP
APP
APP
CULL
CULL
CULL
DRAW
DRAW
DRAW
©2008 by Martin Faust
Prozeßmodelle
Was gewinnt man?
Entzerrung der Zeitsituation
Mehr Berechnungen sind möglich
Bessere Ausnutzung der CPU
Beim Singlethreaded Modell hat man für App, Cull und Draw zusammen eine Zeiteinheit, d.h. TApp+TCull+TDraw < TFrame
Beim Multithreaded Modell in der Variante 3 z.B.
TApp < TFrame
TCull < TFrame
TDraw < TFrame
©2008 by Martin Faust
Content
Virus, Amiga Version
©2008 by Martin Faust
Dateiformate
Unterschied zwischen Modellierung und Echtzeit
Modellierung/Austausch
z.B. Collada
Echtzeit
Optimiert für schnelles Parsen
Optimiert für schnelles Anzeigen
z.B. TerraPage
©2008 by Martin Faust
Herunterladen