float cullPlane( vector p) { return p[1] >= -0.502 ? p[1] + 0.5 : 20.0; } vector pMod( vector p, vector size) { vector pmod = p; if(size[0] > 0.0) pmod[0] = mod(p[0] + size[0] * 0.5, size[0]) - size[0] * 0.5; if(size[1] > 0.0) pmod[1] = mod(p[1] + size[1] * 0.5, size[1]) - size[1] * 0.5; if(size[2] > 0.0) pmod[2] = mod(p[2] + size[2] * 0.5, size[2]) - size[2] * 0.5; return pmod; } float sdSphere( vector p, float s) { return length(p) - s; } float opUnionRound( float a, float b, float r) { float e = max(r - abs(a - b), 0.0); return min(a, b) - e * e * 0.25 / r; } shader OslGeometry( vector spherePos = vector(1,1,1), output color c = 0) { float tmpComb_6 = opUnionRound( cullPlane( pMod( transform(matrix(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0),P), vector(-5.0,-5.0,-5.0) ) ) * 1.0, sdSphere( pMod( transform(matrix(1.0,0.0,0.0,spherePos[0], 0.0,1.0,0.0,spherePos[1], 0.0,0.0,1.0,spherePos[2], 0.0,0.0,0.0,1.0), P), vector(-5.0,-5.0,-5.0) ), 0.4) * 1.0, 2.1); c = color(tmpComb_6); vector pos = P; }