Was ist die Logik hinter den "Laden" -Szenen in Spielen?


8

Ich mache mein erstes Spiel, es ist ein Tower-Defense-Spiel, das die Unity-Game-Engine verwendet und Fieldrunners als Referenz verwendet. Ich würde gerne mehr über die Funktionalität hinter dem Laden von Szenen in Spielen erfahren.

Bis jetzt instanziiere / erstelle ich Objekte zur Laufzeit und habe dabei keine Verzögerungen oder ähnliche Probleme. Wofür werden "Laden" -Szenen in anderen Spielen verwendet? Gibt es eine Funktionalität oder Instanziierung bestimmter Objekte für die nächste Runde oder Stufe? Wenn ja, warum brauche ich sie, wenn ich keine Verzögerungen bekomme?


6
Die Ressourcen, die für andere Spiele benötigt werden, sind möglicherweise viel höher als die eigenen. Daher sind Ladeszenen erforderlich, um den Zeitraum zu maskieren, in dem diese Ressourcen geladen werden (möglicherweise von einer langsamen Festplatte).
Verlangsamte

2
Auf welche "alle Spiele" beziehen Sie sich? Es gibt viele Spiele, die überhaupt keine Ladebildschirme haben.
Nicol Bolas

Antworten:


10

Grundsätzlich würde ich sagen, dass das Spiel während des "Ladevorgangs" versucht, alle Vorgänge zu laden und vorab zu berechnen, die zur Laufzeit nicht ausgeführt werden können. Beispielsweise ist das Abrufen von Bildern (zur Verwendung als Texturen) für die Festplatte normalerweise ein langsamer Prozess. Im Schritt "Laden" können diese Bilder in den RAM-Speicher kopiert werden. Dies ist ein viel schnellerer Zugriffsspeicher, der zur Laufzeit einen Echtzeitzugriff auf Bilder ermöglicht.


1

