2009-03-30 10 views
14

In Fallout 3 zum Beispiel speichert ein gespeichertes Spiel den Status und den Ort jedes einzelnen Objekts und jeden NPC im Spiel und nimmt nur ein paar MB auf. Wie haben sie das gemacht!?!?Wie können Videospiele große Datenmengen effizient speichern/abrufen?

Und dann, während des Spiels, wie werden diese Daten in/aus dem Speicher hinzugefügt/abgerufen, so dass sie dem Spieler in Echtzeit angezeigt werden können?

AKTUALISIERT: (Ich werde Sie für Ihre Antworten arbeiten lassen: P)

Basierend auf Kevin Crowell Antwort ... Also ich denke, Sie eine Rendering-Distanz haben würde, die auf Objekte anwenden würde und NPCs, und du würdest die Objekte und NPCs innerhalb des angegebenen Bereichs "AUSWÄHLEN". Welche Art von Datenspeicher würden Sie jedoch verwenden, um diese Objekte zu erhalten?

Mit anderen Worten, Sie würden eine gigantische Reihe von jedem Objekt im Spiel haben, und ständig eine kleinere Liste aktualisieren, die die sichtbaren Objekte zum Rendern enthält?

Auch per Chaos 'Antwort ... Würde passieren, wenn Sie schließlich jedes Objekt im Spiel berührt? Würde dein Spiel sicherer und größer werden? Im Falle von Fallout 3 bin ich ziemlich sicher, dass es keine "Stufen" gibt, wo die vergangenen Daten einfach fallen gelassen werden könnten. Alles ist erhalten, wenn Sie einen Ort verlassen/zurückkehren. Wie denken Sie, dass dieser spezielle Fall umgesetzt wird?

Antwort

12

Mit all den großen Hardisken heutzutage scheinen sogar Entwickler zu vergessen, wie viele Bytes es in einem Megabyte gibt. Also, um die Frage im Titel zu beantworten: Spiele speichern große Mengen von Daten durch Erstellen von Spielständen, die mehrere Megabyte groß sind.

Um zu veranschaulichen, wie groß ein Megabyte ist, sind es 8 Millionen Bits. Das ist ausreichend, um 2^8000000 = 10^2666666 Zustände zu codieren. Zum Vergleich: Im Universum gibt es nur 10^80 Atome. Jetzt gibt es in einem (sicheren) Spiel mehrere Subsysteme mit unterschiedlichen Zuständen; z.B. In einem RPG hat jeder NPC seinen eigenen Status. Aber wie viel Staat gibt es wirklich? Ihre Position in einer Stadt könnte als 16 Bits gespeichert werden (erinnern Sie sich an ihre genaue Position, wenn sie sowieso herumlaufen?). Ihre Stimmung/Disposition/etc als weitere 8 Bits, und das ermöglicht mehr Emotionen als manche Leute haben.

Wenn es darum geht, diese Art von Daten im Spiel zu speichern, ist die typische Datenstruktur ein QuadTree. Dies ist eine Datenstruktur, mit der Sie Objekte in einer bestimmten X-Y-Region in O (log N) bestimmen können. In einigen Fällen ist es für Spieleentwickler einfacher, die Welt in Zonen zu partitionieren. Dies reduziert die Anzahl der Laufzeitberechnungen. Ein gutes Beispiel war Doom. Seine Karten hatten Sichtbarkeit vorberechnet; Für jeden Punkt konnte schnell bestimmt werden, zu welcher Zone er gehörte, und für jede Zone wurde die Anzahl der sichtbaren Objekte vorberechnet. Dadurch wurde die Anzahl der Objekte reduziert, die zur Überprüfung der Laufzeitsichtbarkeit benötigt wurden.

+0

Dude .. Nein, nein, oder wie um alles in der Welt kennen Sie die Anzahl der Atome im Universum? (Ich frage nicht nach einer Quelle. Ich mache den Punkt, dass sie, soweit ich weiß, nicht herausgefunden haben, wann es noch endet.) Meintest du in der Galaxie? Das wäre ein wenig plausibler. – fauxCoder

+3

