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