stringtranslate.com

ruido perlín

Corte bidimensional a través del ruido Perlin 3D en z = 0

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.

Historia

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]

Usos

Un paisaje virtual generado mediante ruido Perlin.

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.

Una superficie orgánica virtual generada con ruido Perlin

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]

Detalle del algoritmo

El ruido Perlin se reescaló y se agregó a sí mismo para crear ruido fractal. En cada paso, la frecuencia del ruido se duplica y la amplitud se reduce a la mitad.
Ruido Perlin 2-D con una línea de contorno en cero, lo que muestra que el ruido es cero en las intersecciones de la malla de degradado

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]

Definición de cuadrícula

Una cuadrícula bidimensional de vectores degradados.

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.

Producto escalar

El producto escalar de cada punto con su valor de gradiente del nodo de cuadrícula más cercano. No se muestra el producto escalar con los otros tres nodos de la celda.

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.

Interpolación

El resultado final interpolado

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.

Permutación

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]

Complejidad

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 .

Ver también

Referencias

  1. ^ Perlin, Ken. "Haciendo ruido". noisemachine.com . Ken Perlín. Archivado desde el original el 8 de octubre de 2007.
  2. ^ Perlin, Ken (julio de 1985). "Un sintetizador de imágenes". Gráficos por computadora ACM SIGGRAPH . 19 (97–8930): 287–296. doi :10.1145/325165.325247.
  3. ^ Perlin, Ken. "Al principio: The Pixel Stream Editor" (PDF) . Consultado el 31 de mayo de 2022 .
  4. ^ Curtidor, Mike. "Oscar es la recompensa del mago FX". Cableado . ISSN  1059-1028 . Consultado el 31 de mayo de 2022 .
  5. ^ Código fuente original
  6. ^ "Copia archivada". Archivado desde el original el 1 de mayo de 2018 . Consultado el 29 de mayo de 2011 .{{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
  7. ^ ab Gustavson, Stefan. "Ruido simplex desmitificado" (PDF) . Archivado desde el original (PDF) el 21 de marzo de 2023 . Consultado el 24 de abril de 2019 .
  8. ^ Patente estadounidense 6867776, Kenneth Perlin, "Estándar para ruido perlin", emitida el 15 de marzo de 2005, asignada a Kenneth Perlin y Wsou Investments LLC 
  9. ^ Etherington, Thomas R. (2022). "El ruido Perlin como modelo de paisaje neutral jerárquico". Ecología Web . 22 (1): 1–6. doi : 10.5194/we-22-1-2022 .
  10. ^ Perlin, Ken. «Ruido perlín» . Consultado el 26 de agosto de 2020 .
  11. ^ "Ruido Perlin: Parte 2". Archivado desde el original el 17 de febrero de 2023 . Consultado el 26 de agosto de 2020 .

enlaces externos