Game Development 2 Flashcards

1
Q

Welche Faktoren beeinflussen Performance bei Spielen?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was sind übliche Performance Bottlenecks bei Spielen?

A

CPU
GPU
Memory / Speicher
Netzwerk

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was ist Instrumentation?

A

Instrumentation ist das Hinzufügen von Code zu einem Programm, um Daten über die Exekution zu sammeln

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist Profiling?

A

Profiling ist die Analyse von Daten, die gesammelt worden sind durch Instrumentation

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist Scripting?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was sind Vorteile von Scripting?

A

Interpretation passiert durch virtuelle Maschine und Code muss nicht kompiliert werden
Schnelle Iterationen (Script Updates “on the fly”)
Lightweight

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was sind Nachteile von Scripting?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie kann man Scripting am besten debuggen?

A

Caveman Debugging
Konsolenoutput
IDE der Scripting Sprache kann helfen
Externer Debugger

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wie viele Threads sollte man verwenden?

A

Regel: Nicht mehr als einen CPU-intensiven Thread pro Core
3 - 6 bei Xbox
1 - 16 am PC (je nach Hardware)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was ist der Current State-of-the-Art bei Multithreading?

A

Job-Systeme
Diese arbeiten mit Pools von Threads - man kann Jobs queuen (worker threads) und Threads lassen Jobs gleichzeitig laufen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche Kriterien müssen Jobs erfüllen?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was ist Frame-centric Design?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was sind typsiche Multithreading Probleme? Erkläre diese.

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie können Threads im Multithreading synchronisiert werden?

A

Durch Events, Mutex und Semaphore

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was ist eine einfache und schnelle Möglichkeit, die Geschwindigkeit von Zugriffen auf Daten in Matrizen / Vektoren zu verschnellern?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist False Sharing?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Wie funktionieren Object Pools?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Welche Tools enthält eine Asset Pipeline?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Wie wird ein Level geladen und gespeichert?

A

Der gesamte Content in einem Level (GameObjects) und Konfigurationen werden in einer Liste festgehalten - diese wird serialisiert (XML, JSON, Binär)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Welche Arten von Editor gibt es?

A

Level-Editor, Welt-Editor, Map-Editor

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Welche Voraussetzungen müssen Editor / Tools erfüllen?

A

Graphisches User Interface
Erforderliche Komponenten (Game Daten, Visualisierung von Game Daten, Interaktion mit Game Daten)
Model-View-Controller (MVC)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Was ist ein MVC? Welche Rolle spielen Editor bei MVCs?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

GUI: Was ist Retained Mode?

A

Graphisches User Interface wird geupdated, wenn Interaktionen (Callbacks) stattfinden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

GUI: Was ist Immediate Mode?

A

Graphisches User Interface wird jede Frame neu gerendered (direkter Zugriff auf State)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Was sind die Unterschiede zwischen Retained und Immediate Mode bei GUI? Nenne auch je einen Repräsentanten pro Modus.

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Was ist eine statische Bibliothek? Nenne Vor- und Nachteile.

A

Windows .lib, Mac .a
Bibliothek wird durch den Linker in die Executable kopiert

+ nur erforderlicher Code der Bibliothek wird kopiert
+ Keine Versionskonflikte
+ Schneller Startup der Executable
+ Weniger Dateien für Deployment
- Speicherplatzverschwendung
- Updaten der Bibliothek erfordert Kompilierung und das vollständige Ersetzen der Executable
- Problematisch für Internet Downloads

27
Q

Was ist eine dynamische Bibliothek? Nenne Vor- und Nachteile.

A

Windows .dll, Mac .dynlib
Bibliothek wird bei Runtime der Executable reingeladen

+ Nur Einstiegspunkte werden ins Programm kopiert
+ Code kann bei Runtime geladen werden und nur wenn gebraucht
+ Erweitert Programm ohne Zugang zu Source Code
+ Bibliothek kann updated werden ohne neu zu kompilieren
- Programm besteht aus mehreren Dateien
- Funktionen müssen für Export markiert werden
- Konflikt bei verschiedenen Bibliotheksversionen
- Langsamere Ausführung (Funktionsadressen Lookup)

28
Q

Was sind DLLs? Was enthalten diese?

A

DLL sind exportierte Tabellen, die den Namen jeder Funktion / Klasse beinhalten
Bei Runtime werden dann die Funktionsadressen in der DLL-Tabelle nachgelesen und die jeweilige Funktion ausgeführt

