El ruido Perlin es un tipo de ruido de gradiente desarrollado por Ken Perlin en 1983. Tiene muchos usos, que incluyen, entre otros: generar terreno de forma procesal , aplicar cambios pseudoaleatorios a una variable y ayudar en la creación de texturas de imágenes . Generalmente se implementa en dos, tres o cuatro dimensiones , pero se puede definir para cualquier número de dimensiones.
Ken Perlin desarrolló el ruido Perlin en 1983 como resultado de su frustración con la apariencia "máquina" de las imágenes generadas por computadora (CGI) en ese momento. [1] Describió formalmente sus hallazgos en un artículo de SIGGRAPH en 1985 llamado "An Image Synthesizer". [2] Lo desarrolló después de trabajar en la película de ciencia ficción animada por computadora de Disney Tron (1982) para la compañía de animación Mathematical Applications Group (MAGI). [3] En 1997, Perlin recibió un Premio de la Academia por logros técnicos por crear el algoritmo, cuya cita decía: [4] [5] [6] [7]
A Ken Perlin por el desarrollo de Perlin Noise, una técnica utilizada para producir texturas de apariencia natural en superficies generadas por computadora para efectos visuales de películas. El desarrollo de Perlin Noise ha permitido a los artistas de gráficos por computadora representar mejor la complejidad de los fenómenos naturales en efectos visuales para la industria cinematográfica.
Perlin no solicitó ninguna patente sobre el algoritmo, pero en 2001 se le concedió una patente para el uso de implementaciones 3D+ de ruido simplex para la síntesis de texturas . El ruido simplex tiene el mismo propósito, pero utiliza una cuadrícula más simple para llenar el espacio. El ruido simplex alivia algunos de los problemas del "ruido clásico" de Perlin, entre ellos la complejidad computacional y los artefactos direccionales visualmente significativos. [8]
El ruido Perlin es una textura procedimental primitiva, un tipo de ruido degradado utilizado por los artistas de efectos visuales para aumentar la apariencia de realismo en los gráficos por computadora . La función tiene una apariencia pseudoaleatoria , pero todos sus detalles visuales son del mismo tamaño. Esta propiedad le permite ser fácilmente controlable; Se pueden insertar múltiples copias escaladas de ruido Perlin en expresiones matemáticas para crear una gran variedad de texturas procesales. Las texturas sintéticas que utilizan ruido Perlin se utilizan a menudo en CGI para hacer que los elementos visuales generados por computadora, como superficies de objetos, fuego, humo o nubes, parezcan más naturales, imitando la apariencia aleatoria controlada de las texturas en la naturaleza.
También se utiliza frecuentemente para generar texturas cuando la memoria es extremadamente limitada, como en demos . Sus sucesores, como el ruido fractal y el ruido simplex , se han vuelto casi omnipresentes en las unidades de procesamiento de gráficos tanto para gráficos en tiempo real como para texturas procesales en tiempo no real en todo tipo de gráficos por computadora.
Se utiliza con frecuencia en videojuegos para crear terrenos generados por procedimientos que parezcan naturales. Este éxito se debe en parte a la estructuración jerárquica del ruido Perlin que imita las estructuras jerárquicas que ocurren naturalmente y, por lo tanto, también ha resultado útil en aplicaciones de ciencias ambientales. [9]
El ruido Perlin se implementa más comúnmente como una función de dos, tres o cuatro dimensiones , pero se puede definir para cualquier número de dimensiones. Una implementación normalmente implica tres pasos: definir una cuadrícula de vectores de gradiente aleatorios, calcular el producto escalar entre los vectores de gradiente y sus desplazamientos e interpolar entre estos valores. [7]
Defina una cuadrícula de n dimensiones donde cada intersección de la cuadrícula tenga asociada un vector de gradiente de longitud unitaria de n dimensiones aleatorio fijo, excepto en el caso unidimensional donde los gradientes son escalares aleatorios entre −1 y 1.
Para calcular el valor de cualquier punto candidato, primero encuentre la celda única de la cuadrícula en la que se encuentra el punto. Luego, identifique las 2 n esquinas de esa celda y sus vectores de gradiente asociados. A continuación, para cada esquina, calcule un vector de desplazamiento. Un vector de desplazamiento es un vector de desplazamiento desde esa esquina hasta el punto candidato.
Para cada esquina, tomamos el producto escalar entre su vector de gradiente y el vector de desplazamiento hasta el punto candidato. Este producto escalar será cero si el punto candidato está exactamente en la esquina de la cuadrícula.
Tenga en cuenta que la influencia de un vector de gradiente crece con la distancia, lo que se puede evitar normalizando primero el vector de desplazamiento a una longitud de 1. Esto introduciría cambios bruscos notables, excepto que la distancia se tenga en cuenta en el siguiente paso de interpolación. Sin embargo, normalizar el vector de compensación no es una práctica común.
Para un punto en una cuadrícula bidimensional, esto requerirá el cálculo de cuatro vectores desplazados y productos escalares, mientras que en tres dimensiones requerirá ocho vectores desplazados y ocho productos escalares. En general, el algoritmo tiene complejidad O (2 n ) en n dimensiones.
El último paso es la interpolación entre los 2 n productos escalares. La interpolación se realiza utilizando una función que tiene cero primera derivada (y posiblemente también segunda derivada) en los 2 n nodos de la cuadrícula. Por lo tanto, en puntos cercanos a los nodos de la cuadrícula, la salida aproximará el producto escalar del vector de gradiente del nodo y el vector de desplazamiento del nodo. Esto significa que la función de ruido pasará por 0 en cada nodo, dándole al ruido Perlin su aspecto característico.
Si n = 1 , un ejemplo de una función que interpola entre el valor a 0 en el nodo de cuadrícula 0 y el valor a 1 en el nodo de cuadrícula 1 es
donde se utilizó la función smoothstep .
Las funciones de ruido para uso en gráficos por computadora normalmente producen valores en el rango [–1,0, 1,0] y se pueden escalar en consecuencia.
Muchas implementaciones de ruido Perlin utilizan el mismo conjunto de permutaciones que utilizó Ken Perlin en su implementación original. [10] Esta permutación específica no es absolutamente necesaria, aunque sí requiere una matriz aleatoria de números enteros del 0 al 255. Si se crea una nueva tabla de permutaciones, se debe tener cuidado para garantizar una distribución uniforme de los valores. [11]
Para cada evaluación de la función de ruido, el producto escalar de los vectores de posición y gradiente debe evaluarse en cada nodo de la celda de la cuadrícula contenedora. Por lo tanto, el ruido Perlin escala con complejidad O (2 n ) para n dimensiones. Las alternativas al ruido Perlin que producen resultados similares con escalamiento de complejidad mejorado incluyen el ruido simplex y el ruido OpenSimplex .
{{cite web}}
: CS1 maint: archived copy as title (link) CS1 maint: bot: original URL status unknown (link)de la 'función de ruido coherente' de Ken Perlin