Generación de nivel aleatorio / de procedimiento versus generación realizada previamente

31

¿Cuáles son las ventajas / desventajas de usar la generación aleatoria / de procedimiento frente a los niveles prefabricados?

Parece que hay pocos en los que puedo pensar, aparte del hecho de que los artículos pueden ser un problema para distribuir en terrenos generados aleatoriamente, y que el terreno generado puede parecer extraño.

Sin embargo, la desventaja de los niveles realizados anteriormente es que necesitaría hacer un editor de niveles. No puedo decidir qué es mejor usar.

¿Podrían las respuestas incluir código / ejemplos de generación procesal y prefabricada, así como los pros / contras?

Pipa
fuente

Respuestas:

26

Para responder brevemente a su pregunta principal primero, las principales ventajas de un mundo de juego generado por procedimientos son:

  • El mundo puede ser enorme , mucho más grande que cualquier mundo de juego diseñado manualmente.

  • El mundo (o al menos partes de él) se puede regenerar para cada juego, aumentando potencialmente el valor de repetición, ya que el jugador siempre tendrá algo nuevo que descubrir.

Por el contrario, las principales desventajas de la generación de procedimientos son que:

  • Dependiendo de los métodos de generación utilizados, puede ser difícil asegurarse de que el mundo siempre se puede jugar, es decir, que el jugador no puede quedarse atascado sin ninguna forma de proceder solo porque tienen mala suerte con la generación mundial.

  • Incluso si puedes evitar generar mundos completamente imposibles de jugar, la generación de mundos aleatorios puede conducir a un nivel de dificultad muy variable: a veces, el jugador puede encontrar todo lo que necesita convenientemente alineado para la toma, a veces pueden pasar mucho tiempo sin encontrar nada útil .

    Durante largos períodos, tales fluctuaciones aleatorias tienden a promediar, pero si la dificultad del juego es, por ejemplo, muy pesada (típica para los juegos de supervivencia), un mal comienzo podría arruinar un juego, mientras que un comienzo muy afortunado podría privarlo de todo desafío.

  • La generación procesal mal hecha puede hacer que el mundo se sienta monótono y aburrido: después de haber visto una docena de laberintos generados aleatoriamente, todos comienzan a verse iguales, incluso si difieren en detalles.

  • Además, si el mundo del juego se regenera por completo para cada juego, no habrá ubicaciones o características fijas que el jugador pueda reconocer de los juegos anteriores. Tal falta de familiaridad podría hacer que sea más difícil para el jugador participar en el juego a nivel emocional o compartir experiencias con otros jugadores.

También hay una cosa que podría contar en cualquiera de las listas: en un juego donde el mundo se regenera aleatoriamente para cada juego, no puede haber una guía de "recorrido", ya que cada juego será diferente.

(Esta irrepetibilidad también podría ser un problema para las pruebas y la depuración, aunque se puede evitar al menos parcialmente al permitir que se especifique la semilla RNG, al menos en modo de depuración, y / o al proporcionar el comando "trampa" que se puede utilizar para juego de avance rápido a diferentes etapas).


Sin embargo, si observa la lista de desventajas, verá que describe principalmente las desventajas de la generación pura de procedimientos; muchos de ellos pueden evitarse mezclando contenido generado manualmente y procesalmente .

Por ejemplo, el jugador siempre puede comenzar en una ciudad fija, diseñada manualmente, tal vez rodeada por una región de origen más amplia o más fija, pero se pueden generar al azar lugares más alejados de la ciudad para proporcionar siempre regiones desconocidas para que el jugador explore.

También podría haber otras ciudades diseñadas manualmente u otras ubicaciones ubicadas (más o menos) al azar en el mundo, de modo que el jugador tendrá que encontrarlas, pero sabrá qué esperar una vez que lleguen allí. Por el contrario, las características prominentes, como las montañas, podrían colocarse manualmente (al menos en las proximidades de la ubicación de inicio fija), pero los detalles de su terreno podrían asignarse al azar.

En cuanto a la ubicación aleatoria que causa puntos muertos y variaciones de dificultad, eso puede abordarse mediante la implementación de varias comprobaciones de coherencia y equilibrio en la parte superior de su algoritmo de generación mundial de procedimientos. Por ejemplo, si el jugador necesita un elemento en particular para poder cruzar el agua, puede incluir un código que asegure que se coloque al menos uno de esos elementos para que el jugador pueda alcanzarlo sin cruzar el agua.

Del mismo modo, es posible que también desee ajustar sus reglas de colocación de objetos para que no se coloquen varitas de asombro de equilibrio antes de que el jugador haya alcanzado el nivel x , y tal vez para asegurarse de que al menos uno se coloque en una ubicación fija donde el jugador pueda alcanzar antes de llegar al escenario donde lo van a necesitar para sobrevivir.