29
Q

Was ist ein Szenengraph?

A

Definiert eine Datenstruktur, die alle Informationen einer Szene beinhaltet - kann “aggressive” Optimierungen durchführen, Szenengraphen haben eine hierarchische Baum-ähnliche Struktur und der Basisblock des Szenengraphen ist eine Scene node (kann alles mögliche sein)

30
Q

Was sind typsiche Szenengraph Knoten?

A

Transformation, Geometrie, Gruppen, Kamera, Lichter, Shader, Animationen und Trigger

31
Q

Wieso werden Szenengraphen verwendet?

A

1) Produktivität - reduzieren workload durch Kompositionen
2) Portability - können “lower level” tasks vom Grafik Rendering
3) Scalability - komplexere Hardware Konfigurationen sind leichter zu handhaben
4) Performance - Sortieren von Texturen, Materialien, kümmert sich auch um Culling

32
Q

Wie können Szenengraphen dargestellt werden?

A

Als Baum-ähnliche Szenengraphen (States werden nur geupdated, wenn notwendig - dirty flags) oder als Directed Acyclic Graphen (Nodes können mehrere Parents haben)

33
Q

Was ist Object Level Culling?

A

Der Szenengraph gibt Wissen über Szene, um auf Object Level zu cullen - es werden Bounding Volumes für Geometrie erstellt und wenn diese nicht im View Frustum sind, werden die Objekte geculled

34
Q

Was sind Bounding Volumes?

A

Bounding Volumes dienen als “Sichtbarkeitsfaktoren” für Geometrie, um zu wissen, ob diese im View Frustum sind - die Volumes werden als PreProcessor step berechnet und müssen zur Runtime neu berechnet werden - wenn sich das Objekt bewegt, müssen diese neu berechnet werden (AABB)

35
Q

Was ist hierarchisches View Frustum Culling?

A

Es wird eine Bounding Volume Hierarchie (BVH) erstellt, um Objekte zu gruppieren - es werden zuerst die Gruppen getestet, bevor die einzelnen Bounding Volumes auf einen View-Check getestet werden –> performance Optimierung

36
Q

Welche Spatial Datenstrukturen gibt es?

A

Objekt-Hierarchien - Bounding Volumes Hierarchie (BVH)

Spatial-Hierarchien - Grids, Quad / Oct-Trees, Kd-Trees, Binary Space Partitioning (BSP)

37
Q

Was ist ein Grid? Benenne Vor- und Nachteile.

A

Bei einem Grid wird der Spielwelt in einzelne Grids unterteilt und alle Objekte in einem Grid werden der Zelle zugewiesen - so kann schnell nach Objekten für z.B. Visibility Culling gecheckt werden

+ Simpel
+ Direkte Addressierung

  • Nur effizient, wenn Nummer der Objekt pro Zelle limitiert ist
  • Größe und Anzahl der Zellen muss richtig gewählt werden (zu viele Zellen: hoher Speicherverbrauch, zu wenig Zellen - zu viele Objekte zu checken)
38
Q

Was ist Hierarchical Space Partitioning?

A

Probleme beim normalen Grid ist, dass eine inhomogene Distribution von Objekte (alle Objekte in einer Zelle) nicht optimal gehandled wird - deswegen wird beim Hierarchical Space Partitioning der verfügbare Space nochmal aufgeteilt in Subdivisionen

39
Q

Was ist ein Quadtree?

A

= Rekursive Hierachische Subdivision (wenn Objekte in einer Zelle > n, dann unterteile diese Zelle erneut)
Stop-Kriterium für einen Quad Tree ist eine maximale Tiefe bzw. minimum Cell Size
Wenn ein Objekt in mehreren Zellen liegt, dann wird eine Elternzelle bestimmt

40
Q

Was ist ein Octree?

A

Wie ein Quadtree, nur, dass dieser im 3D-Space ist (Würfel), also wenn mehrere Objekte in einem Bereich sind, wird eine neue Zelle gebildet (wenn Objekte in Zelle > n)

41
Q

Was ist ein Binary Space Partitioning Tree (BSP)? Benenne Vor- und Nachteile.

A

Spalte den Space anhand einer willkürlich orientierten Plane - via Rekursion wird dann weiter aufgeteilt, bis eine gewisse Anzahl an Objekten bei einem Leaf (Blatt) enthalten ist (Binary Tree)
Dabei wird der Space so aufgeteilt, dass jeweils die Hälfte der Objekte pro Seite der Aufteilung rauskommt

