2011-12-11 15 views
10

Más de gamedev.SE descubrimos que el flash implementation of Perlin-noise parece desviarse bastante de otras implementaciones.¿Cómo se implementa el ruido Perlin en flash?

No encontré ningún detalle de implementación en línea, pero me pregunto si alguien puede decir qué algoritmo se está utilizando para Perlin-noise en flash.

Usando bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true); genera imágenes como ésta donde sólo el parámetro numOctaves se ha cambiado (1, 2, 4 de izquierda a derecha):

perlin noise in flash

Sin embargo otras implementaciones de Perlin ruido ven muy diferentes. Por ejemplo, la imagen de la Wikipedia article about Perlin-noise:

Perlin noise as depicted on Wikipedia

también this Actionscript Implementation of Perlin-noise produce resultados muy diferentes, como se puede ver en las siguientes imágenes (Octavas 1, 2 y 4 de izquierda a derecha):

Perlin noise AS3

Lo que más me interesa es el aspecto del ruido con solo una octava. En la implementación del flash puede ver claramente que el ruido se está formando como burbujas separadas.

Importante: El ruido generado en flash usa false para el parámetro fractalNoise. Si fractalNoise se establece en true, los resultados son en realidad muy similares a los de Wikipedia y otras implementaciones.

La descripción del parámetro dice lo siguiente:

valor booleano. Si el valor es verdadero, el método genera ruido fractal; de lo contrario, genera turbulencia. Una imagen con turbulencia tiene discontinuidades visibles en el gradiente que pueden hacer que se aproxime mejor a los efectos visuales más nítidos, como las llamas y las olas del océano.

Como podemos ver, que hablan de la turbulencia para describir el método que genera el ruido. Así que supongo que la pregunta es: ¿esa salida generada por flash sigue siendo ruido de Perlin? ¿O hay otro nombre para ese tipo de ruido? Y lo más importante: ¿dónde se puede encontrar una implementación para crear ruido como este?

Respuesta

1

Ha sido un muuuucho tiempo desde que hice ningún tipo de procesamiento de imagen, pero tal vez algo de esto le ayudará:

Referencias: (y las personas que conocen las respuestas ...) http://www.kelvinluck.com/assets/perlin_noise_experiments/, http://www.quasimondo.com/archives/000672.php, http://www.sjeiti.com/?p=305

Según tengo entendido, la implementación de Flash está generando resultados basados ​​en cálculos enteros en lugar de flotantes. Esto explicaría por qué la representación es rápida, pero también ligeramente diferente en apariencia.

Espero que al menos te encamine en la dirección correcta ...

+0

Lo siento, pero eso no es todo. Incluso utilicé el código de uno de sus enlaces para generar las imágenes del ruido en el que no estoy * interesado *. La implementación del flash no es diferente porque está basada en un entero (no lo es) y si se genera una imagen al final, vas a tener números enteros, no hay forma de evitar eso. La implementación del flash le permite elegir entre "turbulencia" y ruido "regular". Lo que me interesa es un algoritmo para ** turbulencia **. Si buscas imágenes de Google para "ruido de turbulencia" y "ruido de perlin", verás la diferencia. – bummzack

4

Parece que hay cierta confusión sobre la terminología. Pero técnicamente, el ruido que describió Perlin fue de una sola octava, sin ningún resumen. Parecía la primera imagen de Wikipedia.

Estoy bastante seguro de que casi nadie usa eso. Todo el mundo suma unas octavas, por lo general ampliando la amplitud a frecuencias más bajas. El "cuánto más grande" es la persistencia. De todos modos, cuando lo sumas, se llama ruido fractal.

"Ruido de Perlin" en realidad solo significa que debe hacer un montón de degradados aleatorios e interpolarlos. Pero las personas se refieren al ruido fractal como ruido Perlin, porque es una suma de varias ondas de ruido Perlin.

Tenga en cuenta que a menudo, como en las implementaciones de referencia, las funciones de ruido Perlin y Simplex emiten valores centrados en 0 y (a veces) escalados a [-1, +1]. Además, estos son similares pero no exactamente idénticos: el ruido simple parece un poco diferente. A veces ambos se conocen como ruido Perlin, porque Ken Perlin originalmente pensó en el ruido de Perlin (lo llamó simplemente "ruido"), y luego lo aceleró eliminando algunas redundancias y creando un ruido simple (que llamó "ruido mejorado").) Simplex puede verse un poco más oscuro por sí mismo (la cuadrícula es diferente, obviamente se ve diferente) y las secciones a través del ruido de mayor dimensión no se comportan igual que con Perlin.