Spatial Partition Game Programming Patterns / Optimization Patterns AM3: Softwaretechnologie II...

Post on 06-Apr-2016

215 views 0 download

Transcript of Spatial Partition Game Programming Patterns / Optimization Patterns AM3: Softwaretechnologie II...

Spatial PartitionGame Programming Patterns / Optimization Patterns

AM3: Softwaretechnologie II (Teil 2): Simulation und 3D ProgrammierungDozent: Prof. Dr. ThallerSS 2015Referent: Tim Höfer

Absicht und Motivation

Effizient Objekte zu lokalisieren, indem Sie sie in einer Datenstruktur durch ihre Positionen organisiert.

Einheiten auf dem Spielfeld

Funktion „Nahkampf“ Wenn Unit A auf Position von Unit B KAMPF

Battle Lines

Vorschlag: Statt Units im Array zu speichern nimmt man Battle Lines

Das Muster

Jedes Objekt hat seinen Platz im Raum (Spielfeld) Objekte werden in räumlichen Datenstrukturen gespeichert Räumliche Datenstruktur lässt Objekte einfacher vergleichen

Sample Code

Aufteilung in Zellen

Ein Netz verlinkter Einheiten

2D: Jede Unit besitzt Position & Pointer zum Grid

Ein Netz verlinkter Einheiten

Jede Zelle = Pointer zur Unit

Ein Netz verlinkter Einheiten

Resultat: Doppelte verlinkte Listen statt Arrays!

Das Battlefield

A Clash of Swords

Units in Zellen KAMPF

A Clash of Swords Nur noch Einheiten pro Zelle werden

verglichen

Charging Forward

Performance Problem wurde beseitigt Was passiert, wenn die Zelle verlassen wird?

Bewegung:

Charging Forward

At Arm‘s Length

At Arm‘s Length

At Arm‘s Length

Design Decisions

Flat partition: Ist einfacher Der Speicherverbrauch ist konstant Aktualisiert schneller bei Positionsveränderung der Objekte

Hierarchical partition Behandelt leeren Raum effizienter Behandelt dicht besiedelten Raum effizienter

Ist Partitionierung abhängig von der Menge der Objekte? Ziel: Ausgewogene Partitionierung

Wenn die Partitionierung objektunabhängig ist Objekte können inkrementell hinzugefügt werden Objekte können schnell bewegt werden Partitionen können unausgeglichen sein

Wenn sich Partitionierung objektabhängig ist BSP / k-d trees teilen die Welt rekursiv Partitionen sind dadurch ausgeglichen Es ist effizienter mehrere Objekte auf einmal zu partitionieren

Ist Partitionierung abhängig von der Menge der Objekte? Wenn die Partitionierung objektunabhängig ist, aber die

Hierarchie die Objekte berücksichtigt

Werden Objekte nur in Partitionen gespeichert? Wenn die Objekte nur in der Partition gespeichert werden:

Es vermeidet Speicher-Overhead und die Komplexität zweier Sammlungen

Wenn es eine zusätzliche Sammlung für die Objekte gibt: Objekt-Anfragen werden schneller durchlaufen

Quellen

http://gameprogrammingpatterns.com/spatial-partition.html