OSL
Jump to navigation
Jump to search
Octane Cubemap
Using octane + houdini.
Wip this is just shit I stole from the octane forums to give me a start because OSL is a little confusing, and Houdini implementation even worse.
shader OslCamera( float roomWidth = 1 [[ float min = 0.0, float max = 100.0 ]], float roomHeight = 1.0 [[ float min = 0.0, float max = 100.0 ]], float roomDepth = 1.0 [[ float min = 0.0, float max = 100.0 ]], float ceilingOffset = 0, float leftOffset = 0.5, float frontOffset = 0.5, float rightOffset = 0.5, float floorOffset = 0, output point pos = P, output vector dir = 0, output float tMax = 1.0/0.0) { float pa; int res[2]; float r = 8.0; float col = floor(u*3); float row = floor(v*3); float nu = (u*3) - floor(u*3)-0.5; float nv = (v*3) - floor(v*3)-0.5; vector forward = vector(0,0,1); vector up = vector(0,0,0); vector right = vector(0,0,0); float width = 1; float height = 1; vector pN = vector(0,0,0); if(col==1 && row==2) { //ceiling forward = vector(0,1,0); right = vector(roomWidth,0,0); up = vector(0,0,roomDepth); pN = vector(0,roomHeight-ceilingOffset,0); } if(col==0 && row==1) { //left forward = vector(-1,0,0); up = vector(0,roomHeight,0); right = vector (0,0,-roomDepth); pN = vector(leftOffset-roomWidth/2,roomHeight/2,0); } if(col==1 && row==1) { //forward forward = vector(0,0,-1); up = vector(0,roomHeight,0); right = vector(roomWidth,0,0); pN = vector(0,roomHeight/2,-(frontOffset-(roomDepth/2.0))); } if(col==2 && row==1) { //right forward = vector(1,0,0); up = vector(0,roomHeight,0); right = vector(0,0,roomDepth); pN = vector(roomWidth/2-rightOffset,roomHeight/2,0); } if(col==1 && row==0) { //floor forward = vector(0,-1,0); up = vector(0,0,-roomDepth); right = vector(roomWidth,0,0); pN = vector(0,floorOffset,0); } if(col==0 && row==2) { //curtains forward = vector(0,0,-1); up = vector(0,roomHeight,0); right = vector(roomWidth,0,0); pN = vector(roomWidth*2.0,0.5,roomDepth); } if(col==0 && row==0) { //curtains forward = vector(0,0,-1); up = vector(0,roomHeight,0); right = vector(roomWidth,0,0); pN = vector(roomWidth,0.5,roomDepth); } //getattribute("camera:pixelaspect", pa); //getattribute("camera:resolution", res); //float aspect = pa * res[1] / res[0] * n; dir = forward; pos = pN+(nu*right)+(nv*up); }