¿Cómo generan juegos como Minecraft mundos enteros a partir de un número semilla?

32

Quiero generar un mundo completamente único con biomas (como lo que hacen Minecraft y juegos similares). No entiendo cómo generan estos mundos enteros a partir de un solo número "semilla". ¿Alguien puede proporcionar una descripción básica de la técnica?

Josh
fuente
13
Notch en realidad escribió una publicación de blog sobre la generación de terreno , que ahora es completamente obsoleta ya que el nuevo código tiene biomas y FRACTALES y otros elementos mágicos. Nunca hubo una parte 2, tampoco.
un gato

Respuestas:

27
  1. ¿Cómo se genera una X aleatoria a partir de una semilla? Un valor semilla es el estado inicial de un generador de números aleatorios. En la mayoría de los lenguajes de programación, puede configurar esta semilla. Por ejemplo, C usa srand(). Si no especifica una semilla específica para comenzar, generalmente se usa un valor de marca de tiempo como semilla. De esa manera, cada vez que corres, los números aleatorios son diferentes.

    // C example
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    
    1270216262 
    1085377743 
    1481765933
    1270216262 
    1085377743 
    1481765933

    Como puede ver, cada vez que siembra con un cierto valor (usé 1 como semilla), los números aleatorios resultantes son los mismos.

  2. ¿Cómo se crea un mundo de Minecraft basado en números aleatorios? Notch tiene una publicación sobre esto. Además, puede consultar los tutoriales de otras personas sobre "mundos similares a Minecraft". Disfruté este, por ejemplo: representación similar a Minecraft en OpenGL 4 . La idea básica es utilizar el ruido Perlin (o ruido simplex). Aquí hay una buena pregunta sobre las funciones de ruido: Comprender el ruido Perlin

Palanqueta
fuente
1
En realidad, no podrás usar el ruido Perlin, me temo que Minecraft tiene acantilados colgantes, cuevas, etc., y PN no puede hacerlo.
jcora
66
El ruido Perlin es solo un sistema de ruido que puede usar como parte de un método de generación de terreno más grande. p.ej. Puede usar el ruido perlin 3D con un valor umbral dependiente de la altitud para generar acantilados, cuevas, etc. (Editar, de hecho, veo en el enlace de la respuesta que es exactamente lo que Notch estaba haciendo en un punto).
Kylotan
1
+1 Kylotan. Aquí está la cita del blog de Notch: "Específicamente, no hay forma de que [mapa de altura 2D Perlin] genere voladizos. Así que cambié el sistema a un sistema similar basado en el ruido 3D Perlin. En lugar de muestrear la" altura del suelo ", yo trató el valor de ruido como la "densidad", donde cualquier cosa menor que 0 sería aire, y cualquier cosa mayor o igual a 0 sería tierra "
Jimmy