Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime
- import time
- import sys
- xsi = Application
- def logMessage(lvl, msg):
- if (len(lvl)==0):
- xsi.LogMessage(datetime.datetime.now().strftime("' %H:%M.%S") + " rrSI : " + str(msg))
- else:
- xsi.LogMessage(datetime.datetime.now().strftime("' %H:%M.%S") + " rrSI - " + str(lvl) + ": " + str(msg))
- def logMessageDebug(lvl, msg):
- if (False):
- logMessage(lvl, msg)
- def flushLog():
- sys.stdout.flush()
- sys.stderr.flush()
- def applyRendererOptions_Arnold(inPass,inVerbose,inArnoldAc,inRenderThreads, inRenderDemo,inRenderDisplace):
- if ((inRenderDemo!= None) and (len(str(inRenderDemo))>0)):
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.abort_on_license_fail",False)
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.skip_license_check",True)
- else:
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.abort_on_license_fail",True)
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.skip_license_check",False)
- if ((inArnoldAc!= None) and (len(str(inArnoldAc))>0)):
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.AA_samples",inArnoldAc)
- if ((inVerbose!= None) and (len(str(inVerbose))>0)):
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.log_level",inVerbose)
- if ((inRenderThreads!= None) and (len(str(inRenderThreads))>0)):
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.autodetect_threads",False)
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.threads",inRenderThreads)
- if ((inRenderDisplace!= None) and (len(str(inRenderDisplace))>0)):
- xsi.SetValue(str(inPass)+".Arnold_Render_Options.ignore_displacement",inRenderDisplace)
- def applyRendererOptions_Vray(inPass,inFName,inVerbose):
- if ((inVerbose!= None) and (len(str(inVerbose))>0)):
- xsi.SetValue(str(inPass)+".VRay_Options.sys_level",inVerbose)
- filName=inFName
- dirName=""
- PD="/"
- if (inFName.find("\\")>=0):
- PD="\\"
- pos= inFName.rfind(PD);
- if (pos>0):
- filName= inFName[pos+1:]
- dirName= inFName[0:pos]
- pos= filName.rfind(".");
- if (pos>0):
- filName= filName[0:pos]
- xsi.SetValue(str(inPass)+".VRay_Options.out_save_in",dirName)
- xsi.SetValue(str(inPass)+".VRay_Options.out_img_file_name",filName)
- xsi.SetValue(str(inPass)+".VRay_Options.gsw_dont_rend_finimg",False)
- def applyRendererOptions_MRay(inPass,inVerbose,inMrayAAsmin,inMrayAAsmax, inRenderDisplace):
- if ((inRenderDisplace!= None) and (len(str(inRenderDisplace))>0)):
- xsi.SetValue(str(inPass)+".mentalray.EnableDisplacementShaders",inRenderDisplace)
- if ((inVerbose!= None) and (len(str(inVerbose))>0)):
- xsi.SetValue(str(inPass)+".mentalray.VerbosityLevel",inVerbose)
- if ((inMrayAAsmin!= None) and (len(str(inMrayAAsmin))>0)):
- xsi.SetValue(str(inPass)+".mentalray.SamplesMin",inMrayAAsmin)
- if ((inMrayAAsmax!= None) and (len(str(inMrayAAsmax))>0)):
- xsi.SetValue(str(inPass)+".mentalray.SamplesMax",inMrayAAsmax)
- kso_global_inPass = ""
- def ksoRenderFrame(inFrStart,inFrEnd,inFrStep ):
- logMessage("","Changing scene frame to frame #"+str(inFrStart)+" ...")
- xsi.SetValue("PlayControl.Current", inFrStart, "")
- xsi.SceneRefresh()
- logMessage("","Starting to render frame #"+str(inFrStart)+" ...")
- global kso_global_inPass
- beforeFrame=datetime.datetime.now()
- xsi.renderpass (kso_global_inPass ,"", inFrStart,inFrEnd,inFrStep)
- nrofFrames=((inFrEnd-inFrStart)/inFrStep+1)
- afterFrame=datetime.datetime.now()
- afterFrame=afterFrame-beforeFrame;
- afterFrame=afterFrame/nrofFrames
- logMessage("","Average time per frame: "+str(afterFrame)+" h:m:s.ms")
- logMessage("","rrKSO Frame(s) done #"+str(inFrEnd)+" ")
- xsi.LogMessage(" ")
- xsi.LogMessage(" ")
- xsi.LogMessage(" ")
- flushLog()
- def rrKSOStartServer(inKSOPort):
- import kso_tcp
- kso_tcp.log_command="Application.LogMessage(' \\\'"
- logMessage("","rrKSO startup...")
- if ((inKSOPort== None) or (len(str(inKSOPort))<=0)):
- inKSOPort=7774
- HOST, PORT = "localhost", 7774
- server = kso_tcp.rrKSOServer((HOST, PORT), kso_tcp.rrKSOTCPHandler)
- logMessage("","rrKSO server started")
- kso_tcp.rrKSONextCommand=""
- while server.continueLoop:
- try:
- logMessageDebug("","rrKSO waiting for new command...")
- server.handle_request()
- time.sleep(1) # handle_request() seem to return before handle() completed execution
- except Exception, e:
- logMessage("ERR", e)
- server.continueLoop= False;
- import traceback
- logMessage("ERR",traceback.format_exc())
- xsi.LogMessage(" ")
- xsi.LogMessage(" ")
- xsi.LogMessage(" ")
- logMessage("","rrKSONextCommand '"+ kso_tcp.rrKSONextCommand+"'")
- flushLog()
- if (len(kso_tcp.rrKSONextCommand)>0):
- if ((kso_tcp.rrKSONextCommand=="ksoQuit()") or (kso_tcp.rrKSONextCommand=="ksoQuit()\n")):
- server.continueLoop=False
- kso_tcp.rrKSONextCommand=""
- else:
- exec (kso_tcp.rrKSONextCommand)
- kso_tcp.rrKSONextCommand=""
- logMessage("","rrKSO closed")
- def render_KSO(inPass,inFrStart,inFrEnd,inFrStep,inKSOPort):
- logMessage("","Importing kso...")
- global kso_global_inPass
- kso_global_inPass= inPass
- rrKSOStartServer(inKSOPort)
- def render_default(inPass,inFrStart,inFrEnd,inFrStep):
- xsi.renderpass (inPass ,"", inFrStart,inFrEnd,inFrStep)
- def getParam(allArgList, argFindName):
- argFindName=argFindName.lower()
- for argComb in allArgList:
- arg= argComb.split(":")
- if (len(arg)<2):
- continue
- argName=arg[0].strip().lower()
- argValue=arg[1]
- if (len(arg)>2): # e.g. C:\program files\...
- argValue+=":" + arg[2]
- if (len(arg)>3):
- argValue+=":" + arg[3]
- argValue=argValue.strip()
- if (argName==argFindName):
- logMessage("","Flag "+argFindName.ljust(15)+": '"+argValue+"'");
- return argValue
- return ""
- def rrStart(argAll):
- logMessage("","")
- timeStart=datetime.datetime.now()
- #argAll is almost a JSON string, but it is not to keep the commandline cleaner and less error prone
- allArgList= argAll.split(",")
- logMessageDebug("DGB",allArgList)
- inSName=getParam(allArgList,"SName")
- inKSOMode=getParam(allArgList,"KSOMode")
- inKSOPort=getParam(allArgList,"KSOPort")
- inDb=getParam(allArgList,"Db")
- inPass=getParam(allArgList,"Pass")
- inSkipFrame=getParam(allArgList,"SkipFrame")
- inFName=getParam(allArgList,"FName")
- inFExt=getParam(allArgList,"FExt")
- inFPadding=getParam(allArgList,"FPadding")
- inFType=getParam(allArgList,"FType")
- inFNameChannelAdd=getParam(allArgList,"FNameChannelAdd")
- inFrStart=getParam(allArgList,"FrStart")
- inFrEnd=getParam(allArgList,"FrEnd")
- inFrStep=getParam(allArgList,"FrStep")
- inFrOffset=getParam(allArgList,"FrOffset")
- inCamera=getParam(allArgList,"Camera")
- inVerbose=getParam(allArgList,"Verbose")
- inMrayAAsmin=getParam(allArgList,"MrayAAsmin")
- inMrayAAsmax=getParam(allArgList,"MrayAAsmax")
- inArnoldAc=getParam(allArgList,"ArnoldAc")
- inResX=getParam(allArgList,"ResX")
- inResY=getParam(allArgList,"ResY")
- inRegionX1=getParam(allArgList,"RegionX1")
- inRegionX2=getParam(allArgList,"RegionX2")
- inRegionY1=getParam(allArgList,"RegionY1")
- inRegionY2=getParam(allArgList,"RegionY2")
- inRenderThreads=getParam(allArgList,"RenderThreads")
- inRenderDemo=getParam(allArgList,"RenderDemo")
- inRenderDisplace=getParam(allArgList,"RenderDisplace")
- inPyModPath=getParam(allArgList,"PyModPath")
- #[RS] Get Redshift CUDA devices list from args
- inRedshiftCudaDevices=getParam(allArgList,"RsCudaDevices")
- if ((inPyModPath!= None) and (len(inPyModPath)>0)):
- import sys
- sys.path.append(inPyModPath)
- if ((inDb!= None) and (len(inDb)>0)):
- logMessage("","Set project to '" + inDb+"'...")
- xsi.ActiveProject = inDb
- logMessage("", "Active Project: " + str(xsi.ActiveProject2.Path))
- logMessage("", "Loading Scene '" + str(inSName)+"'...")
- xsi.OpenScene(inSName, False, "")
- if ((inDb!= None) and (len(inDb)>0)):
- logMessage("","Set project to '" + inDb+"'...")
- xsi.ActiveProject = inDb
- logMessage("", "Active Project: " + str(xsi.ActiveProject2.Path))
- if ((inPass!= None) and (len(inPass)>0)):
- logMessage("","Set pass to '" + str(inPass) +"'")
- inPass= "Passes." + str(inPass)
- xsi.SetCurrentPass(str(inPass))
- else:
- inPass= xsi.GetCurrentPass()
- logMessage("","Using current pass '" + inPass +"'")
- renderer=xsi.GetValue(str(inPass)+".renderer")
- if (len(renderer)==0):
- renderer = xsi.GetValue("Passes.RenderOptions.Renderer")
- logMessage("","renderer used: '" + renderer +"'")
- if ((inCamera!= None) and (len(inCamera)>0)):
- logMessage("","Set renderer to " +inCamera)
- xsi.SetValue(str(inPass)+".Camera",inCamera)
- if ((inSkipFrame!= None) and (len(str(inSkipFrame))>0)):
- logMessage("","Set FrameSkipRendered to " +str(inSkipFrame))
- xsi.SetValue(str(inPass)+".FrameSkipRendered",inSkipFrame)
- if ((inResX!= None) and (len(str(inResX))>0)):
- logMessage("","Set width to " +str(inResX))
- if (xsi.GetValue(str(inPass)+".ImageFormatOverride")):
- xsi.SetValue(str(inPass)+".ImageWidth",inResX)
- else:
- xsi.SetValue("Passes.RenderOptions.ImageWidth",inResX)
- if ((inResY!= None) and (len(str(inResY))>0)):
- logMessage("","Set height to " +str(inResY))
- if (xsi.GetValue(str(inPass)+".ImageFormatOverride")):
- xsi.SetValue(str(inPass)+".ImageLockAspectRatio",False)
- xsi.SetValue(str(inPass)+".ImageHeight",inResY)
- else:
- xsi.SetValue("Passes.RenderOptions.ImageLockAspectRatio",False)
- xsi.SetValue("Passes.RenderOptions.ImageHeight",inResY)
- if ((inRegionX1!= None) and (len(str(inRegionX1))>0)):
- xsi.SetValue(str(inPass)+".CropWindowEnabled",True)
- xsi.SetValue(str(inPass)+".SelectionTracking",False)
- xsi.SetValue(str(inPass)+".CropWindowOffsetY",0)
- xsi.SetValue(str(inPass)+".CropWindowHeight",9999)
- xsi.SetValue(str(inPass)+".CropWindowOffsetX",inRegionX1)
- xsi.SetValue(str(inPass)+".CropWindowWidth",(inRegionX2-inRegionX1+1))
- if ((inRegionX1!= None) and (len(str(inRegionX1))>0)):
- xsi.SetValue(str(inPass)+".CropWindowOffsetY",inRegionY1)
- xsi.SetValue(str(inPass)+".CropWindowHeight",(inRegionY2-inRegionY1+1))
- logMessage("","Set region to X:" +str(inRegionX1)+"-" +str(inRegionX2)+" Y:" +str(inRegionX1)+"-" +str(inRegionX2))
- else:
- logMessage("","Set region to X:" +str(inRegionX1)+"-" +str(inRegionX2))
- if ((inFPadding!= None) and (len(str(inFPadding))>0)):
- if (inFPadding<=4):
- logMessage("","Set frame padding to " +str(inFPadding))
- xsi.SetValue("Passes.RenderOptions.FramePadding",inFPadding)
- inFNameCopy=inFName
- if ((inFName!= None) and (len(str(inFName))>0)):
- xsi.SetValue(str(inPass)+".Main.Enabled", True)
- inFName=inFName.replace("<Layer>", "[Pass]")
- inFName=inFName.replace("<Channel>", "[Framebuffer]")
- inFName=inFName.replace("<Camera>", "[Camera]")
- inFName=inFName.replace("<Camera_no.>", "[Camera]")
- orgFileName=xsi.GetValue(str(inPass)+".Main.Filename")
- if ((inFPadding!= None) and (len(str(inFPadding))>0)):
- if (inFPadding>4):
- for o in range(1, int(inFPadding)):
- inFName= inFName+"#"
- else:
- inFName= inFName+"[Frame]"
- else:
- inFName= inFName + "[Frame "
- if ((inFrOffset!= None) and (len(str(inFrOffset))>0) and (int(inFrOffset)!=0)):
- if (int(inFrOffset<0)):
- inFName= inFName + str(inFrOffset)
- else:
- inFName= inFName + "+" +str(inFrOffset)
- inFName= inFName + "]"
- if ((inFExt!= None) and (len(inFExt)>0)):
- inFName= inFName + inFExt
- logMessage("","Set Filename to " +inFName)
- xsi.SetValue(str(inPass)+".Main.Filename",inFName)
- if (renderer=="Arnold Render" and (orgFileName.lower().find("framebuffer")<=0)):
- oPass= xsi.GetValue(str(inPass))
- for fbuffer in oPass.Framebuffers:
- if (orgFileName==xsi.GetValue(fbuffer.FileName)):
- logMessage("","Set Channel Filename to " +inFName)
- fbuffer.FileName=inFName
- if ((inFNameChannelAdd!= None) and (len(str(inFNameChannelAdd))>0)):
- oPass= xsi.GetValue(str(inPass))
- for fbuffer in oPass.Framebuffers:
- if (fbuffer.name!="Main"):
- chFname= xsi.GetValue(fbuffer.Filename)
- chDname=""
- spos=chFname.lower().find("[Frame")
- if (spos>0):
- chDname = chFname[spos:]
- chFname = chFname[0:spos-1]
- chDname="."+chdname
- else:
- spos=chFname.lower().find("#")
- if (spos>0):
- chDname = chFname[spos:]
- chFname = chFname[0:spos-1]
- chDname="."+chDname
- if ((chFname[-1] != ".") and (chFname[-1] != "_")):
- chFname=chFname +"."
- chFname= chFname + inFNameChannelAdd + chDname
- xsi.SetValue(fbuffer.Filename, chFname)
- logMessage("","Set framebuffer output to " +inFName)
- #[RS] Select CUDA devices for Redshift
- Application.Redshift_SelectCudaDevices(eval(inRedshiftCudaDevices))
- if (renderer=="Arnold Render"):
- applyRendererOptions_Arnold(inPass,inVerbose,inArnoldAc,inRenderThreads, inRenderDemo,inRenderDisplace)
- elif (renderer=="VRay"):
- applyRendererOptions_Vray(inPass,inFName,inVerbose)
- else:
- applyRendererOptions_MRay(inPass,inVerbose,inMrayAAsmin,inMrayAAsmax, inRenderDisplace)
- inFrStart=int(inFrStart)
- inFrEnd=int(inFrEnd)
- inFrStep=int(inFrStep)
- logMessage("","Changing current frame to " +str(inFrStart))
- xsi.SetValue("PlayControl.Current", inFrStart, "")
- xsi.SceneRefresh()
- logMessage("","Scene init done, starting to render... ")
- timeEnd=datetime.datetime.now()
- timeEnd=timeEnd - timeStart;
- logMessage("","Scene load time: "+str(timeEnd)+" h:m:s.ms")
- if ((inKSOMode!= None) and (len(str(inKSOMode))>0)):
- render_KSO(inPass,inFrStart,inFrEnd,inFrStep,inKSOPort)
- else:
- render_default(inPass,inFrStart,inFrEnd,inFrStep)
- logMessage("","Render done")
Add Comment
Please, Sign In to add comment