Wie kann City-sim Hunderte von Zeichen simulieren?

8

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 )

MisteriosM
quelle
2
Das sieht für mich eigentlich nicht nach einem Duplikat aus. Während Spiele wie Dwarf Fortress die Aktionen jedes Agenten einzeln simulieren, ist dies nicht mehr sehr praktisch, sobald wir die in dieser Frage beschriebenen Spiele im Stadtmaßstab erreicht haben. Stattdessen arbeiten diese Sims in der Regel auf einer "ausgeprägteren" Ebene der Bevölkerungsentwicklung und füllen die Details einzelner Personen, die diesen Trends folgen, nur aus, wenn Sie genau hinschauen. Aufgrund dieser unterschiedlichen Strategien halte ich es für sinnvoll, diese getrennt von der verknüpften Frage erneut zu öffnen und zu beantworten.
DMGregory
Ich habe einige Änderungen vorgenommen, um die Unterschiede hervorzuheben. Wie lösche ich die Verknüpfung der Fragen?
MisteriosM
Leistungsoptimierung ist ein sehr weites Feld. Es gibt eine Million Dinge, die Sie in Bezug auf die Leistung in Ihrem Spiel falsch machen könnten. Aber ohne auf Ihre Spiel- und Profiler-Ausgabe zu achten, ist es schwer zu sagen, wo Ihre Engpässe liegen könnten. Wir könnten jetzt im Dunkeln fotografieren und über Speicherlokalität, Parallelisierung oder erweiterte Pfadfindungsalgorithmen für mehrere Agenten nachdenken, aber es ist schwer zu sagen, was Sie bereits wissen und was für Ihr Spiel gilt. Ich befürchte also, dass diese Frage zu weit gefasst ist.
Philipp
Haben Sie schon versucht, Objekte zu bündeln? Die Instanziierung ist kostspielig, das Aktivieren und Deaktivieren bereits instanziierter Objekte ist nicht (so viel)
Sie können auch einen Partikelemitter verwenden. Da sie wirklich nur eine visuelle Darstellung demografischer Daten sind, müssen sie nicht intelligent oder komplex sein.
Stephan

Antworten:

12

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.

DMGregory
quelle