Sto implementando un rumore Perlin migliorato . La sua caratteristica chiave per la randomizzazione è la tabella di permutazione codificata, che fornisce gradienti essenzialmente casuali ma riproducibili alle celle della griglia. La tabella di permutazione è solo una permutazione degli interi 0..255
ed è generalmente la seguente tabella (copiata direttamente dall'implementazione originale di 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};
Per riferimento, una piccola patch disegnata dal rumore generato da questa tabella è simile alla seguente:
Tuttavia, vorrei che il codice fosse un po 'più flessibile e consentissi di rimescolare questa tabella in modo da poter creare un campo noise completamente nuovo (invece di campionarlo con un offset diverso). Ma non tutte le permutazioni sono ugualmente ben mescolate. Nel caso improbabile che la permutazione casuale sia solo l'array ordinato da 0
a 255
, il rumore sarebbe invece simile a questo:
È un po 'brutto. Certo, alla possibilità di in , questo non è un caso di cui devo preoccuparmi. Ma sicuramente, questa non è l'unica permutazione che produce artefatti molto evidenti. Le permutazioni inverse e quasi ordinate avrebbero probabilmente gli stessi problemi. Quindi quante altre permutazioni sono inadatte? Supponiamo che il codice venga utilizzato in un gioco popolare per generare un mondo casuale in anticipo, sarebbe comunque fastidioso se ogni 100.000esimo mondo generato sembrasse remoto.
Quindi la domanda è: cosa rende esattamente una tabella di permutazione buona (o cattiva) e come posso valutare la qualità di una tabella di permutazione a livello di codice, in modo tale da poter rimescolare la tabella ancora una volta nell'improbabile evento in cui lancio un "cattivo " tavolo?