Estoy implementando un ruido Perlin mejorado . Su característica clave para la aleatorización es la tabla de permutación codificada, que proporciona gradientes esencialmente aleatorios pero reproducibles en las celdas de la cuadrícula. La tabla de permutación es solo una permutación de los enteros 0..255
, y generalmente es la siguiente tabla (copiada directamente de la implementación original de Perlin):
{151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7,
225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247,
120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134,
139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220,
105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80,
73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86,
164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38,
147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189,
28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101,
155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,
178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12,
191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181,
199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236,
205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180};
Como referencia, un pequeño parche extraído del ruido generado por esta tabla se ve así:
Sin embargo, me gustaría que el código sea un poco más flexible y permita reorganizar esta tabla para poder crear un campo de ruido completamente nuevo (en lugar de simplemente muestrearlo en un desplazamiento diferente). Pero no todas las permutaciones se mezclan igualmente bien. En el improbable caso de que la permutación aleatoria sea solo la matriz ordenada de 0
a 255
, el ruido se vería así en su lugar:
Eso es un poco malo. ¡Por supuesto, con una posibilidad de en, este no es un caso del que deba preocuparme. Pero seguramente, esta no es la única permutación que produce artefactos muy notables. Las permutaciones inversas y casi ordenadas probablemente tendrían los mismos problemas. Entonces, ¿cuántas otras permutaciones no son adecuadas? Digamos que el código se usaría en un juego popular para generar un mundo aleatorio por adelantado, aún sería molesto si cada mundo generado número 100,000 se viera remotamente regular.
Entonces, la pregunta es, ¿qué es exactamente lo que hace que una tabla de permutación sea buena (o mala) y cómo evalúo la calidad de una tabla de permutación mediante programación, de modo que pueda reorganizar la tabla una vez más en el improbable caso de que saque una "mala" " ¿mesa?