In che modo City-sim può simulare centinaia di personaggi?


8

I miei giochi di solito iniziano a rallentare abbastanza facilmente quando ci sono un paio di centinaia di scatole che rappresentano possibili personaggi. Mentre giochi come SimCity o persino Anno hanno centinaia di personaggi.

Mi sono reso conto che quei giochi non aggiornano tutto ad ogni tic, i bisogni sono gestiti a intervalli e non è un problema di rendering, ma tutte quelle piccole creature hanno un percorso individuale ecc
. Semplicemente non riesco a capire come possano tirare questo per migliaia di personaggi anche su macchine vecchie. Come lo fanno?

Questa domanda è stata aggiornata per fare riferimento a numeri enormi in cui le persone non contano davvero e sono semplicemente simulate per immersione ed estetica.

(Correlato se riferito a singoli personaggi: in che modo Dwarf Fortress tiene traccia di così tante entità senza perdere le prestazioni? )

(Domanda diversa ma forse correlata ?: Rendering di centinaia di personaggi animati in Unity3D )


2
Questo in realtà non sembra un duplicato per me. Mentre giochi come Dwarf Fortress simulano le azioni di ogni agente individualmente, una volta che ci avviciniamo ai giochi su scala urbana come descritto in questa domanda, non è più molto pratico. Invece, questi sims di solito operano a un livello più "frammentato" delle tendenze della popolazione, riempiendo i dettagli delle singole persone seguendo tali tendenze solo quando si guarda da vicino. A causa di queste differenze nelle strategie, penso che valga la pena riaprire e rispondere separatamente alla domanda collegata.
DMGregory

Ho apportato alcune modifiche per evidenziare le differenze. Come scollegare le domande?
MisteriosM,

L'ottimizzazione delle prestazioni è un campo molto ampio. Ci sono un milione di cose che potresti fare in modo sbagliato dal punto di vista delle prestazioni nel tuo gioco. Ma senza guardare l'output del tuo gioco e del tuo profiler, è difficile dire dove potrebbero essere i tuoi colli di bottiglia. Ora possiamo sparare al buio e riflettere sulla localizzazione della memoria, sulla parallelizzazione o sugli algoritmi avanzati di path path per più agenti, ma è difficile dire cosa sai già e cosa si applica al tuo gioco. Quindi temo che questa domanda sia troppo ampia.
Philipp,

Hai già provato il pool di oggetti? L'istanza è costosa, l'attivazione e la disattivazione di oggetti già istanziati non lo è (altrettanto)

Puoi anche usare un emettitore di particelle. Dal momento che sono in realtà solo una rappresentazione visiva di dati demografici, non devono essere intelligenti o complessi.
Stephan,

Risposte:


12

Come gran parte di Gamedev, la risposta a come i giochi di simulazione di città realizzano questa impresa apparentemente impossibile è: probabilmente non lo fanno. Lo stanno solo fingendo bene. ;)

Sims come questi in genere opereranno a livello "chunked", modellando gruppi di persone, quartieri, corridoi di traffico o altre dinamiche della città nel suo insieme, piuttosto che elaborare l'intelligenza artificiale per ognuno di migliaia o milioni di residenti.

