def arnoldBatchRender(option): # Make sure the aiOptions node exists core.createOptions() # Parse option string kwargs = {} options = option.split(" ") i, n = 0, len(options) if cmds.objExists("defaultResolution.mtoaCommandPort"): kwargs["port"] = cmds.getAttr("defaultResolution.mtoaCommandPort") if cmds.objExists("defaultArnoldRenderOptions.mtoaOrigFileName"): kwargs["ofn"] = cmds.getAttr("defaultArnoldRenderOptions.mtoaOrigFileName") while i < n: if options[i] in ["-w", "-width"]: i += 1 if i >= n: break kwargs["width"] = int(options[i]) elif options[i] in ["-h", "-height"]: i += 1 if i >= n: break kwargs["height"] = int(options[i]) elif options[i] in ["-cam", "-camera"]: i += 1 if i >= n: break kwargs["camera"] = options[i] i += 1 try: cmds.arnoldRender(batch=True, **kwargs) except RuntimeError, err: print err
def arnold_render(self): sky_transform = None # store original settings prev_width = cmds.getAttr('defaultResolution.width') prev_height = cmds.getAttr('defaultResolution.height') prev_device_aspect_ratio = cmds.getAttr('defaultResolution.deviceAspectRatio') driver = cmds.ls('defaultArnoldDriver') prev_format = cmds.getAttr(driver[0] + '.aiTranslator') prev_cam_type = cmds.getAttr(self.render_camera + '.aiTranslator') # apply new settings cmds.setAttr('defaultResolution.width', 2000) cmds.setAttr('defaultResolution.height', 1000) cmds.setAttr('defaultResolution.deviceAspectRatio', 2000 / 1000) cmds.setAttr(driver[0] + '.aiTranslator', 'exr', type='string') cmds.setAttr("%s.aiTranslator" % self.render_camera, "spherical", type="string") dome_light = cmds.ls(type="aiSkyDomeLight") sky = cmds.ls(type="aiSky") if dome_light: dome_transform = cmds.listRelatives(dome_light, parent=True, fullPath=True) if not sky: '''if domelight exists but no sky (background), create one (making the HDRI visible in render) and set dome texture, rotation and intensity values''' dome_texture = cmds.listConnections(dome_light[0] + '.color')[0] if dome_texture is not None: # create new aiSky and plug in dome texture ai_sky = cmds.shadingNode("aiSky", asUtility=True) sky_transform = cmds.listRelatives(ai_sky, allParents=True) cmds.connectAttr("%s.message" % ai_sky, "defaultArnoldRenderOptions.background", f=True) cmds.connectAttr("%s.outColor" % dome_texture, "%s.color" % ai_sky, f=True) # query dome light attrs dome_intensity = cmds.getAttr(dome_light[0] + '.intensity') dome_format = cmds.getAttr(dome_light[0] + '.format') dome_rotation = cmds.getAttr(dome_transform[0] + '.rotateY') # set as aiSky attrs cmds.setAttr('aiSky1.format', dome_format) cmds.setAttr('aiSky1.intensity', dome_intensity) cmds.setAttr(sky_transform[0] + '.rotateY', dome_rotation) # render... cmds.arnoldRender(cam=self.render_camera) if sky_transform is not None: cmds.delete(sky_transform) cmds.setAttr('defaultResolution.width', prev_width) cmds.setAttr('defaultResolution.height', prev_height) cmds.setAttr('defaultResolution.deviceAspectRatio', prev_device_aspect_ratio) cmds.setAttr(driver[0] + '.aiTranslator', prev_format, type='string') cmds.setAttr(self.render_camera + '.aiTranslator', prev_cam_type, type='string')
def reRender(*args): if currentRender == 'arnold': cmds.arnoldRender(cam=camera1) elif currentRender == 'vray': vrendCommand = 'vrend -camera %s' % (camera0) mel.eval(vrendCommand) elif currentRender == 'mentalRay': cmds.Mayatomr(pv=True, cam=camera0) else: cmds.warning( 'Render engine not supported. Rendering using Maya Software renderer.' ) cmds.render(camera1)
def arnold_render(self): sky_transform = None # store original settings prev_width = cmds.getAttr('defaultResolution.width') prev_height = cmds.getAttr('defaultResolution.height') prev_device_aspect_ratio = cmds.getAttr( 'defaultResolution.deviceAspectRatio') driver = cmds.ls('defaultArnoldDriver') prev_format = cmds.getAttr(driver[0] + '.aiTranslator') prev_cam_type = cmds.getAttr(self.render_camera + '.aiTranslator') # apply new settings cmds.setAttr('defaultResolution.width', 2000) cmds.setAttr('defaultResolution.height', 1000) cmds.setAttr('defaultResolution.deviceAspectRatio', 2000 / 1000) cmds.setAttr(driver[0] + '.aiTranslator', 'exr', type='string') cmds.setAttr("%s.aiTranslator" % self.render_camera, "spherical", type="string") dome_light = cmds.ls(type="aiSkyDomeLight") sky = cmds.ls(type="aiSky") if dome_light: dome_transform = cmds.listRelatives(dome_light, parent=True, fullPath=True) if not sky: '''if domelight exists but no sky (background), create one (making the HDRI visible in render) and set dome texture, rotation and intensity values''' dome_texture = cmds.listConnections(dome_light[0] + '.color')[0] if dome_texture is not None: # create new aiSky and plug in dome texture ai_sky = cmds.shadingNode("aiSky", asUtility=True) sky_transform = cmds.listRelatives(ai_sky, allParents=True) cmds.connectAttr( "%s.message" % ai_sky, "defaultArnoldRenderOptions.background", f=True) cmds.connectAttr("%s.outColor" % dome_texture, "%s.color" % ai_sky, f=True) # query dome light attrs dome_intensity = cmds.getAttr(dome_light[0] + '.intensity') dome_format = cmds.getAttr(dome_light[0] + '.format') dome_rotation = cmds.getAttr(dome_transform[0] + '.rotateY') # set as aiSky attrs cmds.setAttr('aiSky1.format', dome_format) cmds.setAttr('aiSky1.intensity', dome_intensity) cmds.setAttr(sky_transform[0] + '.rotateY', dome_rotation) # render... cmds.arnoldRender(cam=self.render_camera) if sky_transform is not None: cmds.delete(sky_transform) cmds.setAttr('defaultResolution.width', prev_width) cmds.setAttr('defaultResolution.height', prev_height) cmds.setAttr('defaultResolution.deviceAspectRatio', prev_device_aspect_ratio) cmds.setAttr(driver[0] + '.aiTranslator', prev_format, type='string') cmds.setAttr(self.render_camera + '.aiTranslator', prev_cam_type, type='string')
def getRegion(rrStart_x, rrStart_y, rrLast_x, rrLast_y): values = [rrStart_x, rrStart_y, rrLast_x, rrLast_y] camOverscan = cmds.camera(camera0, q=1, ovr=1) if LockedAttr() == 'locked': cmds.warning('Unlock you camera\'s main attributtes') return False if cmds.window("vpRenderWindow", exists=1) == False: getRvStatus() getPaneLayoutStatus() if values[3] < 0: values[3] = 0 if values[2] > formX: values[2] = formX if values[2] - values[0] < 20 or values[1] - values[3] < 20: cmds.warning('Region is too small') else: leftW = marLeft + values[0] topW = marTop + (formY - values[1]) resoX = values[2] - values[0] resoY = values[1] - values[3] main(values) if "Viewport_RenderShape" not in cmds.ls(ca=1): setToolBegin() else: cmds.setAttr('defaultResolution.width', resoX) cmds.setAttr('defaultResolution.height', resoY) aspRatio = float(cmds.getAttr('defaultResolution.width')) / float( cmds.getAttr('defaultResolution.height')) cmds.setAttr('defaultResolution.deviceAspectRatio', aspRatio) ScaleToCrop = float(formX) / resoX ScaleToCrop2 = float(formY) / resoY cmds.setAttr(camera0 + '.preScale', float(ScaleToCrop) / camOverscan) if 'OverScanExpression' not in cmds.ls(et='expression'): cmds.expression(name='OverScanExpression', s=camera0 + '.overscan = Viewport_RenderShape.overscan', o=camera0, ae=1) # Pixel Offset pixoffX = (float(formX) / 2) - (values[0] + float(resoX) / 2) pixoffY = (float(formY) / 2) - (formY - values[1]) - (float(resoY) / 2) # Film Translate FxOff = float(pixoffX) / (formX / 2) FxOff = FxOff * ScaleToCrop if FxOff > 0: FxOff = FxOff * -1 else: FxOff = -FxOff cmds.setAttr(camera0 + '.filmTranslateH', FxOff) unitY = float(formY) / 2 * float(formX) / formY FyOff = float(pixoffY) / unitY FyOff = FyOff * ScaleToCrop cmds.setAttr(camera0 + '.filmTranslateV', FyOff) cmds.setAttr('defaultResolution.width', resoX) cmds.setAttr('defaultResolution.height', resoY) aspRatio = float(cmds.getAttr('defaultResolution.width')) / float( cmds.getAttr('defaultResolution.height')) cmds.setAttr('defaultResolution.deviceAspectRatio', aspRatio) cmds.layout('scrollBarForm', e=1, vis=0) cmds.renderWindowEditor(renderViews, e=True, snp=(currentPanel, resoX, resoY)) cmds.renderWindowEditor(renderViews, e=True, rs=True, cap=0, pca=0) cmds.renderWindowEditor(renderViews, e=1, cl=(resoX, resoY, 0, 0, 0)) if currentRender == 'arnold': cmds.arnoldRender(cam=camera1) elif currentRender == 'vray': if cmds.getAttr("vraySettings.vfbOn") == 1: cmds.setAttr("vraySettings.vfbOn", 0) cmds.setAttr('vraySettings.width', resoX) cmds.setAttr('vraySettings.height', resoY) mel.eval('vraySetPixelDeviceAspect();') vrendCommand = 'vrend -camera %s' % (camera0) mel.eval(vrendCommand) elif currentRender == 'mentalRay': cmds.Mayatomr(pv=True, cam=camera0) else: cmds.warning( 'Render engine not supported. Rendering using Maya Software renderer.' ) cmds.render(camera1, x=resoX, y=resoY) reRenderVals.append(resoX) reRenderVals.append(resoY)
import maya.cmds as cmds # set: Render Settings/Common/FrameAnimation ext: name#.ext camera_list = {'cameraShape1':[1,2], 'cameraShape2':[3,4], 'cameraShape3':[5,6]} for cam, frames in camera_list.items(): print cam, "{}..{}".format(*frames) #cmds.arnoldRender(b=True, cam=cam, seq="{}..{}".format(*frames)) cmds.arnoldRender(b=True, cam=cam, seq="{}..{}".format(*frames))
def render(startFrame = None,endFrame = None,frameStep = 1, render_dir = None, renderLayer = None,camera = None, renderer = 'sw',**kwargs): # 解析输入参数 startFrame = startFrame if startFrame not in ['None'] else None endFrame = endFrame if endFrame not in ['None'] else None render_dir = render_dir if render_dir not in ['None'] else None renderLayer = renderLayer if renderLayer not in ['None'] else None camera = camera if camera not in ['None'] else None renderer = renderer if renderer not in ['None'] else None # 渲染相关设置 scenepath = os.path.abspath(kwargs['scene_path']) print("\nSTEP 0 获取场景路径: {}\n".format(scenepath)) workspace = cmds.workspace(q=True,fullName = True) # /maya/projects/default print("\nSTEP 1 获取工作空间: {}\n".format(workspace)) if not render_dir: render_dir = '/'.join([workspace,'images']) print("\nSTEP 2.1 设置渲染图片路径: {}\n".format(render_dir)) if not os.path.isdir(render_dir): try: os.makedirs(render_dir) print("\nSTEP 2.2 新建图片路径: {}\n".format(render_dir)) except: raise Exception('can not make Folder named: %s ' % render_dir) open_scene(scenepath) refs = list_referenced_files() print("\nSTEP 4 场景相关文件: {} \n".format(refs)) # 设置起始和结束帧 if not startFrame: startFrame = int(cmds.currentTime(query = True)) if (not endFrame) or (endFrame < startFrame): endFrame = startFrame # startFrame,endFrame = playback_selection_range() print("\nSTEP 5 起始帧: {} 结束帧: {}\n".format(startFrame,endFrame)) # 设置渲染层, 不同的渲染器对渲染层有不同的配置参数 if not renderLayer: renderLayer = cmds.editRenderLayerGlobals(q = True,currentRenderLayer = True) print("\nSTEP 6.1 未指定渲染层,获取当前渲染层: {}\n".format(renderLayer)) elif renderLayer not in cmds.ls(type = 'renderLayer'): renderLayer = cmds.editRenderLayerGlobals(q = True,currentRenderLayer = True) print('\nSTEP 6.2 指定的渲染层不在当前maya环境上, 使用默认的渲染层: %s\n' %(renderLayer)) else: if cmds.editRenderLayerGlobals(q = True,currentRenderLayer = True) != renderLayer: cmds.editRenderLayerGlobals(currentRenderLayer = renderLayer) print('\nSTEP 6.3 指定的渲染层在当前maya环境上,但不是当前默认渲染层,设置为默认渲染层: %s\n' %(renderLayer)) # 设置摄像机 render_cam = 'persp' change_render_cam(render_cam) print("\nSTEP 7 设置默认摄像机: {}\n".format(render_cam)) # get camera 获取摄像机 if not camera: _cameras = [i for i in cmds.listCameras(p = True) if cmds.getAttr('%s.renderable' % i)] if _cameras: camera = _cameras[0] else: camera = 'persp' print("\nSTEP 8 当前使用的摄像机: {}\n".format(camera)) #打印当前渲染器设置 # render_glob = "defaultRenderGlobals" # list_Attr = cmds.listAttr(render_glob, r=True, s=True) # print("\n") # for attr in list_Attr: # get_attr_name = "%s.%s"%(render_glob, attr) # print("STEP 9 默认Render的全局配置信息: {} = {}".format(get_attr_name, cmds.getAttr(get_attr_name))) # print("\n") # load renderer 加载渲染器 currenders = cmds.renderer(q=True, namesOfAvailableRenderers=True) print('\nSTEP 9 当前可用的渲染器有: {} \n'.format(currenders)) print("\nSTEP 10 当前插件路径: {} \n".format(os.environ['MAYA_PLUG_IN_PATH'])) cmds.loadPlugin( allPlugins=True ) if renderer: if renderer: if renderer != cmds.getAttr('defaultRenderGlobals.currentRenderer'): renderer_dict = {'vray':'vrayformaya', 'arnold':'mtoa', 'mentalRay':'Mayatomr'} for key in renderer_dict.keys(): if renderer == key: if not cmds.pluginInfo(renderer_dict[key], q=True, l=True): try: cmds.loadPlugin(renderer_dict[key]) break except: raise Exception('can not load vray renderer') try: cmds.setAttr('defaultRenderGlobals.currentRenderer',renderer,type = 'string') except: raise Exception('error: set currentRenderer %s fail' % renderer) else: renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer') print('\nSTEP 12 指定的渲染器位当前默认渲染器: %s\n' %(renderer)) w, h = scene_resolution() print('\nSTEP 13 当前图片分辨率:X={} Y={} .\n'.format(w,h)) # 设置图像输出格式 cmds.getAttr('defaultRenderGlobals.imageFormat',asString = True) _format = getFormatType("PNG") print('\nSTEP 14 设置输出图像的格式: %s\n' %(_format)) print('# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #') print('STEP 15 开始执行渲染任务...\n') cd = int(endFrame) + 1 for i in range(int(startFrame), int(cd)): cmds.currentTime(i, u = True) if renderer == 'sw': cmds.render() elif renderer == 'mr': out = cmds.Mayatomr(preview = True, camera = camera) print("cmds.Mayatomr:",out) else: pass if renderer == 'vray': cmds.setAttr ('defaultRenderGlobals.animation', 1 ) cmds.setAttr ('defaultRenderGlobals.startFrame', startFrame ) cmds.setAttr ('defaultRenderGlobals.endFrame', endFrame ) print(cmds.setAttr ('vraySettings.animBatchOnly', 0)) out = pm.vrend(preview = True,camera = camera) print("pm.vrend:",out) elif renderer == 'arnold': for i in range(startFrame,endFrame+1,1): cmds.currentTime(i) out = cmds.arnoldRender(seq=str(i),camera = camera ) print("cmds.arnoldRender:",out) print('# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #')
def startRender(): if core.ACTIVE_CAMERA != None: cmds.arnoldRender(cam=core.ACTIVE_CAMERA)
def arnoldRender(width, height, doShadows, doGlowPass, camera, options): # Make sure the aiOptions node exists core.createOptions() cmds.arnoldRender(cam=camera, w=width, h=height)