¿Cómo puedo crear fácilmente mapas de textura en la nube?

16

Estoy haciendo planetas 3d en mi juego; estos serán vistos como "globos". Algunos de ellos necesitarán capas de nubes. Miré varios tutoriales de Blender para crear "tierra" , y para sus capas de nubes usan mapas de nubes de tierra de la NASA .

Sin embargo, crearé un universo ficticio con muchos planetas generados por procedimientos. Entonces me gustaría usar muchas variaciones.

Espero que haya una manera de generar procesalmente mapas de nubes como el enlace de la NASA. También necesitaré crear gigantes gaseosos, por lo que también necesitaré otros tipos de mapas de textura de nubes .

Si eso es demasiado difícil, podría recurrir a la creación de varias variaciones de mapas en la nube. Por ejemplo, 3 para tierra, 3 para gigantes gaseosos, etc.

Entonces, ¿cómo creo estáticamente o genero programáticamente dichos mapas en la nube?

EdwardTeach
fuente

Respuestas:

19

¡La generación de nubes es divertida! Cubriré los métodos fuera de línea y de tiempo de ejecución.

Nubes pre-renderizadas

Si desea renderizar previamente sus texturas en la nube fuera de línea, no busque más que Photoshop (o Gimp , si lo prefiere). Ambos programas pueden generar fácilmente patrones en la nube. Los elementos del menú tienden a moverse entre versiones, pero a partir de Gimp 2.8.2, el comando principal que está buscando es Filters -> Render -> Clouds -> Solid Noise. Deberá crear una nueva imagen en blanco antes de habilitar el comando. Te animo a que experimentes con los parámetros de ruido, pero solo como un ejemplo, esto es lo que sucede si configuras "Random Seed" en 1, "Detail" en 4, "X Size" en 4.0, "Y Size" en 8.0, deshabilita "Aleatorizar" y "Turbulento", y habilitar "Tilable": Salida sin formato del comando Gimp "Ruido sólido"

Un paso más que definitivamente recomiendo es editar los niveles de la imagen ( Colors -> Levels...en Gimp). Al arrastrar los puntos finales, puede cambiar efectivamente el nivel de cobertura de nubes de "completamente nublado" a "no una nube en el cielo". Nubes trilladas

Otras posibilidades interesantes:

  • Use las herramientas "Esquivar" y "Grabar" para aclarar / oscurecer manualmente las partes de la imagen.
  • Deformar la imagen de la nube para sugerir patrones de viento. Pruebe el Filters -> Distorts -> Whirl and Pinch...comando de Gimp , o para un mayor uso del control Filters -> Distorts -> IWarp...con el Modo de deformación configurado en "Remolino". Sin embargo, manténgalo sutil: demasiada deformación tiende a desenfocar los detalles de alta frecuencia de la imagen.
  • Agregue múltiples capas de nubes independientes para simular diferentes tipos de nubes, desde delgadas y tenues hasta grandes y gruesas (estoy seguro de que tienen nombres científicos adecuados, pero maldita sea Jim, ¡soy un programador, no un meteorólogo!). En este caso, probablemente desee guardar cada capa como una imagen separada para poder animarlas de forma independiente en tiempo de ejecución.

Realmente depende de tu visión artística. ¡Vuélvete loco! Cuando haya terminado, recuerde exportar la textura como una imagen de escala de grises de un solo canal, para que pueda usar los mismos datos de nube para su color y canal alfa en tiempo de ejecución.

Generación de nube en tiempo de ejecución

Generar patrones de nubes ilimitados en tiempo de ejecución es un poco más complicado, pero sigue siendo totalmente factible. Es un tema enorme, y esto solo cubrirá los trazos generales.

