Überlegungen für Open-World Objekt Management

thekiller

Viceinator
Tag schön!

Unter Euch gibt es ja bestimmt ein paar Leute die Erfahrungen mit Game-Development haben. Und genau euren Rat brauche ich gerade mal.

Ich arbeite zur Zeit an einer 3D-Engine die natürlich auch sämtliche Objekte auf der Map verwalten soll und dass natürlich auch möglichst schnell.

Meine Überlegung dafür ist diese:
Die Welt wird in immer gleich große Sektoren unterteilt die alle nahtlos aneinander grenzen. Das Zentrum eines jeden Sektors ist dessen Position.



Legende für die Bilder unten:
Kamerasektor: hellblauer Sektor (Bild 1: D4, Bild 2: C5)
Sichtsektoren: hellgrüne Sektoren (Bild 1: C3, C4, C5, D3, D5, E3, E4, E5 Bild 2: B4, B5, B6, C4, C6, D4, D5, D6)
NULL-Sektor: rosa Sektoren
Delete-Sektor: rote Sektoren (Bild 2: C3, D3, E3, E4, E5)
New-Sektor: gelbe Sektoren (Bild 2: B4, B5, B6, C6, D6)
Kameraobjekt: roter Kreis
3D-Objekte: blaue Kreise
Sichtbereich der Kamera: lilanes Feld

Bild 1:
Die Kamera befindet im KameraSektor (D4) und kann alle Objekte die sich im Sichtbereich der Kamera UND dem Kamerasektor und den Sichtsektoren liegen sehen. D.h. Diese Objekte müssen schon auf der Grafikkarte sein, damit sie schnell angezeigt werden können, wenn sich z.B. die Kamere dreht.
Von den Objekten die sich innerhalb des Kamerasektors und der Sichtsektoren befinden, werden die aussortiert die für andere Berechnungen benötigt werden wie z.B. die Objekte die wirklich gerendert werden oder in Physikberechnungen mit einbezogen werden sollen.

Bild 2:
Wenn nun die Kamera in einen anderen Sektor gelangt, werden die Objekte die nicht mehr innerhalb der Sichtsektoren (Delete-Sektoren) liegen von der Grafikkarte gelöscht um Platz zu machen und die Objekte die in den neuen Sektoren (New-Sektoren) hinzukommen, werden auf die GraKa geladen.



Was ich jetzt auf den Bildern nicht mit drauf habe ist, dass die Objekte der umliegenden Sektoren der Sichtsektoren schon in den RAM geladen werden, damit die schneller auf die GraKa geschoben werden können, fals nötig.

Die Objekte in den einzelnen Sektoren könnten dann ja entweder in einzelnen Verzeichnissen oder Dateien befinden, damit ist es ja dann möglichst einfach Objekte hinzuzufügen oder zu entfernen.
Was aber glaube ich ziemlich umständlich ist, wenn die Objekte die Sektoren wechseln. Die müssen ja dann dem neuen Sektor zugewiesen werden.

Ich hoffe mir kann jemand ein paar Denkanstöße geben.


MfG Manuel
 

Anhänge

  • 1.png
    1.png
    143,2 KB · Aufrufe: 10
  • 2.png
    2.png
    142,9 KB · Aufrufe: 9
Zuletzt bearbeitet:

lfp

Grünschnabel
Das ist doch wie in Minecraft mit den Chunks, oder? Es werden nur die Chunks geladen, die sich in der Nähe des Spielers befinden, um sie sofort anzeigen zu können, und um Arbeitsspeicher und CPU nicht auszulasten...Gute Idee eigentlich!