Game Development 2 Flashcards
Welche Faktoren beeinflussen Performance bei Spielen?
Hardware
Software Architektur (Code, Datenstrukturen, Algorithmen)
Grafikqualität (Auflösung, Texturen, Shader…)
Physikkomplexität (Kollisionserkennung, Rigid Body Dynamiken, Partikel)
AI Komplexität (Pathfinding, Decision Making, Behaviour Trees)
Netzwerklatenz (Ping, packet loss, Bandbreite)
Was sind übliche Performance Bottlenecks bei Spielen?
CPU
GPU
Memory / Speicher
Netzwerk
Was ist Instrumentation?
Instrumentation ist das Hinzufügen von Code zu einem Programm, um Daten über die Exekution zu sammeln
Was ist Profiling?
Profiling ist die Analyse von Daten, die gesammelt worden sind durch Instrumentation
Was ist Scripting?
Beim Scripting wird “externer” Code entgegengenommen von der Engine (meist in einer anderen Programmiersprache - Lua) - der geschriebene Core liegt außerhalb vom “Core” - wir haben extern C verwendet, damit der Compiler versteht, dass der “externe” Code dann C-Code sein soll
Teile des Codes werden ausgelagert in eine Sprache, die nicht kompiliert werden muss (erleichtert Workflow)
Was sind Vorteile von Scripting?
Interpretation passiert durch virtuelle Maschine und Code muss nicht kompiliert werden
Schnelle Iterationen (Script Updates “on the fly”)
Lightweight
Was sind Nachteile von Scripting?
Ressourcen Ineffizienz - langsamer Speicherzugang
Laufzeit Geschwindigkeit - Laufzeit ist langsam, Wechsel zwischen nativem Code und Scripting ebenso langsam
Daten Verifizierung - kein Compiler oder Linker um auf Fehler zu prüfen, bedeutet, dass Fehler nur bei Laufzeit sichtbar sind
Wie kann man Scripting am besten debuggen?
Caveman Debugging
Konsolenoutput
IDE der Scripting Sprache kann helfen
Externer Debugger
Wie viele Threads sollte man verwenden?
Regel: Nicht mehr als einen CPU-intensiven Thread pro Core
3 - 6 bei Xbox
1 - 16 am PC (je nach Hardware)
Was ist der Current State-of-the-Art bei Multithreading?
Job-Systeme
Diese arbeiten mit Pools von Threads - man kann Jobs queuen (worker threads) und Threads lassen Jobs gleichzeitig laufen
Welche Kriterien müssen Jobs erfüllen?
1) Müssen in Isolation ausgeführt werden können - wenig Daten sharing und unabhängig von anderen Jobs sein
2) Jobs müssen self-contained sein - selbst hinter sich aufräumen
3) Jobs können sehr klein sein - hunderte Jobs pro Frame
Was ist Frame-centric Design?
Beim Frame-zentrierten Design läuft jede Stage unabhängig von den andere (keine Synchronisation notwendig), eine Stage kann die nächste Frame sofort verarbeiten –> Komplexität in Engine Design ist simplifiziert
Was sind typsiche Multithreading Probleme? Erkläre diese.
Deadlock - Threads warten aufeinander und deadlocken sich
Livelock - Beide Threads versuchen zu arbeiten (die States der Threads wechseln ihren State als Antwort auf andere Prozesse - dadurch sind die Threads nicht gelocked, aber sie machen keinen Fortschritt)
Race Condition - Zwei Threads greifen auf gleiche geteilte Daten zu und verändern diese (undefiniertes Verhalten)
Starvation - Lange Wartezeiten auf andere Threads (Scheduler nimmt diesen Thread nie dran)
Wie können Threads im Multithreading synchronisiert werden?
Durch Events, Mutex und Semaphore
Was ist eine einfache und schnelle Möglichkeit, die Geschwindigkeit von Zugriffen auf Daten in Matrizen / Vektoren zu verschnellern?
Cache-Lines ausnutzen - Daten werden aus dem Cache in Linien ausgelesen, Arrays beispielsweise liegen hintereinander im Speicher und können deswegen viel schneller gelesen werden - man sollte deswegen auch schauen immer im Row Major zu rechnen, da dies den Zugriff verschnellert auf Daten
Was ist False Sharing?
Beispiel: Core 0 schreibt in die Variable x im eigenen L2 Cache rein - x ist aber in Core 1’s L2 Cache und Core 1 liest die Daten aus x nun aus - die Cache Line von Core 1 wird somit invalidiert und dies sorgt für große Performanceprobleme - Lösung: Hardware muss Caches synchronisieren
Wie funktionieren Object Pools?
Es wird zu Beginn vom Programm viel Speicher allokiert und beim Ende vom Programm wieder freigegeben - im Pool befinden sich schon angelegte, wiederverwendbare Instanzen von Objekten (oft auch mit einer isAlive flag), die jederzeit verwendet werden können - wird zum Beispiel bei Bullets in Spielen verwendet
Welche Tools enthält eine Asset Pipeline?
Exporter - konvertiert native Formate (.psd, .wav) in intermediate Formate (.jpg, .mp3) für die Engine um
Conversion Tools - diese optimieren die Assets für die jeweilige Plattform (Texturen runterskalieren, wav zu ogg konvertieren…)
Packing Tools - Diese packagen das Projekt in eine einzige File, um das Öffnen mehrfacher Files zu verhindern (.zip, .cab, .dat)
Wie wird ein Level geladen und gespeichert?
Der gesamte Content in einem Level (GameObjects) und Konfigurationen werden in einer Liste festgehalten - diese wird serialisiert (XML, JSON, Binär)
Welche Arten von Editor gibt es?
Level-Editor, Welt-Editor, Map-Editor
Welche Voraussetzungen müssen Editor / Tools erfüllen?
Graphisches User Interface
Erforderliche Komponenten (Game Daten, Visualisierung von Game Daten, Interaktion mit Game Daten)
Model-View-Controller (MVC)
Was ist ein MVC? Welche Rolle spielen Editor bei MVCs?
Model-View-Controller
Model: Repräsentieren Wissen
View: Visuelle Repräsentation des Models (Präsentation)
Controller: verbindet User und System
Editor verbinden Controller und View (Special Controller)
GUI: Was ist Retained Mode?
Graphisches User Interface wird geupdated, wenn Interaktionen (Callbacks) stattfinden
GUI: Was ist Immediate Mode?
Graphisches User Interface wird jede Frame neu gerendered (direkter Zugriff auf State)
Was sind die Unterschiede zwischen Retained und Immediate Mode bei GUI? Nenne auch je einen Repräsentanten pro Modus.
Retained Mode (TGUI) vs. Immediate Mode (IMGUI)
Sehr Performance effizient vs. Performance ineffizient (polling)
Hauptsächlich statisch vs. Sehr dynamisch
Long-term Design vs. schnelle Prototypen
Use case: Apps vs. Use case: real-time Simulationen und debugging Tools
Große Lernkurve / große Bibliotheken (nur Retained Mode)
Daten caching / Duplikation von Daten (nur Retained Mode)