Ich versuche (in C #) einen Bildstörungsalgorithmus zu implementieren, der im Buch "Texturierung und Modellierung - K. Perlin et al." (Seite 91, falls jemand ihn hat) vorgestellt wird und ein Bild verzerrt. Der folgende Code ist in Renderman-Sprache: Der Texturzugriff
Ct = texture("example.tx", s, t);
wird ersetzt durch
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);
Transformieren Sie das Bild links in das Bild rechts.
Nach dem, was ich verstanden habe, greifen wir nicht auf Koordinaten , sondern greifen auf leicht gestörte Koordinaten und zeigen sie an den Stellen , wodurch ein Bild entsteht, das leicht gestört aussieht .( s s , t t ) ( s , t )
( n o i s e ( x ) ∗ 2 ) - 1 [ 0 , 1 ] [ - 1 , 1 ] n o i s e ( P ) ist definiert als , wobei Rauschen von auf abgebildet wird , und in der RenderMan-Dokumentation wird wobei P ein Punkt ist Ein Wert, der auf etwas Rauschen basiert (höchstwahrscheinlich Perlin oder Gitter). ( http://renderman.pixar.com/resources/current/RenderMan/noiseFunctions.html )
Was ich nicht verstehe, ist, was die Transformationsfunktion tut, die den 3D-Punkt P in den "Shader" -Raum abbilden soll, und wie er implementiert werden kann. Ich bin mir auch nicht sicher, ob Rauschen (x) einen 3D-Punkt oder einen Float zurückgibt (was sinnvoller wäre) und ob ich eine einfache 2D-Implementierung von Perlins Rauschen verwenden kann, um den gleichen gewünschten Effekt zu erzielen.