surface blend_trace(float reflect_refract_blend = 0, ri = 0.5, opacity = 1; color surfcolor = (1,1,1)) { vector i = normalize(I); normal n = normalize(N), nf = faceforward(n, i); color reflectioncolor = 0; color refractioncolor = 0; color blendval; Ci = Cs; Oi = Os * opacity; if(nf.-i > 0) { vector reflectDirection = reflect(I, nf); reflectioncolor += trace(P, reflectDirection); } if(nf.-i > 0) { vector reflectDirection = refract(I, nf,ri); refractioncolor += trace(P, reflectDirection); } blendval = mix(reflectioncolor, refractioncolor,reflect_refract_blend); Ci = Oi * surfcolor * blendval; }