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