Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

10.07.2012, 18:31

OpenWorld System

Ich wollte gerne mal fragen, wie OpenWorld realisiert/geladen/gerendert werden. Bei meinen (großen) Levels lade ich 1000x1000 Einheiten an Objekten (anfangs). Wenn der Spieler den nächsten Abschnitt sehen kann, erstelle ich ein Thread, lade die Daten und rendere sie noch dazu. Später lösche ich die Anfangsobjekte, wenn man sie nicht mehr sieht. Das ganze funktioniert ganz gut, aber gibt es eine bessere Möglichkeit?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Noctarius

Treue Seele

Beiträge: 120

Wohnort: Düsseldorf

Beruf: Manager of Developer Relations at Hazelcast, Inc. & Consultant for Scaleable Gameserver Systems

  • Private Nachricht senden

2

10.07.2012, 20:06

Das ist typische Weg für, daher auch der Begriff Streaming-World, weil du eben im Hintergrund die Umgebung in den Speicher "streamst".

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

12.07.2012, 13:23

Ich wollte gerne mal fragen, wie OpenWorld realisiert/geladen/gerendert werden. Bei meinen (großen) Levels lade ich 1000x1000 Einheiten an Objekten (anfangs). Wenn der Spieler den nächsten Abschnitt sehen kann, erstelle ich ein Thread, lade die Daten und rendere sie noch dazu. Später lösche ich die Anfangsobjekte, wenn man sie nicht mehr sieht. Das ganze funktioniert ganz gut, aber gibt es eine bessere Möglichkeit?


Genau, das Buzzword dafür heißt 'Resource Streaming'. Die Idee dahinter scheinst du ja bereits umgesetzt zu haben. Es wird einer Liste von zu streamenden Resourcen erstellt und diese im Hintergrund nachgeladen/erstellt. Anschließend werden die aktuellen Resourcen gerendert. Die Kunst dabei ist die richtigen Resourcen auszuwählen um eine visuelles Feedback des Streaming Systems zu vermeiden. In vielen Spielen kann man ja beobachten wie (z.B.) Texturmips oder LOD Stufen von Meshes aufpoppen, genau an dieser Stelle funktioniert das Streaming System nicht optimal. Rage ist da beispielsweise so ein Kandidat. Andererseits ist es natürlich auch wichtig nicht zu viel zu laden.

Dafür gibt es verschiedene Ansätze die sich, je nach Kontext, mehr oder weniger eignen. Hier mal eine (kleine) Auswahl davon: Viele Spiele benutzen sogenannte Air-Lock Regionen, also stellen an denen das Laden weiterer Regionen angestoßen wird und aus denen man erst raus kommt wenn alle benötigten Resourcen geladen wurden. Im Grund sind das also verbesserte Ladebildschirme, wo der Spiele (z.B.) hinter einer Tür herumlaufen kann bis die Daten nachgeladen wurden.

Ein anderer Ansatz ist es, das Level Regionen zu unterteilen und das Laden der Resourcen so früh zu beginnen, dass alle Resourcen geladen wurden, bevor der Spieler das Ende der aktuellen Region erreicht. Der Ansatz kann mehdimensional umgesetzt werden, beispielsweise kann das Level in ein (uniformes) Grid unterteilt werden und alle Zellen rund um den Spieler geladen werden.

Daneben gibt es häufig Stellen die optimiert werden können (müssen). Beispielsweise ist Bandbreite ein großes Thema (vor allem auf DVD/BD) oder Zugriffszeiten. In vielen Fällen lassen sich Ressourcen so hinterlegen, dass z.B. teure Dateioperationen (Öffnen, Suchen) vermieden werden können. Oder Daten können von DVD auf Festplatte gecached werden. Hier mal einige Ideen:

  • Daten komprimieren
  • Daten ordnen um seeks zu vermeiden
  • Daten in ein Archive packen
  • Resourcen auf HDD cachen
  • Resourcen im RAM cachen (nur entladen wenn cache voll)
  • Resourcen poolen um teure Allokation zu vermeiden
  • ...
@D13_Dreinig

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

4

13.07.2012, 00:07

Dann habe ich ja alles richtig gemacht :thumbup:
Danke für die Antworten.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

13.07.2012, 14:51

Dann habe ich ja alles richtig gemacht :thumbup:
Danke für die Antworten.


Ob du's richtig gemacht hast, wird die Performanz dann zeigen. ;)
@D13_Dreinig

Werbeanzeige