surface test_vis1(float Kd = 1, visToCamera = 1, visToOthers = 1, visibility = 0, minimum = 0, maximum = 2; color surfaceColor = (1,1,1)) { normal n = normalize(N); normal nf = faceforward(n, I); string typename = "unknown"; color diffusecolor, surfcolor = surfaceColor; rayinfo("type", typename); float isCameraRay = (typename == "camera") ? 1 : 0; if((isCameraRay == 1 && visToCamera == 1) || (isCameraRay == 0 && visToOthers == 1)){ diffusecolor = Kd * diffuse(nf); Oi = Os; Ci = Oi * Cs * diffusecolor * surfcolor; } else { Ci = 0; Oi = 0; if(n != nf){ float vis = smoothstep(minimum, maximum, length(I)); diffusecolor = Kd * diffuse(nf); Oi = vis; Ci = Oi * mix(color trace(P,I),Cs,Oi) * diffusecolor * surfcolor; } } }