Sto cercando di implementare (in C #) un algoritmo di perturbazione dell'immagine presentato nel libro "Texturing and modelling - K. Perlin et al" (pagina 91 se presente), che distorce un'immagine. Il codice seguente è in lingua Renderman: L'accesso alla trama
Ct = texture("example.tx", s, t);
è sostituito da
point Psh;
float ss, tt;
Psh = transform("shader", P);
ss = s + 0.2 * snoise(Psh);
tt = t + 0.2 * snoise(Psh+(l.5,6.7,3.4));
Ct = texture("example.tx", ss, tt);
trasformando l'immagine a sinistra in quella a destra.
Da ciò che non capisco, invece di accedere alle coordinate accediamo a coordinate leggermente perturbate e le visualizziamo in posizione , creando così un'immagine che appare leggermente perturbata .
è definito come , mappando il rumore da a , e nella documentazione RenderMan dove P è un punto, restituisce un valore basato su un certo rumore (molto probabilmente perlin o reticolo). ( http://renderman.pixar.com/resources/current/RenderMan/noiseFunctions.html )
Quello che non capisco è cosa fa la funzione di trasformazione, che dovrebbe mappare il punto 3D P nello spazio "shader", e come può essere implementato. Inoltre, non sono sicuro se il rumore (x) restituisca un punto 3d, un float (avrebbe più senso) e se posso usare una semplice implementazione 2d del rumore di Perlin per ottenere lo stesso effetto desiderato.