El ruido simplex es un método para construir una función de ruido n-dimensional comparable al ruido Perlin (ruido "clásico"), pero con menos artefactos direccionales y, en dimensiones más altas, menos sobrecarga computacional. Ken Perlin desarrolló el algoritmo en 2001 para abordar las limitaciones de su función de ruido clásica, especialmente en dimensiones más altas.
Ventajas del ruido simplex sobre el ruido Perlin:
El ruido simplex generalmente se implementa como una función de dos, tres o cuatro dimensiones , pero se puede definir para cualquier número de dimensiones. La implementación suele implicar cuatro pasos: desviación de coordenadas, división en simples, selección de gradiente y suma del kernel.
La coordenada de entrada se convierte mediante la fórmula
dónde
Esto da como resultado colocar una coordenada en una red A n * , que es esencialmente la ubicación de los vértices de un panal hipercúbico , comprimido a lo largo de la diagonal principal a la distancia entre los puntos, mientras que la distancia entre los puntos es (0, 0, …, 0) y (1, 1, …, 1) se vuelve igual a la distancia entre los puntos (0, 0, …, 0) y (1, 0, …, 0). La coordenada resultante (x', y', …) se usa para determinar qué celda oblicua del hipercubo unitario es el punto de entrada, (xb' = piso (x'), yb'= piso (y'), …) y sus coordenadas interiores (xi'= x'-xb', yi'= y'-yb', …).
Una vez determinado lo anterior, los valores de las coordenadas internas (xi', yi',…) se ordenan en orden descendente para determinar en qué ortoesquema símplex de Schläfli sesgado se encuentra el punto. Entonces, el símplex resultante consta de vértices correspondientes a un recorrido ordenado de aristas desde (0, 0, …, 0) hasta (1, 1, …, 1), de las cuales n! posible, cada uno de los cuales corresponde a una permutación de la coordenada. En otras palabras, comience en la coordenada cero y agregue unidades secuencialmente, comenzando con el valor correspondiente al valor más grande de la coordenada interna y terminando con el más pequeño.
Por ejemplo, el punto (0.4, 0.5, 0.3) estará dentro del símplex con vértices (0, 0, 0), (0, 1, 0), (1, 1, 0), (1, 1, uno) . La coordenada yi' es la más grande, por lo que se suma primero. Luego viene la coordenada xi' y finalmente zi'.
Cada vértice del símplex se vuelve a agregar a la coordenada base del hipercubo desviado y se procesa en la dirección del gradiente pseudoaleatorio. Un hash se puede implementar de muchas formas, aunque la más utilizada es una tabla de permutación o un esquema de manipulación de bits.
Se debe tener cuidado al seleccionar el conjunto de gradientes a incluir para minimizar los artefactos direccionales.
La contribución de cada uno de los n+1 vértices del símplex se tiene en cuenta sumando los núcleos radialmente simétricos centrados alrededor de cada vértice. Primero, las coordenadas no desviadas de cada uno de los vértices están determinadas por la fórmula inversa
dónde
Este punto se resta de la coordenada de entrada para obtener un vector de desplazamiento sin compensaciones. Este vector de sesgo se utiliza para dos propósitos:
Por lo tanto, la contribución total del núcleo de cada vértice se determina mediante la ecuación
donde r 2 generalmente se establece en 0.5 o 0.6. 0,5 garantiza que no se rompa, mientras que 0,6 puede mejorar la calidad visual en aplicaciones donde no se nota el rasgado. 0.6 se utilizó en la implementación de referencia original de Ken Perlin.
El uso de implementaciones 3D y superiores para la síntesis de imágenes texturizadas está cubierto por la patente estadounidense número 6.867.776 si el algoritmo se implementa usando las técnicas específicas descritas en cualquiera de las reivindicaciones de la patente.