diff --git a/cubemap-rendersetup.blend b/cubemap-rendersetup.blend new file mode 100644 index 0000000..8e814c0 Binary files /dev/null and b/cubemap-rendersetup.blend differ diff --git a/equi_to_cube.py b/equi_to_cube.py new file mode 100644 index 0000000..4f4dc73 --- /dev/null +++ b/equi_to_cube.py @@ -0,0 +1,119 @@ +from __future__ import print_function +import sys +import os.path +from PIL import Image +from math import pi,sin,cos,tan,atan2,hypot,floor +from numpy import clip + +# get x,y,z coords from out image pixels coords +# i,j are pixel coords +# face is face number +# edge is edge length +def outImgToXYZ(i,j,face,edge): + a = 2.0*float(i)/edge + b = 2.0*float(j)/edge + if face==0: # back + (x,y,z) = (-1.0, 1.0-a, 3.0 - b) + elif face==1: # left + (x,y,z) = (a-3.0, -1.0, 3.0 - b) + elif face==2: # front + (x,y,z) = (1.0, a - 5.0, 3.0 - b) + elif face==3: # right + (x,y,z) = (7.0-a, 1.0, 3.0 - b) + elif face==4: # top + (x,y,z) = (b-1.0, a -5.0, 1.0) + elif face==5: # bottom + (x,y,z) = (5.0-b, a-5.0, -1.0) + return (x,y,z) + +# convert using an inverse transformation +def convertBack(imgIn,imgOut): + inSize = imgIn.size + outSize = imgOut.size + inPix = imgIn.load() + outPix = imgOut.load() + edge = inSize[0]/4 # the length of each edge in pixels + for i in range(outSize[0]): + face = int(i/edge) # 0 - back, 1 - left 2 - front, 3 - right + if face==2: + rng = range(0,int(edge*3)) + else: + rng = range(int(edge), int(edge) * 2) + + for j in rng: + if j=2*edge: + face2 = 5 # bottom + else: + face2 = face + + (x,y,z) = outImgToXYZ(i,j,face2,edge) + theta = atan2(y,x) # range -pi to pi + r = hypot(x,y) + phi = atan2(z,r) # range -pi/2 to pi/2 + # source img coords + uf = ( 2.0*edge*(theta + pi)/pi ) + vf = ( 2.0*edge * (pi/2 - phi)/pi) + # Use bilinear interpolation between the four surrounding pixels + ui = floor(uf) # coord of pixel to bottom left + vi = floor(vf) + u2 = ui+1 # coords of pixel to top right + v2 = vi+1 + mu = uf-ui # fraction of way across pixel + nu = vf-vi + # Pixel values of four corners + # import sys + # print('inPix ->', inPix) + # print('ui ->', ui) + # print('inSize[0]', inSize[0]) + # bar = clip(vi,0,inSize[1]-1) + # print('bar ->', bar, type(bar), int(bar)) + # baz = ui % inSize[0] + # print('baz ->', baz, type(baz)) + # foo = inPix[ui % inSize[0], bar] + # sys.exit(-1) + A = inPix[ui % inSize[0],int(clip(vi,0,inSize[1]-1))] + B = inPix[u2 % inSize[0],int(clip(vi,0,inSize[1]-1))] + C = inPix[ui % inSize[0],int(clip(v2,0,inSize[1]-1))] + D = inPix[u2 % inSize[0],int(clip(v2,0,inSize[1]-1))] + # interpolate + (r,g,b) = ( + A[0]*(1-mu)*(1-nu) + B[0]*(mu)*(1-nu) + C[0]*(1-mu)*nu+D[0]*mu*nu, + A[1]*(1-mu)*(1-nu) + B[1]*(mu)*(1-nu) + C[1]*(1-mu)*nu+D[1]*mu*nu, + A[2]*(1-mu)*(1-nu) + B[2]*(mu)*(1-nu) + C[2]*(1-mu)*nu+D[2]*mu*nu ) + + outPix[i,j] = (int(round(r)),int(round(g)),int(round(b))) + +imgIn = Image.open(sys.argv[1]) +inSize = imgIn.size +i1 = inSize[0] +imgOut = Image.new("RGB",(inSize[0],int(inSize[0]*3/4)),"black") +convertBack(imgIn,imgOut) +imgOut.save(sys.argv[1].split('.')[0]+"_cubemap.png") + +file_extension = ".jpg" + +name_map = [ \ + ["", "", "py", ""], + ["nz", "nx", "pz", "px"], + ["", "", "ny", ""]] + +try: + width, height = imgOut.size + + cube_size = width / 4 + + filelist = [] + for row in range(3): + for col in range(4): + if name_map[row][col] != "": + sx = cube_size * col + sy = cube_size * row + fn = name_map[row][col] + file_extension + filelist.append(fn) + imgOut.crop((sx, sy, sx + cube_size, sy + cube_size)).save(fn) + + +except IOError: + pass diff --git a/hotel_cubemap/hotel_room_cubemap.png b/hotel_cubemap/hotel_room_cubemap.png new file mode 100644 index 0000000..01c1937 Binary files /dev/null and b/hotel_cubemap/hotel_room_cubemap.png differ diff --git a/hotel_cubemap/nx.jpg b/hotel_cubemap/nx.jpg new file mode 100644 index 0000000..cffd5a6 Binary files /dev/null and b/hotel_cubemap/nx.jpg differ diff --git a/hotel_cubemap/ny.jpg b/hotel_cubemap/ny.jpg new file mode 100644 index 0000000..c735e25 Binary files /dev/null and b/hotel_cubemap/ny.jpg differ diff --git a/hotel_cubemap/nz.jpg b/hotel_cubemap/nz.jpg new file mode 100644 index 0000000..b0b3baf Binary files /dev/null and b/hotel_cubemap/nz.jpg differ diff --git a/hotel_cubemap/px.jpg b/hotel_cubemap/px.jpg new file mode 100644 index 0000000..3189558 Binary files /dev/null and b/hotel_cubemap/px.jpg differ diff --git a/hotel_cubemap/py.jpg b/hotel_cubemap/py.jpg new file mode 100644 index 0000000..8c2d97f Binary files /dev/null and b/hotel_cubemap/py.jpg differ diff --git a/hotel_cubemap/pz.jpg b/hotel_cubemap/pz.jpg new file mode 100644 index 0000000..3cac7e7 Binary files /dev/null and b/hotel_cubemap/pz.jpg differ diff --git a/hotel_room.png b/hotel_room.png new file mode 100644 index 0000000..a50cfbe Binary files /dev/null and b/hotel_room.png differ diff --git a/rough.png b/rough.png new file mode 100644 index 0000000..3c8c7b4 Binary files /dev/null and b/rough.png differ diff --git a/rough_cubemap/nx.jpg b/rough_cubemap/nx.jpg new file mode 100644 index 0000000..3973e7d Binary files /dev/null and b/rough_cubemap/nx.jpg differ diff --git a/rough_cubemap/ny.jpg b/rough_cubemap/ny.jpg new file mode 100644 index 0000000..595b510 Binary files /dev/null and b/rough_cubemap/ny.jpg differ diff --git a/rough_cubemap/nz.jpg b/rough_cubemap/nz.jpg new file mode 100644 index 0000000..2dd645e Binary files /dev/null and b/rough_cubemap/nz.jpg differ diff --git a/rough_cubemap/px.jpg b/rough_cubemap/px.jpg new file mode 100644 index 0000000..c6840fa Binary files /dev/null and b/rough_cubemap/px.jpg differ diff --git a/rough_cubemap/py.jpg b/rough_cubemap/py.jpg new file mode 100644 index 0000000..3413d6d Binary files /dev/null and b/rough_cubemap/py.jpg differ diff --git a/rough_cubemap/pz.jpg b/rough_cubemap/pz.jpg new file mode 100644 index 0000000..6fb9b6f Binary files /dev/null and b/rough_cubemap/pz.jpg differ diff --git a/rough_cubemap/rough_cubemap.png b/rough_cubemap/rough_cubemap.png new file mode 100644 index 0000000..6ab24b4 Binary files /dev/null and b/rough_cubemap/rough_cubemap.png differ diff --git a/studio.png b/studio.png new file mode 100644 index 0000000..281c129 Binary files /dev/null and b/studio.png differ diff --git a/studio_cubemap/nx.jpg b/studio_cubemap/nx.jpg new file mode 100644 index 0000000..ea9e89f Binary files /dev/null and b/studio_cubemap/nx.jpg differ diff --git a/studio_cubemap/ny.jpg b/studio_cubemap/ny.jpg new file mode 100644 index 0000000..4bc2a86 Binary files /dev/null and b/studio_cubemap/ny.jpg differ diff --git a/studio_cubemap/nz.jpg b/studio_cubemap/nz.jpg new file mode 100644 index 0000000..44aee5b Binary files /dev/null and b/studio_cubemap/nz.jpg differ diff --git a/studio_cubemap/px.jpg b/studio_cubemap/px.jpg new file mode 100644 index 0000000..f162e7e Binary files /dev/null and b/studio_cubemap/px.jpg differ diff --git a/studio_cubemap/py.jpg b/studio_cubemap/py.jpg new file mode 100644 index 0000000..fbd1445 Binary files /dev/null and b/studio_cubemap/py.jpg differ diff --git a/studio_cubemap/pz.jpg b/studio_cubemap/pz.jpg new file mode 100644 index 0000000..874c9b0 Binary files /dev/null and b/studio_cubemap/pz.jpg differ diff --git a/studio_cubemap/studio_cubemap.png b/studio_cubemap/studio_cubemap.png new file mode 100644 index 0000000..8017799 Binary files /dev/null and b/studio_cubemap/studio_cubemap.png differ