10^69 in unserer Galaxie, eigentlich. Die genauen Grenzen sind eigentlich nicht so wichtig. In dieser 10^80-Schätzung gibt es aus mehreren Gründen eine Menge Fehlerspanne. – MSalters

+0

Sorry das Off-Thema, aber [dieses Video] (http://www.youtube.com/watch?v=8GEebx72-qs) erkunden Sie diese Frage ein wenig tiefer ... –

8

Es kann einfach sein, Objekte oder NPCs einer X-, Y-, Z-Koordinatenebene zuzuordnen. Diese Informationen, die billig gespeichert werden.

Während des Spiels werden alle diese Objekte immer noch einem Koordinatensystem zugeordnet. Sie müssen nur die Speicherinformationen einlesen und von dort starten.

+0

+1, weil Ihre (zu der Zeit) Punkte '666' waren. ;-) Auch, gute Antwort! – dna123

+1

+1, weil Ihre (zu der Zeit) Punkte sind 723 –

+0

Objekte haben in der Regel mehr Staat, der beibehalten werden muss als nur ihre Position, obwohl ... – snemarch

3

Wenn Sie über die Informationen nachdenken, die Sie speichern müssen, ist das nicht wirklich viel;

z.

  • Position
  • Orientierung
  • Inventar
  • Gesundheit
  • Objective-Zustand

Es gibt viele mehr natürlich, von denen viele sowohl abhängig von der Art des Spiels und wie Die Sicherungsstruktur ist organisiert.

Einige Spiele wie Resident Evil erlauben nur das Speichern, wenn Sie eine neue Zone betreten, was bedeutet, dass Sie nicht alle Informationen für Objekte in beiden Zonen speichern müssen. Wenn Sie einen Speichervorgang "laden", kommen ihre Attribute von der Disc.

Wie dies Daten abgerufen/modofied ist, bin ich mir nicht ganz sicher, ich verstehe. Es sind nur Daten im Speicher der Konsolen. Wenn der Player speichert, wird er auf das Speichergerät geschrieben und beim Laden wiederhergestellt.

2

Eine wichtige Technik ist differential spart: nur Speichern von Zustand, der etwas anderes als seine Standardeinstellung ist. Vergleichen und kontrastieren "Speichern des Zustands und der Position jedes Objekts in der Spielwelt" mit "Speichern des Zustands und der Position jedes Objekts in der Spielwelt , die der Spieler bewegt oder verändert hat".

8

Ich denke, Sie überschätzen die Komplexität dessen, was gespeichert/abgerufen wird. Sie müssen die 3D-Modelle nicht für die Objekte oder deren Texturen oder andere Dinge speichern, die große Teile der Größe eines Spiels auf der Festplatte ausmachen.

Zuerst einmal, wie das Chaos erwähnt, ist es nur notwendig, Informationen über Dinge zu speichern, die verschoben wurden. Auch dann müssen Sie wahrscheinlich nur die neue Position und Ausrichtung speichern (vorausgesetzt, es sind keine anderen Variablen wie "beschädigt"). Das sind also zwei Vektoren für jedes Objekt, die um eine Gesamtsumme von 24 Bytes pro Objekt liegen. Das bedeutet, dass Sie die Informationen für 40.000 Objekte pro Megabyte speichern können. Das sind eine Menge Objekte, die sich bewegt haben.

Das Wiederherstellen dieser Daten ist nicht komplexer als das Platzieren der Objekte an erster Stelle. Jedes Objekt muss eine Standardposition/-ausrichtung haben, die für das Spiel definiert ist, um es irgendwo zu platzieren. Sie ersetzen also den Standardwert durch den gespeicherten Wert in der Sicherungsdatei. Dies ist nicht komplex und erfordert keine signifikante zusätzliche Verarbeitung.

1

Die größten Einsparungen ergeben sich aus der Eliminierung aller unnötigen Statusdaten. Wenn Sie sich 8-Bit-Side-Scroller-Spiele anschauen, beginnen sie, den Status zu verwerfen, sobald Dinge außerhalb des Bildschirms sind, und behalten oft nichts, weil ihre Ressourcen zu eng sind, um mehr als die minimale Anzahl an Instanzen zu halten.

