I am trying to implement (in C#) an image perturbation algorithm presented in the book "Texturing and modeling - K. Perlin et al" (page 91 if anyone has it), which distorts an image. The following code is in Renderman language: the texture access <code>Ct = texture("example.tx", s, t);</code> is replaced by <pre><code>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);</code></pre> transforming the image on the left to that on the right [![enter image description here][1]][1] from what I undestood, instead of accessing coordinate $(s,t)\in[0,1]$ we access slighty perturbed coordinates $(ss,tt)$ and display them at place $(s,t)$, thus creating an image that looks slightly perturbed $snoise(x)$ is defined as $(noise(x)*2)-1$, mapping noise from $[0,1]$ to $[-1,1]$, and in the RenderMan documentation $noise(P)$ where P is a point, returns a value based on some noise (most likely perlin or lattice). (http://renderman.pixar.com/resources/current/RenderMan/noiseFunctions.html) what I don't understand is what the transform function does, which is supposed to map the 3d point P into the "shader" space, and how can it be implemented. Also, I'm not sure whether noise(x) returns a 3d point, a float (would make more sense) and if I can use a simple 2d implementation of Perlin's noise to reach the same desired effect. Many thanks [1]: https://i.sstatic.net/vxxJX.png