Meine Spiele beginnen normalerweise ziemlich leicht zu verzögern, wenn es ein paar hundert Felder gibt, die mögliche Charaktere darstellen. Während Spiele wie SimCity oder sogar Anno Hunderte von Charakteren haben.
Mir wurde klar, dass diese Spiele nicht bei jedem Tic alles aktualisieren, die Anforderungen in Intervallen behandelt werden und es kein Renderproblem ist, aber all diese winzigen Kreaturen haben eine individuelle Wegfindung usw.
Ich kann einfach nicht verstehen, wie sie ziehen können das für Tausende von Charakteren sogar auf alten Maschinen. Wie machen sie das?
Diese Frage wurde aktualisiert, um sich auf große Zahlen zu beziehen, bei denen Personen nicht wirklich zählen und einfach für das Eintauchen und die Ästhetik simuliert werden.
(Bezogen auf einzelne Charaktere: Wie verfolgt die Zwergenfestung so viele Entitäten, ohne an Leistung zu verlieren? )
( Andere Frage, aber vielleicht verwandt?: Hunderte von animierten Charakteren in Unity3D rendern )
quelle
Antworten:
Wie so viel von Gamedev lautet die Antwort darauf, wie City-Sim-Spiele diese scheinbar unmögliche Leistung vollbringen: Sie tun es wahrscheinlich nicht. Sie täuschen es nur gut vor. ;)
Sims wie diese arbeiten normalerweise auf einer "Chunked" -Ebene und modellieren Gruppen von Menschen, Nachbarschaften, Verkehrskorridoren oder andere Stadtdynamiken als Ganzes, anstatt KI für jeden von Tausenden oder Millionen von Einwohnern zu verarbeiten.
Es gibt einige Möglichkeiten, wie wir dies angehen können:
"Sparse" von unten nach oben: Hier simulieren wir immer noch einzelne Stadtbewohner, aber nicht "zu viele" von ihnen und nicht jeden Frame. Sie können sich dies wie eine Umfrage oder Volkszählung vorstellen, die jede Woche an eine zufällige Stichprobe von Personen ausgegeben wird. Sie interpolieren die Ergebnisse, um Schätzungen der breiteren virtuellen Bevölkerung zu erhalten - wo sie leben, ihre Berufung, ihr Einkommen, ihre Demografie usw.
Wenn Sie beispielsweise nur hundert Einwohner in Ihrer Stadt simulieren und fünf von ihnen Schüler sind, können Sie schätzen, dass etwa 5% der Bevölkerung Ihrer Stadt Schüler sind, und die Nachfrage nach Schulen entsprechend modellieren.
Möglicherweise müssen Sie Ihre Zufallsstichproben gelegentlich aus der Bevölkerungsverteilung Ihrer Stadt neu generieren, um eine übermäßige Häufung / Spärlichkeit zu vermeiden (z. B. wenn eine Nachbarschaft unbeliebt wird und alle Einwohner Ihrer Volkszählung wegziehen, möchten Sie den Exodus notieren, ohne ihn vollständig zu verlassen ohne Darstellung in deiner Sim!)
Von oben nach unten: Hier finden Sie eine Masterformel, die Ihre Stadt betrachtet und ihre Dynamik als Ganzes modelliert. In einem ähnlichen Stil wie in der Makroökonomie vernachlässigen wir die Details einzelner Agenten oder betrachten sie als eine Art kontinuierlich teilbare "Flüssigkeit" wirtschaftlicher Aktivität, die nach prinzipienbasierten Gesetzen fließt.
Anstatt über individuelle Vorlieben und Variabilität von Personen nachzudenken, sehen Ihre Spielregeln möglicherweise eher wie Differentialgleichungen aus, die Annäherungsnähe und Steuersätze und Produktivitäten sowie Immobilienwerte und Kriminalitätsraten und ... und ...
Middle-out: Verschiedene Hybriden zwischen den beiden sind möglich - zum Beispiel die Simulation jeder "Fraktion", "Industrie" oder des demografischen Segments der Stadt als ihre eigene Meta-Person, die ihre eigenen individuellen Entscheidungen trifft, aber in einer Heatmap verteilt oder Wellenfunktion in der ganzen Stadt, anstatt in einem Körper zu existieren. Oder die Stadt in Stadtteile aufteilen, in denen jeder im Zusammenspiel mit seinen Nachbarn seine eigenen kleineren Regeln verarbeitet.
Wenn der Spieler nun nah genug heran zoomt, um einzelne Personen zu sehen, oder sich Berichte mit Statistiken ansieht, in denen die Anzahl der Personen angegeben ist, ist dies nicht unbedingt die Grundwahrheit, die zum Ausführen der Sim verwendet wird. Sie können vielmehr ein abgeleitetes Produkt davon sein.
Angenommen, wir vergrößern einen bestimmten Stadtblock. Aus unserer gesamten Stadtsimulation kennen wir die raue Bevölkerung dieses Stadtteils, die Arten von Aktivitäten, die dort stattfinden, die Tageszeiten, zu denen er aktiv ist. Auf Anfrage können wir also eine angemessene Anzahl von Personen der entsprechenden Bevölkerungsgruppe hervorbringen, die diese Art von Aktivitäten dort ausführen. Ihre KI kann sehr einfach sein, vielleicht so wenig wie das Abspielen einer Animation an Ort und Stelle oder das Folgen eines Wegpunkts zur nächsten Tür- / Bildschirmkante, an der sie das Laichen beenden können.
Dies bedeutet, dass wir normalerweise nicht für jeden Agenten eine Pfadfindung durchführen müssen. Stattdessen können wir einen Master-Flow-Mapping-Durchgang für das gesamte Straßennetz durchführen, um das Gesamtvolumen verschiedener Verkehrsarten entlang jedes Segments zu ermitteln. Dann können wir in diesen Segmenten genügend Fahrzeuge des richtigen Typs erzeugen, um diese Dichte widerzuspiegeln. Einmal erzeugt, können Agenten nur mit lokaler Steuerung oder vorgenerierten Wegpunkten auskommen, um zu einem De-Spawn-Punkt zu gelangen. Wenn wir die Spawn-Schränke entlang jedes Segments korrekt mit der Entlaichungsrate im Gleichgewicht halten, können wir das gewünschte konstante Verkehrsaufkommen aufrechterhalten.
Auf diese Weise sind die Personen und Fahrzeuge, die der Spieler sieht, Figuren wie ein aufgemotztes Partikelsystem, das den Eindruck realistischer Wolken erweckt, ohne tatsächlich die volle Fluiddynamik für jedes Dampfmolekül zu berechnen. ;) Wir arrangieren sie als Set-Dressing, um den Status der Simulation zu kommunizieren, anstatt sie zu steuern.
Für viele Spiele wird dies ausreichen. Der Spieler ist oft nicht in der Lage, einen einzelnen Agenten auszuwählen, um ihn zu befragen, was er dort tut oder wohin er geht. Daher ist es schwierig, die Nähte zu erkennen und festzustellen, ob ein Agent etwas tut, das keinen Sinn ergibt. als würde man dreimal um denselben Block fahren.
Wenn Sie jedoch absolut konsistente Agenten in einer dicht besiedelten Umgebung benötigen, können Sie sich eine saubere Technik ansehen, die als " Alibi- Generation " bezeichnet wird. Dies ist eine ausgeklügelte Stichprobenmethode, mit der Sie Agenten generieren können, die Sie in einer bestimmten Situation erwarten würden. Wenn der Spieler dann versucht, eine detailliertere Untersuchung durchzuführen, können Sie rückwirkend mehr Details über das, was er tut, auf eine Weise abtasten, die mit dem übereinstimmt, was der Spieler bisher über sie beobachtet hat. Die Idee ist, dass Sie die meiste Zeit immer noch die leichten Vorteile von "Papp-Ersatz" -Personen nutzen, aber vor Ort können sie ein plausibles Alibi bilden, das als vollständig simulierte Agenten gilt.
quelle