Básicamente, va a replicar el comando "Ruido sólido" de Gimp en su código de sombreador, utilizando una función de ruido como el ruido canónico Perlin para generar volúmenes de ruido periódicos infinitos, suaves, deterministas (opcionalmente). Su pregunta no especificó a qué API de representación está apuntando, por lo que no puedo ser demasiado específico aquí; El capítulo 26 de "GPU Gems 2" cubre una variante del ruido Perlin en HLSL y CgFX (algo anticuado), o puede usar esta función de ruido GLSL.. Al muestrear una porción 2D de un volumen de ruido 3D, obtienes algo como el comando Gimp "Solid Noise" con Detail = 0. Cuanto menor sea la distancia entre sus muestras de volumen de ruido, menor será la frecuencia ("más suave") de su ruido. Para aumentar el nivel de detalle de alta frecuencia, comience con un patrón de ruido de baja frecuencia base y agregue "octavas" de ruido de alta frecuencia adicionales, donde cada "octava" es una porción diferente del volumen de ruido 3D con una mayor distancia de muestreo y menor amplitud. Aquí se puede encontrar un ejemplo visual de este proceso (que encontré en Google "ruido de Perlin de varias octavas") .

Como una gran ventaja adicional, las texturas en la nube generadas de esta manera se pueden animar muy fácilmente. Agregue un desplazamiento basado en el tiempo a sus coordenadas de muestra de la función de ruido 3D, y obtendrá un movimiento de nube extremadamente convincente (como se ve en este video , por ejemplo). Esto se debe a que la función de ruido es suave en las tres dimensiones; desplazar la textura en la dirección U / V hace que las nubes se muevan alrededor del planeta, mientras que desplazarse en la dirección W (perpendicular) tiene el efecto de "evolucionar" lentamente las nubes.

También es posible deformar las nubes en tiempo de ejecución, para efectos similares a los de los huracanes. Los resultados en realidad pueden ser de mucha mayor calidad que los filtros de urdimbre Gimp ingenuos, que (como se mencionó anteriormente) pueden conducir a una textura demasiado borrosa. Una técnica que definitivamente querrá examinar es los "mapas de flujo", según lo descrito por Alex Vlachos de Valve ( diapositivas de SIGGRAPH 2010 ) o Carlos González de Naughty Dog ( diapositivas de GDC 2012 ). La idea básica es pintar un campo vectorial (el "mapa de flujo") y usarlo para distorsionar y desplazar la textura de la nube en tiempo de ejecución, mientras se desvanece periódicamente entre dos texturas de nubes diferentes cuando la distancia de distorsión es demasiado alta.

¿Qué método usar?

La representación previa de texturas en la nube en Gimp / Photoshop es extremadamente fácil; puedes generar una nueva textura en unos segundos una vez que la domines. El código de tiempo de ejecución es trivial y muy rápido. Sin embargo, las texturas de nube más únicas significan mayores requisitos de espacio en disco (también, una descarga más grande / más lenta) y más uso de VRAM en tiempo de ejecución.

La generación de la nube en tiempo de ejecución es mucho más difícil al principio, pero una vez que lo hace funcionar tiene varias ventajas claras sobre las texturas de nube renderizadas previamente. Puede generar una variedad infinita de patrones de nubes animadas realistas sin usar espacio en disco adicional o VRAM. Sin embargo, el costo de tiempo de ejecución de evaluar múltiples funciones de ruido 3D por píxel puede ser elevado; los sombreadores de píxeles de la nube serán mucho más lentos que en el caso preprocesado.

TL; DR: definitivamente comience usando nubes renderizadas previamente y cambie a nubes de procedimiento de tiempo de ejecución si necesita una variedad adicional (o si desea un desafío de programación adicional).

posgoodismo
fuente
1
Esta es una gran respuesta: muy completa y fácil de seguir. Veo que mencionaste "deformar las nubes para sugerir patrones de viento". Esto es algo que definitivamente tendré que hacer, así que ¿puedes explicar un poco? Una vez que tenga esto, aceptaré tu respuesta.
EdwardTeach
@EdwardTeach Hecho; ¡Espero que ayude!
posgoodismo