+ Schnelles Traversieren
+ Szene ist balanciert
+ Gut für balancierte Szenen
- Teuer zu bauen

42
Q

Was sind Kd-Trees?

A

Eine Mischform aus einem Spatial Grid und einem BSP - diesmal werden die Planes nicht willkürlich, sondern axis-aligned aufgeteilt (an Hand vom Median)
Also es wird eine Achse ausgewählt und dann wird der Median von allen Centroiden der Objekte entlang dieser Achse genommen (Median Split)

43
Q

Was sind Vor- und Nachteile von Bounding Volume Hierarchy (BVH)?

A

+ Kann jederzeit updated werden, auch bei dynamischen Szenen
+ Natürlich für hierarchische Objekte und wenn ein Szenengraph verfügbar ist
- Schlechter beim Durchgehen von Objekten (nearest neighbour)

44
Q

Wie wird die richtige LOD ausgewählt?

A

Distance LOD - LODs werden basierend auf der Distanz zur Kamera gewählt
Pixel-count LOD - LODs werden an Hand vom sichtbaren Pixel-count ausgewählt

45
Q

Wie werden LODs ausgetauscht? Welcher Effekt kann beim Austauschen von LODs auftreten?

A

Diskreter Austausch - LODs werden einfach ausgetauscht (simple und effizient, aber popping Effekt)
LOD Blending - LODs werden gefaded mit einer smoothen Transition (simpel und kein popping Effekt, allerdings Kosten vom Rendern von zwei LODs gleichzeitig)

Popping-Effekt - direkter Austausch von LODs kann manchmal weird aussehen, als würden die LODs einfach “reinspawnen”

46
Q

Was sind Continuous LODs?

A

Idee: Objekte werden zur Runtime simplifiziert angezeigt (das höchste Level der Mesh ist gespeichert und wird progressiv “abgearbeitet” über progressive Mesh Dezimation)

47
Q

Was ist das OSI-Modell? Wie ist dieses aufgebaut?

A

Das OSI Modell wird für die Netzwerkkommunikation verwendet und besteht aus folgenden Layern (von oben nach unten hin)

Application Layer - das Programm selbst, das die Daten dem User präsentiert
Presentation Layer - übersetzt Daten zwischen dem Application und Network Layer
Session Layer - verwaltet Session-Informationen zwischen Applikationen
Transport Layer - kontrolliert den Fluss von Paketen
Network Layer - sendet Pakete von A nach B
Data Link Layer - kümmert sich um Fehlerhandling beim Datentransfer
Physical Layer - Physische Verbindung zwischen Hardware

48
Q

Wie sieht eine Netzwerkkommunikation üblicherweise aus?

A

Person A schreibt in den Outgoing Buffer, schreibt in den Stream und sendet diesen an Socket A -> Socket A schickt diese Daten übers Netzwerk an Socket B, wo die Daten wieder aus dem Stream gelesen und in einen Buffer gespeichert werden, wo Person B dann die Daten erhält

49
Q

Was ist der Unterschied zwischen TCP und UDP?

A

TCP ist verbindungsorientiert, UDP garantiert nicht, dass es eine Verbindung gibt
TCP versichert, dass die Daten auch ankommen, das ist bei UDP nicht so
Leicht zu verwenden, aber langsam vs. schneller wegen weniger overheads

50
Q

Was ist Network Address Translation (NAT)?

A

Computer haben eine private Adresse im lokalen Netzwerk - aber private IP-Adressen sind nicht zugänglich vom Internet
Die Lösung: Private Adressen werden zu öffentlichen Adressen übersetzt (NAT)

51
Q

Welche Netzwerk Architekturen gibt es für Multiplayer in Spielen?

A

Peer to Peer - Klienten kommunizieren miteinander (ein Klient ist der Host)
Listening Server - der Host ist Server mit Authorität und alle Klienten kommunizieren mit dem Host
Dedicated Server - Server managed nur das Spiel und hat keine eigenen Spieler - dadurch kann der Server Simulationen und Datenbankberechnungen machen

52
Q

Was sind Remote Procedure Calls (RPC)? Wie unterscheiden sich reliable und unrelieable RPC’s?

A

