Kod shader-a po modyfikacjach.
color mydiffuse4(normal Norm; float fact; float samples; float cone; float falloff)
{
extern point P;
color C = 0;
illuminance( P )
{
float w = normalize(L).Norm;
if ( w >= 0 )
{
C = Cl;
C += (Cl * w) * fact;
}
else
{
float d;
color Ca;
gather("illuminance", P, normalize(L) , cone, samples, "ray:length", d, "surface:Ci", Ca)
{
float atten;
if (falloff==0)
atten=1;
else if (falloff==2)
atten=1/(L.L);
else
atten = 1/pow(length(L),falloff);
C += (Ca * atten);
}
C /= samples;
}
}
return C;
}
surface ax_sss(float Ka = 1;
float Kd = 1;
float Ks = 1;
float roughness = .1;
float lfact = 0.25;
float samples = 1;
float cone = 0.1;
float falloff = 0;
)
{
Oi = Os;
Ci = Os * Cs * (Ka * ambient() + Kd * mydiffuse4(normalize(N),lfact,samples,cone, falloff )) + Ks*specular(normalize(N),-normalize(I),roughness);
}
A tak oftopowo to przy okazji zabawy z Renderman-em zrobilem sobie plugin ktory wczytuje mi obiekty z plikow 3DS.
Duzo zabawy i kombinowania z tym Renderman-em a efekty takie sobie ;), dodatkowo w filmach coraz wiecej Mental-a sie uzywa.