Mis juegos generalmente comienzan a retrasarse con bastante facilidad cuando hay un par de cientos de cajas que representan posibles personajes. Mientras que juegos como SimCity o incluso Anno tienen cientos de personajes.
Me di cuenta de que esos juegos no actualizan todo en cada tic, las necesidades se manejan a intervalos y no es un problema de renderizado, pero todas esas pequeñas criaturas tienen un camino de búsqueda individual, etc.
Simplemente no puedo entender cómo pueden tirar eso apagado para miles de personajes incluso en máquinas viejas. ¿Cómo lo hacen?
Esta pregunta se actualizó para referirse a grandes números donde las personas realmente no cuentan y simplemente se simulan para inmersión y estética.
(Relacionado si se refiere a personajes individuales: ¿Cómo hace Dwarf Fortress para rastrear tantas entidades sin perder rendimiento? )
(¿Pregunta diferente pero tal vez relacionada ?: Representación de cientos de personajes animados en Unity3D )
fuente
Respuestas:
Como gran parte de gamedev, la respuesta a cómo los juegos de simulación de ciudad logran esta hazaña aparentemente imposible es: probablemente no lo hagan. Solo lo están fingiendo bien. ;)
Sims como estos generalmente operarán en un nivel "fragmentado", modelando grupos de personas, vecindarios, corredores de tráfico u otras dinámicas de la ciudad en su conjunto, en lugar de procesar AI para cada uno de miles o millones de residentes.
Hay algunas maneras en que podríamos abordar esto:
"Escaso" de abajo hacia arriba: aquí todavía simulamos residentes individuales de la ciudad, pero no "demasiados" de ellos, y no todos los cuadros. Podría pensar en esto como una encuesta o censo emitido a una muestra aleatoria de las personas cada semana. Interpola los resultados para obtener estimaciones de la población virtual más amplia: dónde viven, su vocación, ingresos, demografía, etc.
Entonces, por ejemplo, si solo simula un centenar de residentes en su ciudad, y 5 de ellos son estudiantes, puede estimar que aproximadamente el 5% de la población de su ciudad son estudiantes, y modelar la demanda de escuelas en consecuencia.
Es posible que deba volver a generar sus muestras aleatorias de la distribución de la población de su ciudad de vez en cuando, para evitar el exceso de aglomeración / dispersión (por ejemplo, si un vecindario se vuelve impopular y todos los residentes de su censo se mudan, debe anotar el éxodo sin abandonarlo por completo sin representación en tu sim!)
De arriba hacia abajo: aquí se te ocurre una fórmula maestra que analiza tu ciudad y modela su dinámica en su conjunto. En un estilo similar a la macroeconomía, descuidamos los detalles de los agentes individuales, o los consideramos como un tipo de "fluido" de actividad económica continuamente divisible que fluye de acuerdo con las leyes basadas en principios.
En lugar de pensar en las preferencias individuales y la variabilidad de las personas, las reglas de su juego podrían parecerse más a ecuaciones diferenciales que relacionan proximidades de servicios y tasas impositivas y productividades y valores de propiedad y tasas de criminalidad y ...
Intermedio: son posibles varios híbridos entre los dos, por ejemplo, simulando cada "facción", "industria" o segmento demográfico de la ciudad como su propia metapersona, tomando sus propias decisiones individuales, pero dispersas en un mapa de calor o la función de onda en toda la ciudad en lugar de existir en un solo cuerpo. O fragmentando la ciudad en barrios donde cada uno procesa sus propias reglas a menor escala en interacción con sus vecinos.
Ahora, cuando el jugador se acerca lo suficiente como para ver personas individuales, o mira informes de estadísticas que citan números de personas, esas no son necesariamente la verdad básica que se está utilizando para ejecutar el sim. Más bien, pueden ser un producto inferido de ello.
Digamos que nos acercamos a una manzana en particular. De nuestro simulador de ciudad en general, conocemos la población aproximada de esta parte de la ciudad, los tipos de actividades que ocurren allí, los momentos del día en que está activo. Entonces, bajo demanda, podemos generar un número apropiado de personas de la demografía apropiada que realizan ese tipo de actividades allí. Su IA puede ser muy simple, tal vez tan poco como reproducir una animación en el lugar o seguir un punto de referencia hasta el borde de la puerta / pantalla más cercano donde pueden desovar.
Esto significa que generalmente no necesitaremos encontrar rutas para cada agente. En cambio, podemos hacer un pase maestro de mapeo de flujo en toda la red de carreteras, para identificar el volumen general de diferentes tipos de tráfico a lo largo de cada segmento. Entonces podemos generar suficientes vehículos del tipo correcto en esos segmentos para reflejar esa densidad. Una vez engendrados, los agentes pueden pasar con la dirección local o puntos de ruta pregenerados para llegar a un punto de desove. Mantener los armarios de desove a lo largo de cada segmento correctamente equilibrados con la tasa de desove nos permite mantener cualquier volumen constante de tráfico que queramos.
De esta manera, las personas y los vehículos que ve el jugador son productos, como un sistema de partículas agotado que da la impresión de nubes realistas sin calcular la dinámica de fluidos en cada molécula de vapor. ;) Los organizamos como vestidor establecido para comunicar el estado de la simulación, en lugar de conducirlo.
Para muchos juegos esto será suficiente. El jugador a menudo no puede seleccionar un agente individual para interrogarlo sobre lo que está haciendo allí o hacia dónde va, por lo que es difícil detectar las costuras y notar si un agente hace algo que no tiene sentido, como conducir por la misma cuadra tres veces.
Pero si necesita agentes absolutamente consistentes en un entorno densamente poblado, puede buscar una técnica ordenada llamada " Generación de coartada ". Esta es una técnica de muestreo sofisticada que le permite generar agentes que esperaría encontrar en una situación dada. Luego, si el jugador intenta investigar uno con más detalle, puede muestrear retroactivamente más detalles sobre lo que está haciendo, de una manera que sea consistente con lo que el jugador ha observado sobre ellos hasta ahora. La idea es que sigas obteniendo los beneficios livianos de las personas "de cartón" la mayor parte del tiempo, pero en el acto pueden inventar una coartada plausible para pasar como agentes completamente simulados.
fuente