Remote Procedure Calls sind interprozess Kommunikationen, wo Maschine A einen gewissen Code auf Maschine B aufrufen möchte

Reliable RPC: Garantieren, dass der Code bei Maschine B auch wirklich ausgeführt worden ist (wird verwendet für wichtige Gameplay Events)
Unreliable RPC: Es gibt keine Garantie, dass Code bei Maschine B wirklich ausgeführt wird, falls Netzwerkfehler oder sonstiges auftreten (wird für unwichtigere Sachen wie VFX Effekte verwendet)

53
Q

Welche Arten von RPC-Calls gibt es?

A

Client Call - Server ruft Funktion beim Klient auf
Server Call - Klient ruft Funktion beim Server auf
Broadcast - Server ruft eine Funktion bei allen Klienten auf

54
Q

Network Architecture: Was ist Replikation?

A

Bei Replikation wird der Game State bei allen Klienten repliziert (gleich gehalten) - Replikation muss stets schnell und smooth laufen und so wenig Bandbreite wie möglich verwenden

55
Q

Network Architecture: Was ist Ownership?

A

Jeder GameObject wird von einem Klient oder Server geowned - dies muss ebenso bei der Replikation vom Game State beachtet werden

56
Q

Wie funktioniert Peer To Peer?

A

Jeder Klient updated die eigenen GameObjects und sendet diese periodisch (10 - 20 mal pro Sekunde) an andere Klienten

57
Q

Was ist ein GameObject Snapshot?

A

Beim Snapshot wird das GameObject mit seinem jetzigen Zustand serialisiert, um an andere Klienten / Server gesendet werden zu können - dabei wird nur die wichtige Data gesendet und die Delta Kompression angewandt - also das nur Daten gesendet werden, falls sich diese verändert haben

58
Q

Wie funktioniert eine Client / Server Verbindung?

A

Client sendet updated GameObjects an Server und der Server broadcasted das GameObject an alle anderen Klienten

59
Q

Was ist ein autoritativer Server?

A

Der autoritative Server empfängt von den Klienten nur Inputs, updated dann die GameObjects bei sich und überschreibt die Game States bei den Klienten. Dies wird gemacht, damit es nicht zu verfälschten Daten / Cheating kommt - Problem: Latenz

60
Q

Was ist Lag Kompensierung? Welche Elemente beinhaltet es?

A

Bei der Lag Kompensierung wird geschaut, dass Klienten so wenig vom Lag wie möglich spüren.

Interpolation und Extrapolation: Der Klient speichert sich Snapshots vom Game States von den letzten paar Ticks - beim Rendern wird mit zwischen aktuellem State und vergangenen States interpoliert - falls Snapshots fehlen sollten, kann extrapoliert werden; Interpolation sorgt für Latenz, während Extrapolation zu Prediction Errors führt (sollte vermieden werden)

Input Prediction (Client Side Prediction): Der Klient updated die eigenen GameObjekte und die neue Position wird beim Eingeben des Inputs sofort gerendered - falls der Server dann den richtigen GameState sendet und dieser nicht mit dem lokalen Stand des Spielers übereinstimmt, müssen die lokalen Daten überschrieben werden - Server Reconciliation or Rollback

61
Q

Wie können Prediction Fehler vermieden werden?

A

Mit deterministischem Game-Update - dadurch kann es zu keinen Fehler mehr kommen (bzw. werden diese reduziert) - Game Updates sollten nur in fixen Zeitschritten geschehen - bei einem Prediction Fehler kann dann der Fehler über eine gewisse Zeit behoben werden, damit dieser nicht so schlimm auffällt

62
Q

Wie löst der Server Probleme, wenn zwei Clients verschiedene Sachen behaupten?

A

1) Server rewind zu einem Game State, wo der Konflikt passiert ist
2) Server schätzt Client Prediction
3) Falls Klient recht hat, kann der Server diesem recht geben

63
Q

Welche Möglichkeiten gibt es, dass zwei Spieler miteinander in einem Online-Spiel connecten?

A

1) Direkte Einladung
2) Lobby System
3) Matchmaking

64
Q

Wie funktioniert ein Dedicated Server? Welche Aufgaben erfüllt dieser?

A

Ein dedicated Server läuft normalerweise mit dem gleichen Code wie ein Klient, nur, dass dieser nicht rendern muss (Server muss gehosted werden)

Tasks:
Cheating Schutz
Speichert Spiel in Datenbank
Statistiken