不得不说RSL真是很爽,毫无累赘。这个checker以前用Maya api写的时候总代码要200+吧,90%的代码是添加属性、初始化插件什么的。当然这也不怪Maya,因为Maya的DG Node的规范是为符合整个Maya流程设计的,可以用来写运算节点、形状节点甚至解算器,Shading只是其中一个小分支,所以导致非常的繁冗。而RSL的目的只是为了Shading,一切重复的都去掉,这就导致只去写那最核心的就行。
surface checker3d(
float size = 10;
color c1 = color(0,0,0);
color c2 = color(1,1,1);
float diffamb = 0.6
)
{
normal Nf = faceforward(normalize(N),I);
float illum = comp(diffuse(Nf),0)*diffamb+1-diffamb;
point Pw = transform("world",P)/size;
float tmp;
tmp = mod(floor(xcomp(Pw)),2) +
mod(floor(ycomp(Pw)),2) +
mod(floor(zcomp(Pw)),2);
color Cr = (mod(tmp,2)==0)?c1:c2;
Ci = Cr * illum;
}