import sys sys.path.append('/opt/pixar/RenderManProServer/bin') import os import prman import clip_rif import ignoreExtreamDisplacement_rif as ied_rif import pointsFilter # global vars for test PRJ = '/temp/hosuk/spheres/project/' NEAR = 15 FAR = 47 NUM_OF_SLICES = 10 CLEANUP = False DS_OVER = '/temp/hosuk/spheres/project/pys/ho_dsOver' class Slice: def __init__( self, args): self.args = args self.sliceWidth = float(args['far'] - args['near']) / args['numOfSlice'] self.ri = prman.Ri() self.farFadeWidth = self.sliceWidth * 0.3 self.nearFadeWidth = 0.1 def do(self): finalImgPath = self.args['outimgPath'] sliceImgPaths = [] for i in range(self.args['numOfSlice']): tmp = self.renderSlice( i, finalImgPath) sliceImgPaths.append(tmp) if self.args['isShadow']: self.mergeDeepShadow( sliceImgPaths, finalImgPath, self.args['cleanup']) else: self.mergeRGBs( sliceImgPaths, finalImgPath, self.args['cleanup']) def renderSlice(self, sliceNum, finalImgPath): sliceImgPath = finalImgPath + '_'+ str(sliceNum) + '.'+ self.args['ext'] os.chdir(self.args['projectRoot']) # rifs set near = self.args['near'] + (sliceNum * self.sliceWidth) far = near + self.sliceWidth clipRif = clip_rif.ClipRif( self.ri, near, far, self.nearFadeWidth, self.farFadeWidth, sliceImgPath) iedRif = ied_rif.Ied_rif( self.ri) pointsRif = pointsFilter.pointsFilter( self.ri, motionBlur=True, motionBlurLength=2.0, widthMult=1.0) rifChain = [clipRif, iedRif] prman.RifInit(rifChain) prman.Init(["-t:8"]) # reder self.ri.Begin(self.ri.RENDER) self.ri.ReadArchive(self.args['ribRelativePath']) self.ri.End() prman.RifInit([]) return sliceImgPath def mergeRGBs(self, imgs, finalImgPath, cleanup): print ('merging rgb...') tmpImgPath = finalImgPath + "_tmp."+ self.args['ext'] for i in range(len(imgs)): if i == 0: cmd ='mv '+ imgs[i]+ ' '+ tmpImgPath os.system( cmd) else: cmd = 'shake '+ tmpImgPath+ ' -over '+ imgs[i]+ ' -fo '+ finalImgPath cmd += ';mv '+ finalImgPath +' '+ tmpImgPath os.system( cmd) cmd = 'mv '+ tmpImgPath+ " "+ finalImgPath os.system(cmd) print finalImgPath+ ' created.' if cleanup: print 'cleanning...' for i in range(1, len(imgs)): cmd = 'rm '+ imgs[i] os.system(cmd) def mergeDeepShadow( self, shadows, finalShadowPath, cleanup): print( 'merging deepshadow...') tmpShdPath = finalShadowPath+ '_tmp.tex' for i in range( len( shadows ) ): if i == 0: cmd ='mv '+ shadows[i]+ ' '+ tmpShdPath os.system( cmd) else: cmd = DS_OVER+ ' '+ tmpShdPath+ ' '+ shadows[i]+ ' '+ finalShadowPath cmd += ';mv '+ finalShadowPath+ ' '+tmpShdPath os.system( cmd) cmd = 'mv '+ tmpShdPath+ ' '+ finalShadowPath print finalShadowPath+ ' created.' os.system( cmd) if cleanup: print 'cleanning shadows...' for i in range(1, len( shadows)): cmd = 'rm '+ shadows[i] + ';reset' os.system( cmd) def batch(startFrame, endFrame, ribName, cameraName, passName, ext, isShadow): outputFolder = 'images' if isShadow: outputFolder = 'data' for i in range(startFrame, endFrame+1): padFrame = ('%04d' %i) RIB_RELATIVE_PATH = 'renderman/'+ ribName+'/rib/'+ \ padFrame+ '/'+ cameraName+ '_'+ passName +'.'+ padFrame+'.rib' if isShadow: OUT_IMG_PATH = 'renderman/'+ ribName+'/'+ outputFolder+'/'+ padFrame+ \ '/'+ ribName+ '_'+ cameraName+ '_'+ passName+'.'+ padFrame+'.'+ ext else: OUT_IMG_PATH = 'renderman/'+ ribName+'/'+ outputFolder+'/'+ \ ribName+ '.'+ padFrame+'.'+ ext args = {} args['projectRoot'] = PRJ args['ribRelativePath'] = RIB_RELATIVE_PATH args['outImgDir'] = OUT_IMG_DIR args['near'] = NEAR args['far'] = FAR args['numOfSlice'] = NUM_OF_SLICES args['outimgPath'] = OUT_IMG_PATH args['frameNum'] = i args['cleanup'] = CLEANUP args['ext'] = ext args['isShadow'] = isShadow s = Slice(args) s.do() def main(): frame = 1 s = 'geos' batch( frame, frame, s, 'spotLightShape1', 'DeepShadow', 'tex', True) #batch( frame, frame, s, 'perspShape2', 'Final', 'exr', False) if __name__ == '__main__': main()