unity perlin estructural algorithm language-agnostic perlin-noise

algorithm - estructural - perlin noise processing



¿Cómo puedo generar ruido Perlin en una superficie esférica? (2)

Estoy tratando de generar terreno utilizando el ruido Perlin. Entiendo cómo generarlo usando coordenadas cartesianas, pero no puedo comprender cómo funcionaría en una esfera. Sé que puede proyectar superficies 2D en esferas, pero ¿no distorsionaría la distorsión la distribución del ruido? La mejor idea que se me ocurre para generar un ruido uniforme en la superficie de una esfera es mapear el punto en la esfera a una coordenada cartesiana 3D y usar una función de ruido 3D. (Básicamente, para generar un cubo de ruido y "rasurar" las esquinas para redondear, por así decirlo.) ¿Hay un método mejor que me esté perdiendo?


Creo que el enfoque es utilizar un campo de ruido tridimensional (cada punto en un espacio 3D tiene un valor de ruido escalar) en lugar de un campo bidimensional (cada punto en un plano 2D tiene un valor de ruido).

Cuando utiliza una función de ruido 2D para generar un mapa de altura, compensa el valor z de acuerdo con el valor de ruido.

Al usar un campo 3D, muestrea el ruido en los puntos de la superficie de una esfera, luego usa el valor del ruido para compensar cada punto radialmente desde o hacia el centro de la esfera.

El ruido 3D es más difícil y lento de producir, pero no tienes que lidiar con las complicaciones de envolver una superficie alrededor de la esfera, y como la función de ruido es continua, no hay costuras.

Esto obviamente se puede aplicar a cualquier forma arbitraria.


El verdadero enigma aquí es cómo modificar las funciones de base de ruido de Perlin (¿llamadas octavas?), Que se definen utilizando la frecuencia y la amplitud para que estén sobre una esfera en lugar de un plano n-dimensional.

Por lo tanto, necesitamos tener un conjunto de funciones básicas (dirección, frecuencia y amplitud determinadas) definidas sobre la esfera. La dirección es un punto con, digamos, valor cero. Para cualquier punto de la esfera, mides la distancia angular al vector de dirección. Divides la distancia angular por la frecuencia y calculas el pecado de ese ángulo. Finalmente, escalas por la amplitud.

Puede hacer algo un poco más sofisticado si desea que sus funciones básicas varíen de manera diferente en dos dimensiones, pero necesitará un segundo parámetro de dirección para orientar la proyección. También necesitarás calcular dos distancias angulares. Aunque podría ser una exageración. Si tiene un montón de funciones básicas, los patrones circulares del algoritmo anterior podrían desdibujarse mutuamente, así que primero intentaría la solución fácil.

Usando estas funciones de base de ruido Perlin, ahora puede evaluar su ruido Perlin sobre la esfera como la suma de un montón de estos. Si decides teselar la esfera y evaluar las esquinas del vértice, depende de ti. Eso es lo que yo haría.