Genauso wie riesige Open-World-Spiele massive Karten dynamisch laden, können wir dann nicht separate Karten, Menüs und praktisch jede Benutzeroberfläche oder 3D-Einstellung über dieselbe dynamische Lademethode laden? Ohne die Umgebung zu verändern, scheinen Schnittstellen und verschiedene Orte im Spiel dynamisch geladen zu werden, so wie massive offene Weltkarten geladen werden, wenn Sie sie durchlaufen.
Warum wird das nicht gemacht? Ich sehe so viele moderne Spiele, bei denen man eine Minute oder länger warten muss, während das Match / die Karte / das Level geladen wird. Ich weiß, dass es eine Latenz gibt, die mit dem Verbinden von Peers verbunden ist, aber das dauert meiner Erfahrung nach nicht mehr als ein paar Momente. Welche Probleme treten bei diesem Konzept auf, damit es nicht mehr zum Laden von Karten- / Ebenen- / Schnittstellendaten verwendet werden kann?
Antworten:
Die Antwort lautet ja, dies könnte in den meisten Fällen zumindest teilweise geschehen.
Es gibt viele Gründe, warum dies nicht getan wird:
quelle
Wenn Ihre Menüs eine Menge Assets enthalten, dauert das Laden dieser Assets einige Zeit. Sie haben auch keine Ahnung, in welcher Reihenfolge die Benutzer in Ihrem Menü navigieren. Sie könnten auf Optionen -> Zurück -> Guthaben oder Guthaben -> Zurück -> Spiel in schneller Folge starten klicken. Es gibt also keine vernünftige Streaming-Strategie.
In einem Open-World-Spiel wissen Sie, dass sich der Spieler nicht schneller als mit einer bestimmten Geschwindigkeit bewegen kann. Sie müssen also die detaillierten Versionen der fernen Standorte erst laden, wenn sie sich ihnen nähern.
quelle
Ein wichtiger Faktor für die Machbarkeit einer solchen Lösung ist die Vorhersehbarkeit des Ladebedarfs. Wenn der Spieler völlig neue Level lädt, ohne zu ahnen, was er wählen wird, ist eine vollkommen nahtlose Lösung einfach nicht möglich. Zum Beispiel, wenn der Spieler ein beliebiges Level im Spiel auswählen kann, aus dem er spielen möchte, oder wenn er die Freiheit hat, sich in Open-World-Spielen in völlig andere Gebiete zu teleportieren.
Bei einigen Halo- Spielen wird das ausgewählte Level im Hintergrund geladen, während Multiplayer-Spiele eingerichtet werden. Dies verkürzt die Wartezeit, wenn die Spieler startbereit sind, und ist wahrscheinlich die beste Lösung, wenn der Spieler verschiedene Levels mit völlig unterschiedlichen Assets frei wählen kann.
Natürlich sagten Sie "ohne die Umgebung zu verändern", aber ich wollte nur das Halo- Beispiel aufgreifen , da es etwas ist, von dem ich mehr sehen möchte.
In einer fortlaufenden Kampagne oder wenn der Entwickler viel Kontrolle über den Standort des Spielers hat, ist eine solche Lösung, wie Sie sagen, mit Sicherheit rentabel. Naughty Dog verzichtet gerne auf Ladezeiten, wobei Jak und Daxter bekanntermaßen keine Ladezeiten auf der PS2 haben und Uncharted- Spiele zu Beginn nur eine Ladezeit haben.
Für viele ist die Ladezeit jedoch kein Problem, das gelöst werden muss . Oder es ist ein Problem , das auf die Entwickler die Prioritäten sehr gering ist, wenn es immer mehr , die zwischen getan werden könnte , jetzt und Release - Datum .
quelle
Zeit.
Sie brauchen Zeit, um Zeit zu sparen. Oder Sie brauchen Geld, um den Zeitmangel auszugleichen. In jedem Fall "Keine Ladezeit!" ist ein Feature, das nur diejenigen bieten können, die den Luxus haben, es sich zu leisten. Es erfordert sehr sorgfältige Planung, und Sie müssen genau wissen, was Sie tun, und nicht alle Spieleentwickler verfügen über die Ressourcen, um dies zu tun.
quelle
Letztendlich sind die Ressourcen begrenzt.
Open-World-Spiele und insbesondere MMOs sind stark auf Vorhersagbarkeit ausgelegt - Sie wissen immer, welche Daten Sie rechtzeitig laden müssen. Sie können dies in der Architektur der Welten sehen - immer, wenn eine Menge Ressourcen geladen werden müssen, haben Sie eine Möglichkeit, den Benutzer daran zu hindern, das Zeug zu sehen, das noch nicht geladen ist. Der häufigste Weg sind Tore und Eingänge, die Ihnen den Blick in den nächsten Bereich für die entscheidenden Sekunden versperren, die für das Laden erforderlich sind. Die meisten MMOs verwenden auch weniger detaillierte Modelle und Texturen, was die Ladezeiten erheblich verkürzt.
Einige Dinge sind trotz sorgfältiger Planung immer noch unvorhersehbar. Beispielsweise können von Spielern benutzerdefinierte Banner getragen werden, die erst angezeigt werden, wenn die relevanten Daten über das Netzwerk an Ihren Computer gesendet wurden. Natürlich versuchen die meisten Spiele, dies zu begrenzen, um es billiger zu machen (z. B. sind die Banner von Diablo III einfache Kompositionen, die sich leicht mit nur wenigen Datenbytes senden lassen). Aber letztendlich muss man manchmal nur darauf warten, dass Daten eintreffen. Während des Ladevorgangs muss etwas angezeigt werden. In vielen Spielen kann dies zu einer Unterbrechung des Eintauchens führen, da ein graues, detailarmes Modell angezeigt wird, während auf das Laden der Daten gewartet wird.
Und mit all dem ist das Laden auf diese Weise ein gelöstes Problem (TM), aber das macht es nicht einfach. Es kostet viel Ressourcen und Zeit, sowohl bei der Optimierung der Ressourcen als auch bei ihrer Verwendung, um ein reibungsloses Spielerlebnis zu gewährleisten, und im Code selbst - asynchroner Code ist hart. Dies kann auch zu einem geringeren Spielerlebnis führen, selbst wenn alles in Ordnung ist. Es bedeutet, dass Sie sicherstellen müssen, dass Sie die Bandbreitenfähigkeiten Ihres kleinsten gemeinsamen Nenners nicht überschreiten. Daher müssen Sie die Qualität von Modellen und Texturen verringern oder sie verbessern weniger vielfältig, und die Geometrie Ihrer Welten ist stark eingeschränkt. Wenn Sie dies nicht tun, wird das Spiel nicht spielbar sein - während ich mich an Leute erinnere, die Spiele gespielt haben, die 10 Minuten (oder länger!) Gebraucht haben, um eine Karte zu laden, einfach weil ihr Computer der Aufgabe, dem Spiel, nicht ganz gewachsen war selbst läuft danach gut. Wenn es stattdessen ein nahtloses Laden hätte, würde das Spiel die ganze Zeit nur einfrieren oder hässliche Texturen und Modelle anzeigen, während es darauf wartet, dass die Daten geladen werden. Aufgeschobenes Laden ist keine Win-Win-Situation, sondern ein Kompromiss, wie die meisten technischen Probleme :)
quelle
Ein Grund, warum dynamisches Laden nicht immer die ideale Lösung ist, die andere Antworten nicht wirklich in Betracht gezogen haben, sind meiner Meinung nach auch Pop-In und andere Grafikartefakte.
Die Vorhersage, was geladen und was nicht geladen werden soll, schlägt häufig fehl, und dies kann zu einer nachteiligen Erfahrung werden. Eines der schlimmsten Beispiele dafür war Rage von id Software. Zumindest in den frühen Versionen haben die Megatexture-Systeme dafür gesorgt, dass selbst beim allzu schnellen Herumdrehen enorme Mengen an Texturen und sogar Geometrieartefakten sichtbar wurden, bevor sie langsam verblassten.
Diese Probleme sind einfach kein Problem, alles ist vorinstalliert.
Was zu beachten ist, muss nicht unbedingt geladen, sondern entladen werden. Wenn Sie nur so viel Budget für Speicherplatz haben, wenn Sie neue Dinge laden, welche alten müssen entfernt werden? Wie sicher sind Sie, dass diese Assets in den nächsten Sekunden nicht verwendet werden? Dies sind schwer zu lösende Probleme.
Wenn jeder Gameplay-Status klein genug ist, um in ein gemeinsames Systembudget zu passen, ist jeder Vorteil offensichtlich. Statt geladen zu werden, betritt man einfach ein Level und die Dinge verschwinden, während man spielt. Wie die Hauptantworten jedoch vermuten lassen, wäre die Ladezeit für ein kleines Spiel ohnehin nicht zu lang, um sich Sorgen zu machen.
Ich denke, es lohnt sich, über die Gründe nachzudenken, warum dynamische Ladesysteme ursprünglich erstellt wurden, da Sie wissen, dass einige Ihrer Spielzustände für ein gemeinsames System zu groß sind und ein Spiel dieser Größe einfach nicht vollständig vorgeladen werden kann.
quelle
Ein häufiger Grund ist, dass es nicht immer gleich einfach ist, zu bestimmen, ob in naher Zukunft eine Ressource benötigt wird.
Da Sie als Beispiel Terrain Paging verwendet haben, werde ich damit fortfahren.
Wenn Sie sich in einem bestimmten Kartenraster befinden, ist es durchaus sinnvoll, alle angrenzenden Kartenraster im Hintergrund zu laden. Sie wissen, dass der Benutzer bestenfalls einen von diesen eingeben kann. Wenn dies der Fall ist, können Sie die nicht mehr angrenzenden und die jetzt vorhandenen entladen. Dies haben Sie bemerkt.
Stellen Sie sich nun schnelles Reisen vor. Es gibt absolut keine Möglichkeit, vorherzusagen, wohin der Benutzer gehen möchte. Sie haben (normalerweise) fast die gesamte Karte zur Auswahl. Das Vorladen aller möglichen Schnellreiseziele würde viel zu viel Speicher beanspruchen (Sie könnten auch die gesamte Karte zuerst in den Speicher laden) und viel zu viel Zeit (vorausgesetzt, Sie hätten nicht die gesamte Karte vorgeladen). Wann würde das passieren? Wann öffnen sie den Schnellreisedialog? Das Problem würde sich nur um ein Vielfaches verschlimmern!
Aus diesem Grund haben auch die meisten Spiele mit "unbeladenem" Terrain-Paging noch Ladebildschirme für schnelle Fahrten. Wenn Sie sich schnell genug bewegen, können Sie auch in Spielen mit nicht geladenen Karten manchmal Ladebildschirme auslösen (ich erinnere mich, dass Sie dies in TES Oblivion getan haben).
Stellen Sie sich nun vor, dass dies auf Spielressourcen im Allgemeinen zutrifft, bei denen Beziehungen oft nicht offensichtlich sind. Am Ende müssen Sie entweder alle möglichen Optionen laden oder erraten, was der Benutzer tun wird. Das Erraten ist kostspielig (sowohl in der Entwicklung als auch in der CPU) und ein komplexes Durcheinander, das zu programmieren ist. Spezifische Beispiele:
Es könnte Wege geben, um einige dieser Probleme zu umgehen, aber das kostet echtes Geld, um es herauszufinden. Die meisten Gamer akzeptieren angemessene Ladebildschirme und sind eher bereit, mehr für Hardware auszugeben, um sie zu entschärfen. Es wird als Hardwareproblem gesehen , nicht als Spiel , es sei denn, es ist ungewöhnlich übermäßig oder störend (wie das Laden in der Mitte eines Levels).
Und denken Sie daran, dass das Laden im Hintergrund nicht kostenlos ist. Die moderne Verwendung des Terrains zum Laden im Hintergrund und einiger Modelldateien hat in der Regel nur minimale Auswirkungen. Wenn Sie jedoch plötzlich von vielen verschiedenen Ressourcen ausgehen, insbesondere, wenn Sie keine zuverlässigen Metriken haben und viele Ressourcen entladen und überflüssige laden müssen können Sie das System zu Staub zermahlen.
Die Idee des Hintergrundladens besteht darin, die Totzyklen für eine bessere Verwendung zu verwenden, aber es gibt nur so viele Totzyklen, die verwendet werden können. Gleiches gilt für den Speicher - durch das Vorladen kann die Speichernutzung eines Spiels erheblich erhöht werden. Mit einem Ladebildschirm können Sie die vorhandenen Ressourcen sichern. Kein Luxus im Hintergrund, was bedeutet, dass der Speicherbedarf des Spiels allein in dieser Hinsicht verdoppelt werden könnte.
quelle
Dies ist ein häufiges Problem, das sich aus der Tatsache ergibt, dass Spiele Soft-Realtime-Produkte sind, bei denen eine verspätete Übermittlung von Inhalten nicht so nützlich ist wie eine pünktliche Übermittlung (im Gegensatz zu Hard-Realtime, wie bei Autos in Computern, bei denen eine verspätete Übermittlung erfolgt) kann nicht besser sein als gar keine Lieferung). Sie müssen entscheiden, was und wo geladen werden soll.
Manchmal sind die verspäteten Lieferungen besonders schlecht. Wenn Sie zum Beispiel in einer Welt herumrennen dürfen, bevor alle Wände beladen sind, können Sie hinter eine Wand gelangen, die Sie niemals hinter sich gelassen hätten, wenn das Spiel die Wände beladen hätte, bevor Sie sich bewegen konnten. Es ist nicht immer einfach zu sagen, wann Sie mit einem "faulen" Laden von Inhalten davonkommen können und wann Sie garantieren müssen, dass der Inhalt vollständig geladen ist.
Das dynamische Laden ist auch weitaus komplizierter. Sie müssen ständig überlegen, was zu tun ist, wenn die Ressource noch nicht geladen wurde. Dies belastet die Entwicklungsressourcen. Es ist viel einfacher zu entwickeln, wenn Sie sich auf die vorhandenen Ressourcen verlassen können.
Die Latenzen sind auch nicht immer akzeptabel. Ich habe von Fällen in Starcraft gehört, in denen Sie Ihr Spiel "aufwärmen" würden, indem Sie eine Karte laden, die den Nebeneffekt hat, dass jedes dynamisch geladene Modell / Bild zwischengespeichert wird. Sie würden dann beenden und das Spiel normal spielen. Für die Elite-Gamer minimierte dies das Stottern der Benutzeroberfläche, das sich tatsächlich auf ihr Gameplay auswirkte. Es ist schwierig herauszufinden, welche Latenzen für Benutzer akzeptabel sind und welche nicht.
quelle