Я пытаюсь реализовать (в C #) алгоритм возмущения изображения, представленный в книге «Текстурирование и моделирование - К. Перлин и др.» (Стр. 91, если кто-то есть), который искажает изображение. Следующий код на языке Renderman: Доступ к текстуре
Ct = texture("example.tx", s, t);
заменяется
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);
трансформируя изображение слева в изображение справа.
Из того, что я понял, вместо доступа к координате мы получаем доступ к незначительным возмущенным координатам и отображаем их в месте , создавая таким образом изображение, которое выглядит слегка возмущенным ,
определяется как , шум отображения от до , а в документации RenderMan где P - точка, возвращает значение, основанное на некотором шуме (наиболее вероятно, perlin или решетке). ( http://renderman.pixar.com/resources/current/RenderMan/noiseFunctions.html )
Что я не понимаю, так это то, что делает функция преобразования, которая должна отобразить 3d-точку P в «шейдерное» пространство, и как это можно реализовать. Кроме того, я не уверен, возвращает ли noise (x) 3d-точку, float (имело бы больше смысла) и могу ли я использовать простую 2d-реализацию шума Перлина для достижения того же желаемого эффекта.