Estou tentando implementar (em C #) um algoritmo de perturbação de imagem apresentado no livro "Texturização e modelagem - K. Perlin et al" (página 91, se houver), o que distorce uma imagem. O código a seguir está no idioma Renderman: O acesso à textura
Ct = texture("example.tx", s, t);
é substituído 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 a imagem da esquerda para a direita.
Pelo que eu subestimo, em vez de acessar as coordenadas , acessamos leves coordenadas perturbadas e as exibimos no local , criando assim uma imagem que parece levemente perturbada .
é definido como , mapeando o ruído de a e, na documentação do RenderMan, o que P é um ponto, retorna um valor baseado em algum ruído (provavelmente perlin ou treliça). ( http://renderman.pixar.com/resources/current/RenderMan/noiseFunctions.html )
O que não entendo é o que a função de transformação faz, que deveria mapear o ponto P 3D no espaço "shader" e como ela pode ser implementada. Além disso, não tenho certeza se o ruído (x) retorna um ponto 3d, um ponto flutuante (faria mais sentido) e se eu posso usar uma implementação 2D simples do ruído do Perlin para alcançar o mesmo efeito desejado.