вот что у меня на текущий момент получилось:out 11
... он немного грязный просто проверь что получиться ...
... выложи отдельно маску, matcap1 и matcap2 (ну и модель если не сложно) ...
#include "stdosl.h"shader simple(vector Vi = 0,output vector Vo = 0){ float x = Vi[0]; float y = Vi[1]; x = (2 * x - 1) * 2; y = 2 * y - 1; if(x>1) x = 2 - x; if(x<-1) x = -2 - x; float theta = M_PI_2 + x * M_PI_2; float phi = y * M_PI_2; float px = cos(phi) * cos(theta); float py = cos(phi) * sin(theta); float pz = sin(phi); theta = atan2(pz,px); phi = atan2(sqrt(px*px+pz*pz),py); float r = phi / M_PI_2; float us = (1 + r * cos(theta)) / 2; float vs = (1 + r * sin(theta)) / 2; Vo = vector(us,vs,0);}
// name: matcap_emul_for_cycles// author: sungreen// version: (0, 1, 2)// blender: (2, 6, 9)// description: matcap for cycles// url: [url]http://blender-3d.ru/forum/index.php/topic,602.msg6155/topicseen.html#msg6155[/url]#include "stdosl.h"#include "node_color.h"vector to_fish(vector Vi){ float x = Vi[0]; float y = Vi[1]; float z = Vi[2]; float u = -atan2(y, x) / (M_2PI) + 0.5; float v = atan2(z, hypot(x,y)) / M_PI + 0.5; x = (2 * u - 1) * 2; y = 2 * v - 1; if(x>1) x = 2 - x; if(x<-1) x = -2 - x; float theta = M_PI_2 + x * M_PI_2; float phi = y * M_PI_2; float px = cos(phi) * cos(theta); float py = cos(phi) * sin(theta); float pz = sin(phi); theta = atan2(pz,px); phi = atan2(sqrt(px*px+pz*pz),py); float r = phi / M_PI_2; float us = (1 + r * cos(theta)) / 2; float vs = (1 + r * sin(theta)) / 2; return vector(us,vs,0);}shader node_environment_texture( vector Vi = N, output vector Vo = 0.0){ vector p = Vi; p = transform("world","camera",p); p = rotate(p, M_PI_2, vector(0,0,0), vector(1,0,0)); p = rotate(p, M_PI_2, vector(0,0,0), vector(0,0,1)); p = normalize(p); p = to_fish(p); Vo = p;}
... все три метода работают, из них два последних работаю в "Cycles" ...... на мой взгляд, последний метод очень красивый, даже шедевральный ...