Por cierto, una forma común de hacer que el contenido generado por procedimientos y manualmente se mezcle de manera más o menos fluida es comenzar el proceso de generación manual utilizando el generador de mundo de procedimientos (quizás ajustado adecuadamente, por ejemplo, para generar una aldea o un pico de montaña donde lo desee) ) para inicializar la región que está diseñando y luego ajustarla manualmente para agregar y ajustar los detalles que desee. (Esto también puede permitir un almacenamiento de nivel muy compacto, al guardar solo los cambios manuales y la semilla del generador y los parámetros utilizados).

Otras formas de combinar contenido manual y de procedimiento incluyen dejar espacios en blanco en sus niveles diseñados manualmente, para que se completen con contenido aleatorio (por ejemplo, un castillo podría incluir un laberinto generado aleatoriamente en las mazmorras, con solo el contorno y las salidas fijas), o el diseño manual podría especificar solo el esquema general de algunas partes del nivel (por ejemplo, la ubicación de casas en una ciudad) y dejar que los detalles (como la apariencia exacta de cada casa) se elijan al azar.

De hecho, incluso muchos juegos que tienen un mundo de juegos completamente fijo usan alguna forma de generación de procedimientos como parte de su proceso de diseño de niveles, ya que hay algunos aspectos de la generación mundial (como producir un terreno de aspecto natural o colocar árboles individuales en un bosque) que son difíciles y / o tediosos de hacer a mano, pero relativamente fáciles de automatizar.

Por el contrario, la mayoría de los generadores de mundo de procedimientos utilizarán al menos algunos objetos y elementos diseñados manualmente para construir el mundo. Incluso se podría tener fácilmente múltiples niveles de generación aleatoria / manual anidada: por ejemplo, un mundo generado por procedimientos podría incluir una ciudad generada manualmente rodeada de bosques generados por procedimientos con un contorno dibujado manualmente, con árboles generados por procedimientos con hojas diseñadas manualmente.


También tenga en cuenta que la generación de contenido procesal no es necesariamente incompatible con un mundo fijo: simplemente puede elegir una semilla RNG fija y usarla para generar su mundo. Esto puede ser útil si quieres un mundo enorme para que los jugadores exploren, pero quieres mantenerlo igual para cada juego y cada jugador.

Tenga en cuenta que, si hace esto (o posiblemente incluso si no lo hace), realmente debería diseñar su generador de mundo para que funcione de manera jerárquica, utilizando múltiples instancias de RNG, de modo que, por ejemplo, el generador de mapas general mantenga una sola instancia de RNG que usaría para generar subregiones, asignando a cada subregión un valor de inicialización diferente que el generador de región luego usaría para inicializar una instancia de RNG separada que usaría para generar la región, y así sucesivamente. Esto es para evitar el "efecto mariposa", donde cambiar incluso el más mínimo detalle de la parte más pequeña del mapa podría hacer que el RNG no esté sincronizado y hacer que todo lo demás en el mundo sea completamente diferente.

Otra forma importante de evitar el efecto mariposa, particularmente si estás generando el mundo "sobre la marcha" mientras el jugador lo explora, es evitar los RNG normales por completo (excepto los procesos que suceden "instantáneamente" desde el punto de vista del jugador, como generar un nuevo nivel cuando el jugador ingresa) y en su lugar utiliza métodos de generación de números aleatorios que no almacenan ningún estado interno. Por ejemplo, al elegir la semilla para una subregión que el jugador está a punto de ingresar, el generador global del mundo podría tomar las coordenadas de la subregión (y su propia semilla general) y alimentarlas a una función hash para generar la semilla de la subregión. De esa manera, cada región siempre se verá igual, independientemente del orden en el que el jugador las ingrese.


PD. Después de toda esa digresión, permítame abordar brevemente su pregunta final sobre el código real utilizado para la generación de procedimientos. Por desgracia, no creo que sea realmente responsable en ningún sentido significativo sin muchos más detalles de los que has proporcionado, ya que hay literalmente tantas maneras diferentes de hacer la generación mundial de procedimientos como juegos que los usan.

Por ejemplo, el bisabuelo de todos los juegos de exploración generados por procedimientos es probablemente Rogue , cuyo algoritmo de generación de niveles simplemente consistía en colocar aleatoriamente un montón de habitaciones rectangulares dentro de un nivel rectangular más grande y conectar esas habitaciones con pasajes (y colocar una escalera para el siguiente nivel en uno de ellos). Sus diversos sucesores , desde Nethack hasta la serie Diablo , han elaborado este sistema de muchas maneras, pero la mayoría ha conservado la idea básica de distintos niveles que consisten en habitaciones, mazmorras y laberintos ubicados más o menos al azar en un mapa de cuadrícula.