Wenn man es auf der Makro-Ebene für ein Spiel wie Fallout 3 tut, muss man nur den Umfang des Problems vergrößern. Du beginnst, die Landschaft durch Gitter oder andere geometrische Methoden aufzuteilen und spawn/despawn Sachen, während sich der Spieler von einem Abschnitt zum nächsten bewegt. Sie sollten die Größe jedes Bereichs idealerweise klein halten, damit der Speicherzustand nicht hoch ist. Du erfährst das Minimum an Status, das du benötigst, um NPC- und Item-Instanzen zu halten, und in den Layout-Daten markierst du so oft wie möglich automatisches Respawn, so dass kein Status gespeichert werden muss.

Wenn Sie auf eine bestimmte Datenstruktur zeigen möchten, könnte ein Beispiel für ein Serialisierungsformat ein linearer Datenstrom sein, der durch einen Baum von Zeigern indiziert wird, wobei die Organisation des Baums dem Kartenlayout entspricht.

1

Zu einem verwandten Hinweis, Spiele-Engines verwenden oft Zip-Komprimierung, um die Größe all dieser Inhalte zu halten und auch einige Operationen schneller zu machen.

1

Neben dem, was alle anderen gesagt haben, möchte ich hinzufügen, dass der Zustand nicht notwendigerweise nur Position und Bewegung, sondern auch Eigenschaften für den jeweiligen Zustand impliziert. Normalerweise verfügt eine Game Engine über eine Funktion, mit der Sie die Daten einer bestimmten Klasse speichern können.

Sagen Sie bitte eine Spielerklasse haben, und Sie sind gut in die Geschichte, wenn klicken Sie die möglichen Daten speichern, die gespeichert werden kann, ist:

  • Wo ist der Spieler in der Ebene/Karte befindet
  • Was sind seine Attribute: Gesundheit, Mana, Stärke, Intelligenz, etc
  • Welche Fähigkeiten hat er.
  • Welches Niveau ist er.

Weltweit können wir auch haben:

  • Wie viele Referenzen (Namen, die der Motor ermöglichen, ein Objekt aus einer Liste zu holen) auf Objekte in dieser bestimmten Ebene gespeichert werden, in andere Wörter, wenn Sie laden, welche Objekte mit ihm geladen werden sollen.
  • Verwenden wir Physik, wenn ja, wer benutzt es.

Und viele mehr. Fallout 3 hat eine Art von Speichern, ein anderes Spiel wird ein anderes haben. Es hängt wirklich vom Genre und dem verwendeten Motor ab.

4

In Fallout 3 im Besonderen ist die Karte in Gitterform unterteilt. Sie können nur Ihr aktuelles Quadrat und die unmittelbar nächsten sehen. Die Art des Datenspeichers ist nicht wirklich wichtig - es kann sich um eine SQLite-Datenbank handeln, eine Baumstruktur, die auf die Festplatte serialisiert wird, oder eine andere Art von Datenspeicher.

... Sie würden Sie haben eine gigantische Auswahl an jedes Objekt im Spiel, und ständig eine kleinere Liste aktualisieren, die die sichtbaren Objekte zu machen hält?

Generell ja, aber das "gigantische Array" muss nicht im Speicher sein. Und es gibt mehr Listen - Objekte im aktuellen und angrenzenden Raster Quadrat (Sie können von hinten angegriffen werden - nicht in der sichtbaren Liste), die sichtbare Liste, die Timer-Liste ...

Würde passieren, wenn Sie schließlich berührt jedes Objekt im Spiel? Würde dein sparen Spiel größer und größer werden?

Konnte - wenn es eine Standardstatustabelle für alles gibt, kann das Speichern nur die Unterschiede enthalten. Die Speicherung wird dann mit fortschreitendem Fortschritt wachsen.

Beim Verlassen/Zurückkehren zu einem Ort bleibt alles bestehen.

Nein. Gegenstände, die du außerhalb deines Hauses fallen lässt, werden irgendwann verschwinden. Wahrscheinlich auch Körper. Zufällige Monster werden ab und zu neu gespawnt. Dies ist sowohl für Spieleentwickler als auch im Einklang mit der realen Welt praktisch.

Verwandte Themen