Проблема....кто-нть может подсказать, почему после вставки вот этого вот темплейта в .slim файл(в rat/lib/slim/*.slim), Slim перестаёт генерить код. Ну то есть не совсем перестаёт, а просто не пишет код именно для этого темплейта - я даже посмотреть не могу, где ашипка...
Это обычный IDgloop, просто переделанный под slim.
// --------- j_displ start ------------
slim 1 extensions pixardb {
extensions joss pxsl {
template displacement IDgloop_J {
description "IDgloop displacement shader demostrating non-linear displacement in PRMan"
parameter float mag {
description "A multiplier for the displacement"
subtype slider
range {0 2 .001}
detail varying
default 0.1
}
parameter float freq {
description "Frequency of displacement"
subtype slider
range {0 100 .001}
detail varying
default 5
}
RSLFunction {
void pxslIDgloop_J (float mag; float freq) {
vector overdist = 0.1;
vector stepsize = mag/freq;
float numsteps = 20;
point Psh = transform ( "object", P ) * freq;
vector dPduN = normalize ( vtransform ( "object", dPdu ) );
vector dPdvN = normalize ( vtransform ( "object", dPdv ) );
point Pou = Psh + ( dPduN * overdist );
point Pov = Psh + ( dPdvN * overdist );
float nz = noise(Psh) - 0.5;
float nzou = noise(Pou) - 0.5;
float nzov = noise(Pov) - 0.5;
float chu = (nz - nzou);
float chv = (nz - nzov);
vector DdPdu = dPduN;
vector DdPdv = dPdvN;
vector step = DdPdu^DdPdv;
float i;
for( i=1; i<numsteps; i+=1 ) {
P -= vtransform("object", "current", step) * nz * stepsize;
DdPdu = normalize (DdPdu+ (step * chu));
DdPdv = normalize (DdPdv+ (step * chv));
step = DdPdu ^ DdPdv;
}
N = normalize ( calculatenormal( P ) );
}
}
}
}
}
// ---------- j_displ end -------------
Это обычный IDgloop, просто переделанный под slim.
// --------- j_displ start ------------
slim 1 extensions pixardb {
extensions joss pxsl {
template displacement IDgloop_J {
description "IDgloop displacement shader demostrating non-linear displacement in PRMan"
parameter float mag {
description "A multiplier for the displacement"
subtype slider
range {0 2 .001}
detail varying
default 0.1
}
parameter float freq {
description "Frequency of displacement"
subtype slider
range {0 100 .001}
detail varying
default 5
}
RSLFunction {
void pxslIDgloop_J (float mag; float freq) {
vector overdist = 0.1;
vector stepsize = mag/freq;
float numsteps = 20;
point Psh = transform ( "object", P ) * freq;
vector dPduN = normalize ( vtransform ( "object", dPdu ) );
vector dPdvN = normalize ( vtransform ( "object", dPdv ) );
point Pou = Psh + ( dPduN * overdist );
point Pov = Psh + ( dPdvN * overdist );
float nz = noise(Psh) - 0.5;
float nzou = noise(Pou) - 0.5;
float nzov = noise(Pov) - 0.5;
float chu = (nz - nzou);
float chv = (nz - nzov);
vector DdPdu = dPduN;
vector DdPdv = dPdvN;
vector step = DdPdu^DdPdv;
float i;
for( i=1; i<numsteps; i+=1 ) {
P -= vtransform("object", "current", step) * nz * stepsize;
DdPdu = normalize (DdPdu+ (step * chu));
DdPdv = normalize (DdPdv+ (step * chv));
step = DdPdu ^ DdPdv;
}
N = normalize ( calculatenormal( P ) );
}
}
}
}
}
// ---------- j_displ end -------------