Ci sono alcuni modi in cui possiamo avvicinarci a questo:

  • "Sparse" dal basso verso l'alto: qui simuliamo ancora i singoli residenti della città, ma non "troppi" di essi, e non tutti i frame. Potresti pensare a questo come un sondaggio o un censimento rilasciato a un campione casuale di persone ogni settimana. Interpoli i risultati per fornire stime della popolazione virtuale più ampia - dove vivono, la loro vocazione, reddito, dati demografici, ecc.

    Quindi, ad esempio, se simuli solo un centinaio di residenti nella tua città e 5 di loro sono studenti, puoi stimare che circa il 5% della popolazione della tua città è costituita da studenti e modellare di conseguenza la domanda di scuole.

    Potresti dover rigenerare i tuoi campioni casuali dalla distribuzione della popolazione della tua città di tanto in tanto, per evitare un eccessivo raggruppamento / scarsità (ad es. Se un quartiere diventa impopolare e tutti i residenti del tuo censimento si allontanano, vuoi notare l'esodo senza lasciarlo completamente privo di rappresentazione nella tua sim!)

  • Dall'alto verso il basso: qui ti viene in mente una formula principale che guarda la tua città e modella le sue dinamiche nel loro insieme. In uno stile simile alla macroeconomia, trascuriamo i dettagli dei singoli agenti o li consideriamo come una sorta di "fluido" di attività economica continuamente divisibile che scorre secondo le leggi basate sui principi.

    Invece di pensare alle preferenze individuali e alla variabilità delle persone, le regole del tuo gioco potrebbero assomigliare di più a equazioni differenziali relative a prossimità di servizi, aliquote fiscali, produttività, valori di proprietà e tassi di criminalità e ...

  • Middle-out: sono possibili vari ibridi tra i due - ad esempio, simulando ogni "fazione", "industria" o segmento demografico della città come propria meta-persona, prendendo le proprie decisioni individuali, ma distribuendole in una mappa di calore o funzione d'onda in tutta la città piuttosto che esistere in un solo corpo. O tagliare la città in quartieri che elaborano le proprie regole su scala ridotta in interazione con i loro vicini.

Ora, quando il giocatore si avvicina abbastanza da vedere le singole persone, o guarda i report delle statistiche che citano il numero di individui, queste non sono necessariamente la verità di base che viene utilizzata per eseguire la sim. Piuttosto, possono essere un prodotto inferito di esso.

Diciamo che ingrandiamo un particolare isolato. Dalla nostra sim città generale, conosciamo la popolazione approssimativa di questa parte della città, i tipi di attività che si svolgono lì, i momenti della giornata in cui è attivo. Quindi, su richiesta, possiamo generare un numero adeguato di persone con i dati demografici appropriati che svolgono quel tipo di attività lì. La loro intelligenza artificiale può essere semplice, forse come riprodurre un'animazione sul posto o seguire un waypoint verso il bordo della porta / schermo più vicino dove possono de-spawn.

Ciò significa che di solito non avremo bisogno di individuare i percorsi per ogni agente. Invece, possiamo fare un passaggio di mappatura del flusso principale su tutta la rete stradale, per identificare il volume complessivo di diversi tipi di traffico lungo ciascun segmento. Quindi possiamo generare abbastanza veicoli dei giusti tipi in quei segmenti per riflettere quella densità. Una volta generati, gli agenti possono semplicemente cavarsela con il governo locale o waypoint pre-generati per arrivare a un punto di de-spawn. Mantenere gli armadi di spawn lungo ciascun segmento correttamente bilanciati con il tasso di de-spawn ci consente di mantenere qualsiasi volume costante di traffico che vogliamo.

In questo modo, le persone e i veicoli che il giocatore vede sono paramenti, come un sistema di particelle truccato che dà l'impressione di nuvole realistiche senza effettivamente calcolare la dinamica dei fluidi completa su ogni molecola di vapore. ;) Li sistemiamo come set per comunicare lo stato della simulazione, piuttosto che guidarlo.

Per molti giochi questo sarà sufficiente. Il giocatore spesso non è in grado di selezionare un singolo agente per interrogarlo su cosa stanno facendo lì o dove stanno andando, quindi è difficile individuare le cuciture e notare se un agente fa qualcosa che non ha senso, come guidare tre volte nello stesso blocco.

Ma se hai bisogno di agenti assolutamente coerenti in un ambiente densamente popolato, puoi esaminare una tecnica accurata chiamata " Generazione Alibi ". Questa è una sofisticata tecnica di campionamento che ti consente di generare agenti che ti aspetteresti di trovare in una determinata situazione. Quindi, se il giocatore cerca di investigarne uno in modo più dettagliato, puoi campionare retroattivamente ulteriori dettagli su ciò che stanno facendo, in modo coerente con ciò che il giocatore ha osservato finora. L'idea è che si ottengono ancora i benefici leggeri delle persone "stand-in" di cartone per la maggior parte del tempo, ma sul posto possono creare un alibi plausibile da passare come agenti completamente simulati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.