¿Por qué es el doble de costoso hacer una función de ruido que se puede colocar en mosaico?

13

He visto en varios lugares que hacer un bucle de ruido Perlin sin problemas requiere calcularlo dos veces de maneras ligeramente diferentes y sumar los dos resultados.

Estas preguntas frecuentes sobre las matemáticas de ruido de Perlin ofrecen una fórmula:

Floop(x,y,z)=(tz)F(x,y,z)+zF(x,y,zt)t

para hacer una función de ruido loop en la dirección z . También se menciona que se extiende esto, a bucle en 2 dimensiones tomaría 4 evaluaciones de F y de bucle en 3 dimensiones tomaría 8 evaluaciones de F .FzFF

Entiendo que esto proporciona una unión perfecta entre mosaicos que no solo es continua sino también continuamente diferenciable, sino que intuitivamente espero que ese sea el caso si la función de ruido simplemente se evalúa una vez con puntos de cuadrícula reducidos módulo del tamaño de mosaico requerido. Si la función de ruido solo se basa en los puntos de la cuadrícula inmediatamente circundante (4 para el ruido 2D, 8 para el ruido 3D), entonces seguramente solo usará los puntos de la cuadrícula más a la izquierda cuando el punto para calcular pase el borde derecho de la baldosa dará misma calidad de ruido que entre cualquier otro punto de la cuadrícula?

Como he visto este enfoque de cálculo múltiple en varios lugares, supongo que debe tener alguna ventaja, pero estoy luchando por ver la desventaja con simplemente envolver los puntos de la cuadrícula de regreso al inicio cuando se hacen demasiado grandes. ¿Qué me estoy perdiendo?

trichoplax
fuente

Respuestas:

19

Es lamentable que la gente comúnmente recomiende esto. Mezclar entre dos (o cuatro, etc.) copias traducidas de una función de ruido de esa manera es una muy mala idea. ¡No solo es costoso, ni siquiera produce resultados correctos!

Ruido de Perlin Mezcla de ruido Perlin

A la izquierda hay un poco de ruido de Perlin. A la derecha hay dos instancias de ruido Perlin, apiladas y mezcladas de izquierda a derecha.

La diferencia es algo sutil, pero puede ver que la segunda imagen tiene un contraste más bajo en una columna vertical que corre por el medio. Ahí es donde hay una combinación del 50% entre dos instancias diferentes de la función de ruido. Tal mezcla no se parece a la función de ruido original: solo se ve como un desastre fangoso.

OK, así que no es bastante que el mal sólo mirar el ruido crudo ... pero si a continuación, realice transformaciones no lineales en la imagen, el contraste no uniforme puede causar problemas. Por ejemplo, aquí están esas imágenes trilladas al 60%. (Piense en generar islas en un océano, por ejemplo).

Ruido de Perlin acribillado Ruido mezclado de Perlin

Ahora puede ver claramente cómo la imagen de la derecha tiene menos áreas blancas más pequeñas en el medio.

Como mencionó, para el ruido basado en la cuadrícula como Perlin, una mejor manera es colocar los gradientes pseudoaleatorios en los puntos de la cuadrícula. Eso es fácil y barato de hacer, y luego puede aplicar el algoritmo de interpolación a los gradientes como de costumbre (al igual que la interpolación bilineal de una textura de mosaico). Esto produce ruido de mosaico sin artefactos extraños, ya que funciona con el algoritmo de ruido subyacente en lugar de sobre él. Puede usar una estrategia similar con el ruido de Worley (ruido celular) colocando en mosaico los puntos de característica aleatorios que usa como base.

Sin embargo, con múltiples octavas de ruido no siempre es tan fácil. Si la escala relativa entre las octavas (también conocida como "lacunaridad") no es un número entero o un número racional simple, entonces es posible que no pueda encontrar un punto de mosaico conveniente donde todas las cuadrículas de las octavas coincidan. Puede colocar cada octava en mosaico de forma independiente, pero el ruido general aún no estará disponible en ese caso.

Nathan Reed
fuente
44
Las imágenes de lado a lado realmente marcan la diferencia para obtener una sensación intuitiva de la explicación. Voy a tener esto en cuenta para mis propias respuestas.
trichoplax