Estoy tratando de implementar (en C #) un algoritmo de perturbación de imagen presentado en el libro "Texturizado y modelado - K. Perlin et al" (página 91 si alguien lo tiene), que distorsiona una imagen. El siguiente código está en lenguaje Renderman: el acceso de textura
Ct = texture("example.tx", s, t);
es reemplazado por
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);
transformando la imagen de la izquierda a la de la derecha.
Por lo que no entendí, en lugar de acceder a las coordenadas accedemos a coordenadas ligeramente perturbadas y las mostramos en el lugar , creando así una imagen que se ve ligeramente perturbada .
se define como , el ruido de mapeo de a , y en la documentación de RenderMan el donde P es un punto, devuelve un valor basado en algo de ruido (muy probablemente perlin o celosía). ( http://renderman.pixar.com/resources/current/RenderMan/noiseFunctions.html )
Lo que no entiendo es qué hace la función de transformación, que se supone que asigna el punto P 3d al espacio "sombreador", y cómo se puede implementar. Además, no estoy seguro de si el ruido (x) devuelve un punto 3d, un flotador (tendría más sentido) y si puedo usar una implementación 2d simple del ruido de Perlin para alcanzar el mismo efecto deseado.