Por el contrario, para los juegos que cuentan con configuraciones abiertas al aire libre, es probable que desee comenzar con algún tipo de algoritmo de generación de terreno fractal y construir otras características (ríos, bosques, ciudades, etc.) además de eso. O podría hacer algo como lo que hace Minecraft y generar una textura de procedimiento 3D aleatoria que determine qué partes de su paisaje son tierra y aire respectivamente (escaladas y sesgadas para que los bloques más bajos tengan más probabilidades de ser molidos), y luego superponer características como el agua , suelo / roca, vegetación, etc. encima de ella.

Por supuesto, nada de lo anterior se aplica si, por ejemplo, está escribiendo un juego de exploración espacial , en cuyo caso solo necesitará generar un montón de sistemas estelares colocados aleatoriamente de acuerdo con alguna función de densidad, y luego generar un azar conjunto de estrellas y planetas en cada uno de ellos. O tal vez está configurando a sus jugadores para explorar un paisaje no euclidiano , en cuyo caso se enfrentará a un conjunto completamente diferente de desafíos (como el hecho de que el volumen dentro de un radio dado crece exponencialmente en lugar de polinomialmente, por lo que muy difícil mantener un mapa grande en la memoria).

Ilmari Karonen
fuente
7

Ventajas de la generación procesal

  1. Puede escalar fácilmente sus mapas / diseños a tamaños verdaderamente grandes, mucho más grandes de lo que podría crear a mano.

  2. Al crear un sistema donde se crean trozos de terreno sobre la marcha, puede evitar tener que escribir fragmentos de código para cargarlos en la memoria permanente.

  3. A largo plazo, puede descubrir niveles más viables utilizando un diseño de procedimiento que con la edición manual de mapas.

  4. Para tu juego de 'explorador', puedes generar muchas docenas, cientos o incluso miles de niveles que son diferentes entre sí, lo que evita que el jugador se aburra.

Desventajas de la generación procesal

  1. Requiere mucho trabajo para garantizar que el terreno generado se vea "como lo desea".

  2. Crear 'niveles de prueba' se convierte en una molestia.

  3. La colocación de elementos y otras cosas similares, como usted mencionó, debe hacerse con cuidado, aunque para un juego explorador de arriba hacia abajo esto probablemente sería un problema menor de lo que piensa.

  4. A menos que se realicen pruebas exhaustivas, puede obtener un escenario en el que su juego se rompa completamente con un nivel de procedimiento particular, más que si lograra un nivel a mano.

  5. Para terrenos verdaderamente complejos, puede terminar gastando más tiempo en la reparación de errores y el trabajo de diseño que lo que hubiera gastado haciendo una herramienta básica de diseño de mapas y un cargador de archivos.

Ventajas del diseño manual

  1. El diseñador del juego puede estar más seguro de que el juego funciona como debería dentro del contexto de cada nivel.

  2. Es posible crear y colocar 'detalles finos' más fácilmente que con la generación de procedimientos.

  3. Algunas características del terreno son muy difíciles de producir de manera procesal, como el agua que fluye por una montaña. Hacerlo requeriría una evaluación muy exhaustiva de un mapa de elevación que puede ser difícil de diseñar.

  4. Es más fácil guiar al jugador a lo largo de un 'camino lineal', aunque como dices que estás construyendo un juego de 'explorador', esto puede no ser tan relevante.

Desventajas del diseño manual

  1. La aplicación de cambios generalizados a su terreno llevará mucho tiempo, mientras que con la generación de procedimientos, simplemente la modificación de algunos valores producirá un terreno completamente diferente.

  2. Tendrá que almacenar cada mapa en la memoria, lo que puede ser aceptable para niveles pequeños, pero para niveles más grandes, la generación de procedimientos podría ser su única opción. Aumenta los requisitos de instalación de memoria permanente de tu juego.

  3. Puede requerir la construcción de un editor de mapas y un sistema de carga de archivos.

Terminé enumerando más desventajas para la generación de contenido de procedimiento, aunque esto probablemente se deba a que mi proyecto es completamente de procedimiento, así que sé sus dificultades. Para un juego de explorador, te aconsejaría que consideres qué tan grande quieres que sea cada mapa y si crear nuevas herramientas de edición de mapas es algo que estás dispuesto a hacer.

parar
fuente
¿Puedes (no aquí, sino en alguna parte) mostrar el código para tu generación procesal? No lo usaré, pero nunca antes he intentado generar mis mapas de manera procesal. (Es por eso que hice esta pregunta: P). Además, voté por su respuesta, pero quiero las opiniones de los demás, por lo que es posible que no la acepte de inmediato
Pip