No hace mucho tiempo, creamos un sistema de creación de luna. Nuestro objetivo era crear lunas de tamaño y composición similares a las existentes en nuestro sistema solar. La principal dificultad era obtener las vastas superficies de tales lunas y sus interiores, de modo que mientras permanecieran interesantes. Además, necesitábamos que las lunas se representaran con detalles claros, independientemente de la distancia a ellas.
El sistema supone que las lunas tienen una base esférica. La creación de una malla geodésica se aplica a la esfera base, lo que garantiza la misma área de todas las partes de la superficie. El sistema aplica esta estructura solo como una cuadrícula computacional para la generación de procedimientos; la superficie real de la luna será mucho más lisa que la cuadrícula de generación.
Esfera geodésicaPara obtener pequeñas lunas irregulares, las formas geométricas básicas están distorsionadas por el ruido 3D de baja frecuencia.
Esfera topográfica distorsionada por ruidoComenzando con esta base, el sistema usa una serie de capas concéntricas. Cada celda determina las características volumétricas de la capa concéntrica posterior. La capa más externa define las propiedades de la superficie de la luna.
Carcasa concéntricaCada revestimiento puede estar distorsionado por el ruido 3D de baja frecuencia exclusivo de ese revestimiento. Si elige esta opción de generación, entonces el caparazón interno puede ser incluso más grande que el externo.
Distorsión de la cáscaraEn los diagramas anteriores, la distancia entre los depósitos y la cantidad de distorsión se exageran para mostrar más claramente el proceso de construcción. En la práctica, los depósitos estarán mucho más cerca uno del otro, y la magnitud de su distorsión será proporcionalmente menor.
A continuación hablaremos sobre cómo crear la capa más externa. Los mismos principios se aplican al crear capas internas, por lo que no los consideraremos en detalle.
Un sistema de luna procesal requiere un componente en tiempo real y un componente fuera de línea. El componente en tiempo real se ejecuta en la computadora del jugador. El componente fuera de línea se ejecuta en las computadoras de los desarrolladores de juegos. El componente de generación fuera de línea crea información que puede complementarse rápidamente con un componente en tiempo real.
Cada vértice en una concha esférica se clasifica como perteneciente a un bioma separado. Un bioma es un conjunto de propiedades de superficie, que incluyen: altura, distribución de materiales, colocación de muestras y coloración de materiales.
Ejemplo de biomaLa información del bioma contiene propiedades ricas en entropía, como cráteres, mares secos, grietas superficiales causadas por mareas gravitacionales.
Gran cráter registrado en la información del biomaLa definición del bioma también contiene reglas para la colocación de objetos que determinan la ubicación, frecuencia y aleatorización de piezas pequeñas: piedras, adoquines, repisas, etc.
Instancias de rockCada bioma se crea a partir de elementos colocados por mosaicos (mosaicos) para que el componente en tiempo real pueda aplicar la misma información en diferentes partes de la luna, así como en otras lunas. La información del bioma debe generarse de tal manera que sea posible una distorsión y reorganización rápidas, reduciendo así el número de patrones ambientales repetidos y predecibles.
El sistema utiliza dos tipos de mosaicos de bioma: de transición y aislados.
La información de transición de los biomas ocurre en áreas donde el bioma pasa al bioma vecino. La información aislada del bioma ocurre en áreas donde el sistema garantiza la ausencia de biomas vecinos.
Estos dos modos separados son necesarios porque algunos elementos de los biomas, por ejemplo, los cráteres, solo pueden ubicarse en áreas donde el bioma no se transfiere a otro bioma, porque las transiciones entre biomas pueden afectar el perfil de altura y la apariencia de los elementos en relieve.
A continuación se muestra un ejemplo simplificado de la luna, que utiliza tres biomas diferentes: polar, tropical y ecuatorial, coloreados, respectivamente, en rojo, azul y verde.
Luna con tres biomasLas áreas con un bioma aislado tienen un color uniforme; en áreas con biomas de transición, los colores se mezclan.
El sistema utiliza un conjunto de ruido precalculado para introducir variabilidad en las zonas de transición entre biomas, creando transiciones interesantes y únicas de un bioma a otro.
Ruido procesal aplicado a las transiciones entre biomasEn las imágenes de arriba, el tamaño de cada parte del bioma se exagera en relación con el tamaño de la luna, a fin de mostrar más claramente la técnica para crear biomas. Un sitio de bioma separado cubrirá un área de aproximadamente 10 por 10 km. Una luna con un radio de 1,500 km tendrá una superficie de 30,000,000 km
2 . Para cubrir esta superficie se requerirían casi 300,000 de esas áreas.
Resolución de la red del bioma para la luna con un radio de 1.500 km.La resolución de la red del bioma puede conducir a una gran cantidad de sitios de bioma. El sistema no rastreará cada uno de ellos individualmente, porque la ubicación de cada sitio puede calcularse analíticamente. Se puede asignar un bioma para la mayoría de los sitios desde un mapa de bioma de alto nivel.
Los mapas de bioma de alto nivel determinan las características clave de las lunas cuando se ven desde una gran distancia. El sistema usa estos mapas para generar detalles adicionales en formas más cercanas, preservando la uniformidad de la definición de la luna cuando se ve desde diferentes distancias.
Los mapas de bioma de alto nivel son imágenes en 2D que se pueden colocar en la superficie de la luna mediante la parametrización en 2D. Cada punto del mapa contiene un identificador numérico del bioma que prevalece en la ubicación correspondiente de la superficie o capa interna.
Mapa de bioma 2DLa imagen de arriba muestra un mapa con cuatro tipos diferentes de biomas (azul, rojo, amarillo y blanco). La imagen se superpone a la esfera mediante la parametrización 2D. A continuación se muestra una posible parametrización:
Parametrización 2D para el mapa de identificación del biomaAdemás del mapa de identificación del bioma, el sistema permite el uso de otros mapas, por ejemplo, que contienen alturas y colores de superficie.
Sombra de luna de larga distancia y renderizadoUn píxel en cada imagen puede cubrir 4 km
2 , lo que hace que su creación sea rentable. Tales mapas de altura y color pueden ser generados por procedimientos o dibujados por artistas. En un proyecto que usa solo una docena de lunas y donde cada luna debe tener propiedades naturales ricas y únicas, es mejor usar el trabajo de artistas en esta etapa.
La siguiente imagen muestra el proceso de generación de la altura de la superficie de la funda y otras propiedades:
Tres escalas usadas para construir la lunaLa luna consistirá en al menos un caparazón esférico. Si hay varias conchas, el sistema extruye las conchas internas sobre la base de su radio máximo y la función de la altura de la concha, que se obtiene al realizar el proceso con diferentes escalas descritas anteriormente.
Para cada caparazón, el diseñador de la luna crea un mapa de alto nivel de la distribución de los biomas, la definición de biomas para los biomas que se encuentran en este mapa y la definición de los materiales que se encuentran en este bioma.
El sistema considera que el aire es un material aceptable, por lo que puede usarse para crear cavidades en cualquier caparazón.
Sección transversal del relieve de la luna, en la que son visibles varias conchasUn caparazón separado también puede ser un objeto volumétrico, cuya profundidad se establece mediante una pila de materiales. La información de la pila se almacena en un bioma.
Una pila de materiales compuesta de seis materiales.Dado que los materiales subterráneos rara vez salen a la superficie, pueden describirse con una resolución mucho más baja que los materiales de superficie de los biomas, y el uso del ruido de procedimiento local seguirá siendo invisible para el jugador.
La funcionalidad de la pila de materiales puede ser suficiente para el diseño, porque algunos materiales en la pila pueden ser bastante raros. El diseñador de biomas puede personalizar la prevalencia y el patrón de cualquier material en la pila.
La generación de procedimientos se realiza mediante sombreadores GPU y algoritmos de CPU voxel.
El sombreador calcula el color del fragmento para cada una de las tres escalas y mezcla estas muestras dependiendo de la distancia entre la cámara y el fragmento.
Todas las partes que son demasiado pequeñas para registrarse en la geometría. pero aún afectando la complejidad percibida de las superficies, se registran en mapas normales generados en tiempo real basados en la determinación procesal de materiales, biomas o mapas de alto nivel para determinar la luna. Debido a esto, se mantiene un bajo número de polígonos en la escena.
Debe pagar el precio por esto, siempre que la luna sea visible en la cámara, el bioma y los mapas de definición de alto nivel deben almacenarse en la GPU. Puede usar la carga selectiva solo de las texturas mip que son necesarias para representar la escala actual de la luna. La cantidad total de memoria de GPU requerida se reduce al mínimo debido a la carga y descarga de la GPU al cambiar la posición del observador.
Cuando, debido a la proximidad a la cámara, los elementos individuales se vuelven lo suficientemente grandes, comienzan a aparecer en la salida de la geometría utilizando la generación de vóxeles en tiempo real. Lo mismo se aplica a todas las partes de la luna terraformadas o excavadas por los jugadores. Si los cambios son lo suficientemente grandes y pueden observarse desde la órbita, el administrador de escenas adaptativas Voxel Farm aumenta el nivel de detalle (LOD) de todas las áreas, cambio que la aplicación considera importante.