Sto cercando di capire uno script che genererà una trama (che può quindi essere moltiplicata per un'immagine in scala di grigi per "applicarla"). Finora il mio metodo implica la semina del RNG, quindi generare casualmente una matrice 8x8 di numeri interi nell'intervallo [0,3], quindi ridimensionare quella matrice in un'immagine 256x256 utilizzando un certo livello di interpolazione.Creazione di una trama in modo procedurale
Ecco un esempio di output (valore seed 24):
Sample http://adamhaskell.net/misc/texture/sample.png
Sulla sinistra è la matrice scalata con primi vicini interpolazione. A destra c'è il mio tentativo di interpolazione bilineare. Per la maggior parte sembra ok, ma poi ottieni strutture simili a quelle del centro-sinistra dove ci sono due quadrati arancioni adiacenti diagonalmente con due quadrati rossi diagonalmente contigui, e il risultato non è un'interpolazione per quell'area. Inoltre, viene trattato più come una heatmap (come mostrato dall'abbondanza di arancione nell'angolo in alto a sinistra) e questo sta causando più problemi.
Ecco il codice che ho per il mio "interpolazione bilineare":
<?php
$matrix = Array();
srand(24);
$dim = 256;
$scale = 32;
for($y=0;$y<=$dim/$scale;$y++) for($x=0;$x<=$dim/$scale;$x++) $matrix[$y][$x] = rand(0,3);
$img = imagecreate($dim,$dim);
imagecolorallocate($img,255,255,255);
$cols = Array(
imagecolorallocate($img,128,0,0),
imagecolorallocate($img,128,64,32),
imagecolorallocate($img,128,128,0),
imagecolorallocate($img,64,64,64)
);
for($y=0;$y<$dim;$y++) {
for($x=0;$x<$dim;$x++) {
$xx = floor($x/$scale); $yy = floor($y/$scale);
$x2 = $x%$scale; $y2 = $y%$scale;
$col = $cols[round((
$matrix[$yy][$xx]*($scale-$x2)*($scale-$y2)
+ $matrix[$yy][$xx+1]*$x2*($scale-$y2)
+ $matrix[$yy+1][$xx]*($scale-$x2)*$y2
+ $matrix[$yy+1][$xx+1]*$x2*$y2
)/($scale*$scale))];
imagesetpixel($img,$x,$y,$col);
}
}
header("Content-Type: image/png");
imagepng($img);
exit;
In realtà, questo può essere un po 'un problema XY. Quello che sto specificatamente cercando di fare è generare "modelli di pelliccia" per le creature in un gioco che sto pianificando. In particolare, voglio essere in grado di averlo in modo tale che l'allevamento mescoli elementi dei due genitori (sia che si tratti di colore o elementi del modello), così solo avere un seme casuale non lo taglierà davvero. Idealmente ho bisogno di un qualche tipo di approccio basato sul vettore, ma sono molto lontano dalla mia profondità, quindi qualsiasi aiuto sarebbe molto apprezzato.
Penso che il motivo per cui sembra che una mappa di calore sia perché in realtà non stai facendo una vera interpolazione lineare dei colori dei vicini più vicini, in realtà stai scegliendo il colore esistente più vicino per questa interpolazione. Questo è anche il motivo per cui non vi è interpolazione nel vicino centro-sinistra. Perché non riesci a mescolare i colori? E se sono trame, non puoi fondere le trame con qualche componente alfa? – zakinster
Non proprio una risposta, ma aneddoto forse utile correlato. Penso che Alan Turing abbia lavorato su alcuni algoritmi matematici per produrre modelli di pelle animale di questo tipo. Forse valgono la pena dare un'occhiata? – AntonChanning