Ein Ladebildschirm kann auch als "Schnittszene" (http://en.wikipedia.org/wiki/Cutscene) verwendet werden, um dem Benutzer die Möglichkeit zu geben, zu Atem zu kommen, mehr über Ihre Spielgeschichte und -funktionen zu erfahren oder um zu versuchen, ihnen eine kostenpflichtige Version / In-App-Kauf zu verkaufen


1

Ich denke, moderne Spiele hätten in der Lage sein müssen, Ladebildschirme loszuwerden.

Ich vermute, der wahre Grund, warum wir immer noch Ladebildschirme haben, ist, dass die meisten Spiele für die Ausführung auf Xbox 360-Hardware ausgelegt sind. Als solche sind sie in der Menge an RAM begrenzt, in die sie Sachen laden können, und in wie viel Threading sie tun können. Wenn Sie nicht genug RAM haben, müssen Sie eine Menge Dinge aus dem Speicher löschen und sie dann von der Festplatte neu laden. Außerdem ist es einfacher, alles auf einmal zu laden.

Es gibt auch Zeiten, in denen Dinge wie die Festplatte zum Stillstand kommen könnten. Was passiert, wenn der Benutzer im Hintergrund Antivirus ausführt? Wenn Sie keine Inhalte vorladen, muss das Spiel möglicherweise angehalten werden, während darauf gewartet wird, dass das Netz geladen wird oder Dinge spontan angezeigt werden.

Spiele wie Skyrim bieten Ihnen eine weite Welt, auf die Sie so oft stoßen können, wie Sie möchten. Sobald Sie jedoch eine Tür öffnen, um einen relativ kleinen Dungeon zu laden, bleibt ein Ladebildschirm hängen.

Der einzige Grund, warum ich sehen konnte, dass der Dungeon-Ladebildschirm benötigt wird, ist, wenn sie eine extra schwere vorgebackene Beleuchtung verwenden, die für Innenszenen verwendet wird, die zum Laden ziemlich groß sind (aus 1 riesigen Netz oder mit detaillierten Lichtkarten) oder einige Berechnungen erfordern zur Laufzeit. Ich glaube, die Skyrim-Dungeons bestehen nur aus modularen Netzen und nicht aus einem riesigen Netz (zumindest denke ich, dass Oblivion wo ist).

Es gibt keinen wirklichen Grund, mehr zu laden als das, was Sie beim Betreten des Levels tatsächlich sehen können. So wie Spiele keine Dinge rendern, die Sie sehen können, können Sie sofort auswählen, was Sie tatsächlich laden müssen. Sie können auch viele Dummy-Platzhalterobjekte einkleben. Anschließend können Sie mithilfe von Threading Objekte in der Umgebung, deren Maschen, Texturen usw. asynchron laden, während sich der Player in der Umgebung bewegt.

Die Art und Weise, wie ich Ladebildschirme loswerden würde, ist wie folgt:

  1. Laden Sie die grundlegenden Eigenschaften der Spielwelt. Globale Skripte.

  2. Laden Sie die Position des Spielers.

  3. Laden Sie die Gitterzelle / den BSP-Knoten dieser Position.

  4. Laden Sie nur die Begrenzungsrahmen der Objekte in dieser Zelle.

  5. Berechnen Sie, was tatsächlich gerendert werden würde (Tests an den Begrenzungsrahmen, möglicherweise Okklusions-Rendering-Tests).

  6. Laden Sie die Maschen des gerenderten Materials.

  7. Laden Sie die Materialien und Texturen der Maschen.

  8. Führen Sie weitere Tests durch, um festzustellen, ob mehr Regionen sichtbar sind und geladen werden müssen (dh fragen Sie ein Rendering einer gesamten Gitterzelle als Riesenwürfel ab).

  9. Sobald alles Sichtbare geladen ist, starten Sie das Rendern.

  10. Laden Sie den Rest des Materials in die Zellen und laden Sie nach Bedarf mehr Material. Laden Sie nahe gelegene Regionen und machen Sie einige grundlegende Vorhersagen über die Bewegungen des Spielers, um auszuwählen, welche Regionen zuerst geladen werden müssen. Fahren Sie fort, bis der Speicher voll ist.

Es gibt einige andere Dinge, die berücksichtigt werden müssen. Zum Beispiel müssen einige Dinge geladen werden, obwohl sie nicht sichtbar sind. Zum Beispiel müsste ein Feind, der außerhalb der Region hinter dem Spieler steht, aktiv sein, damit er auf den Spieler zulaufen und ihn angreifen kann. Möglicherweise ist das Okklusionstestmaterial nicht erforderlich, da Sie sofort etwas in der Nähe laden möchten, damit es dort ist, wenn sich der Player bewegt und es sichtbar wird. Es kann sich jedoch eine Sekunde rasieren, um direkt zum Render zu gelangen (aber wenn die Zeit so knapp ist, sind Sie es wahrscheinlich Probleme mit dem Erscheinen von Sachen bekommen).

Wenn möglich, sollten diese Schritte gestartet werden, bevor sie benötigt werden, und im Hintergrund abgefädelt werden. Wenn Sie sich beispielsweise im Hauptmenü des Spiels befinden, sollte es beginnen, den Startbereich vor dem Laden zu laden, nachdem Sie "Neues Spiel" (oder sobald das Menü angezeigt wird) und das letzte Speichern zum Fortfahren ausgewählt haben. Andere Speicher können vorgeladen werden, wenn Sie die Maus darüber bewegen. Wenn Sie sich einer Dungeontür nähern, sollte diese das nächste Level laden (obwohl Sie, wenn Sie das können, keine spezielle Dungeontür benötigen, da diese eigentlich nur einen Ladebildschirm auslösen soll). Laden Sie im Hintergrund, während das Video abgespielt wird. Auf diese Weise benötigen Sie nicht einmal einen kurzen Ladebildschirm.

Sie können eine Menge davon überspringen, wenn es Ihnen nichts ausmacht, dass Dinge auftauchen. So etwas wie Second Life lässt Sie nur Dinge erscheinen, da es aus dem Internet abgerufen wird und Sie nicht viel dagegen tun können. Assassins Glaubensbekenntnis hat den Effekt, dass Dinge in die Szene eindringen, sodass Sie möglicherweise aus künstlerischen Gründen mit Dingen davonkommen können.


2
Das ist für viele Spiele leider nicht machbar. Ein einzelner Bereich verfügt möglicherweise über genügend Texturen, um kaum in den Videospeicher einer GPU mit mittlerer Reichweite zu passen. Sie können also nicht sowohl den Startbereich als auch den letzten Speicherbereich vorladen (und was ist mit anderen Speicherungen, die der Benutzer möglicherweise auswählt?). Was passiert mit Portalen oder Skripten, die den Player einfach in einen anderen Bereich teleportieren, selbst wenn Streaming-Welten wie in Skyrim gestreamt werden? Bei 8 GB komprimierten Daten - von denen viele Texturdaten sind - können selbst moderne High-End-Gaming-PCs möglicherweise nicht alles vorladen.
Sean Middleditch

1
Darüber hinaus würde ich argumentieren, dass Spiele ein begründetes Interesse daran haben, nicht mehrere Bereiche in den Speicher laden zu können. Es hält sie davon ab, so viel Inhalt wie möglich in den jeweiligen Bereich zu stellen. Für viele Spiele ist dies kein Problem, aber für Open-World-Titel, die eine möglichst reichhaltige Erfahrung bieten möchten, ist jeder Umstand, bei dem Sie nicht an Ihre Grenzen stoßen, einer, bei dem Sie nicht so viel liefern der Spieler wie du sein könntest.
Steven Stadnicki

0

In Unity sind Szenen eine Kombination aus mehreren Spielobjekten. Wenn Sie also nicht alle Ihre Spielobjekte separat angeben und einzeln laden möchten, können Sie einfach eine vollständige Szene laden .

Beim Laden einer Szene in Unity werden die bereits vorhandenen Objekte verworfen und daher eine ganz neue Ebene geladen. Mit der DontDestroyOnLoad- Methode können Sie angeben, welche Objekte Sie behalten möchten .

In Ihren Build-Einstellungen können Sie beim Veröffentlichen eines Spiels auch angeben, welche Szenen in Ihrem Spiel verwendet werden, und diese in Ihren aktuellen Build aufnehmen . Dies ermöglicht die Unterscheidung zwischen mehreren Plattformen, die unterschiedliche Ebenen, aber dieselbe Codelogik enthalten.

Unity-spezifische Fragen können auch im Unity-Antworten-Forum gestellt werden. Diese Benutzer sind eher auf Unity spezialisiert als auf allgemeine Fragen zu Spiel-Engines.


Diese Antwort scheint nicht die Frage zu beantworten: nicht "Wie lade ich Levels?", Sondern "Warum sieht der Spieler" Laden ... "?"
Kevin Reid

@ KevinReid Ah ja, da hast du wahrscheinlich recht. Ich habe die Fragezeichen wahrscheinlich nicht gut verstanden.
Marnix

0

Die Einrichtung einer 3D-Grafikszene benötigt Zeit, und ihre Wartung kann einen Computer über seine Grenzen hinaus treiben. Der Inhalt benötigt viel Speicher. Der sichtbare Inhalt benötigt viel Zeit. Und wenn der Betrachter herauszoomt und zum Horizont schaut, kann sehr viel des gesamten Inhalts sichtbar werden. (Haben Sie jemals bemerkt, wie manche Spiele besser funktionieren, wenn Sie nicht zu weit herauszoomen? Haben Sie jemals bemerkt, dass Sie bei einigen Spielen nicht zu weit herauszoomen oder in den Horizont schauen können?)

Die Lösung besteht darin, einzelne Szenen mit begrenztem Inhalt einzurichten. Jetzt funktioniert das Spiel einwandfrei, bis der Betrachter eine Szene für eine andere verlässt. Zu diesem Zeitpunkt wird die alte Szene verworfen und eine neue Szene eingerichtet, was einige Zeit in Anspruch nimmt (und ein Ladebildschirm, um zu verhindern, dass sich der Benutzer langweilt). 3D-Engines versuchen normalerweise, während des Setups so viel Arbeit wie möglich zu erledigen, um die Grafiken später so flüssig wie möglich zu gestalten.

Ich habe Spiele gesehen, die eine schnelle, freie Bewegung und Zooms über eine ganze Welt ermöglichen. Es gibt dort wahrscheinlich viel Genie und viel mühsames Programmieren und Kunsthandwerk; Sie haben nicht nur eine kostenlose Grafiksoftware heruntergeladen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.