def KrayRendererUpdateTab(self, dummy=None): self.createGlobalsNode() #self.updateEnvironment() log.debug("KrayRendererUpdateTab()") sDict = self.rendererTabUiDict['sampling'] sType = self.renderGlobalsNode.samplingType.get() if sType != 1: #grid pm.intFieldGrp(sDict['gridSize'], edit=True, enable=False) pm.checkBoxGrp(sDict['gridRotate'], edit=True, enable=False) else: pm.intFieldGrp(sDict['gridSize'], edit=True, enable=True) pm.checkBoxGrp(sDict['gridRotate'], edit=True, enable=True) fType = self.renderGlobalsNode.filtertype.get() if fType in [4, 5, 6]: pm.floatFieldGrp(sDict['filterSize'], edit=True, enable=False) else: pm.floatFieldGrp(sDict['filterSize'], edit=True, enable=True) iFormat = self.renderGlobalsNode.imageFormat.get() if iFormat in [2, 3]: pm.attrEnumOptionMenuGrp(sDict['bitdepth'], edit=True, enable=True) else: pm.attrEnumOptionMenuGrp(sDict['bitdepth'], edit=True, enable=False) if iFormat == 1: pm.intFieldGrp(sDict['jpgQuality'], edit=True, enable=True) else: pm.intFieldGrp(sDict['jpgQuality'], edit=True, enable=False)
def layersReplace(self, attribute): if attribute is not "none": self.thisNode = pm.PyNode(attribute).node() log.debug("layersReplace {0}".format(attribute)) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) materialEntries = self.thisNode.materialEntryMtl.numElements() #print "layersReplace: node has ", self.thisNode.materialEntryMtl.numElements(), "layers" if self.layersUi is not None and pm.columnLayout(self.layersUi, q=True, exists=True): pm.deleteUI(self.layersUi) with pm.columnLayout(adj=True, parent=self.uiParent) as self.layersUi: for layerNumber in range(materialEntries): layerIndex = self.thisNode.materialEntryMtl.elementByPhysicalIndex(layerNumber).index() with pm.frameLayout(label="Layer {0}".format(layerNumber), collapsable=True, collapse=False, bv=True) as fl: log.debug("create layers UI {0}".format(self.thisNode.materialEntryMtl[layerIndex])) with pm.columnLayout(adj=True): attribute = self.thisNode.materialEntryMtl[layerIndex] if attribute.isConnected(): pm.frameLayout(fl, edit=True, label=attribute.inputs(p=1)[0]) pm.attrColorSliderGrp(label="Material", at=attribute) attribute = self.thisNode.materialEntryMsk[layerIndex] pm.attrFieldSliderGrp(label="Mask", at=attribute) attribute = self.thisNode.materialEntryMode[layerIndex] pm.attrEnumOptionMenuGrp(label="Mode", at=attribute) with pm.columnLayout(adj=True): pm.button(label="Remove Layer", c=pm.Callback(self.removeLayer, layerIndex), height=18) pm.button(label="Layer Up", c=pm.Callback(self.moveLayerUp, layerIndex), height=18) pm.button(label="Layer Down", c=pm.Callback(self.moveLayerDown, layerIndex), height=18) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
def AppleseedEnvironmentCreateTab(self): self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "AOScrollLayout" envDict = {} self.rendererTabUiDict['environment'] = envDict uiDict = envDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Environment Lighting", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".environmentType") envDict['environmentType'] = pm.attrEnumOptionMenuGrp(label="Environment Type", at=self.renderGlobalsNodeName + ".environmentType", ei=self.getEnumList(attr)) with pm.frameLayout(label="Environment Colors", collapsable=False) as envDict['commonEnvFrame']: with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.floatFieldGrp(label="Environment Intensity:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".environmentIntensity", index=2) envDict['environmentColor'] = pm.attrColorSliderGrp(label="Environment Color:", at=self.renderGlobalsNodeName + ".environmentColor") envDict['gradientHorizon'] = pm.attrColorSliderGrp(label="Gradient Horizon Color:", at=self.renderGlobalsNodeName + ".gradientHorizon") envDict['gradientZenit'] = pm.attrColorSliderGrp(label="Gradient Zenith Color:", at=self.renderGlobalsNodeName + ".gradientZenit") envDict['environmentMap'] = pm.attrColorSliderGrp(label="Environment Map:", at=self.renderGlobalsNodeName + ".environmentMap") self.addRenderGlobalsUIElement(attName='latlongHoShift', uiType='float', displayName='Lat-Long Horizontal Shift:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='latlongVeShift', uiType='float', displayName='Lat-Long Vertical Shift:', uiDict=uiDict) with pm.frameLayout(label="Physical Sky", collapsable=False) as envDict['pysSkyFrame']: with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".skyModel") envDict['pskModel'] = pm.attrEnumOptionMenuGrp(label="Sky Model:", at=self.renderGlobalsNodeName + ".skyModel", ei=self.getEnumList(attr)) uiDict['sunLightOptionMenu'] = pm.optionMenuGrp(label="Sun Light:", changeCommand=self.updateSunLightOptionMenu) envDict['pskGrAlbedo'] = pm.floatFieldGrp(label="Ground Albedo:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskGrAlbedo'], self.renderGlobalsNodeName + ".ground_albedo", index=2) envDict['pskGrHShit'] = pm.floatFieldGrp(label="Horizon Shift:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskGrHShit'], self.renderGlobalsNodeName + ".horizon_shift", index=2) envDict['pskLumMulti'] = pm.floatFieldGrp(label="Luminance Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskLumMulti'], self.renderGlobalsNodeName + ".luminance_multiplier", index=2) envDict['pskSatMulti'] = pm.floatFieldGrp(label="Saturation Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSatMulti'], self.renderGlobalsNodeName + ".saturation_multiplier", index=2) envDict['pskTurb'] = pm.floatFieldGrp(label="Turbidity:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurb'], self.renderGlobalsNodeName + ".turbidity", index=2) envDict['pskTurbMin'] = pm.floatFieldGrp(label="Turbidity Min:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMin'], self.renderGlobalsNodeName + ".turbidity_min", index=2) envDict['pskTurbMax'] = pm.floatFieldGrp(label="Turbidity Max:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMax'], self.renderGlobalsNodeName + ".turbidity_max", index=2) with pm.frameLayout(label="OSL", collapsable=False) as envDict['oslFrame']: with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): envDict['environmentOSL'] = pm.attrColorSliderGrp(label="OSL Background", at=self.renderGlobalsNodeName + ".environmentOSL") pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.environmentType, pm.Callback(self.uiCallback, tab="environment")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.skyModel, pm.Callback(self.uiCallback, tab="environment")]) self.updateEnvironment()
def FujiRendererCreateTab(self): log.debug("FujiRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query = True) pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') parentForm = pm.setParent(query = True) uiDict = {} self.rendererTabUiDict['common'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness = 0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn = True, width = 400): with pm.frameLayout(label="Sampling", collapsable = True, collapse=False): self.addRenderGlobalsUIElement(attName = 'sampleJitter', uiType = 'float', displayName = 'SampleJitter', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sample_time_range_min', uiType = 'float', displayName = 'Sample Time Range Min', default='0.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sample_time_range_max', uiType = 'float', displayName = 'Sample Time Range Max', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'samplesX', uiType = 'int', displayName = 'Pixel Samples x', default=3, uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'samplesY', uiType = 'int', displayName = 'Pixel Samples y', default=3, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName = 'cast_shadow', uiType = 'bool', displayName = 'Cast Shadows', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'max_reflect_depth', uiType = 'int', displayName = 'Max Reflection Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'max_refract_depth', uiType = 'int', displayName = 'Max Refraction Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_step', uiType = 'float', displayName = 'Raymarching Stepsize', default='0.05', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_shadow_step', uiType = 'float', displayName = 'Raymarching Shadow Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_reflect_ste', uiType = 'float', displayName = 'Raymarching Reflection Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_refract_ste', uiType = 'float', displayName = 'Raymarching Refraction Stepsize', default='0.1', uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName = 'doMotionBlur', uiType = 'bool', displayName = 'Motionblur:', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'doDof', uiType = 'bool', displayName = 'Depth of Field:', default=False, uiDict=uiDict) with pm.frameLayout(label="Output", collapsable = True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".imageFormat") ui = pm.attrEnumOptionMenuGrp(label = "Image Format", at=self.renderGlobalsNodeName + ".imageFormat", ei = self.getEnumList(attr)) with pm.frameLayout(label="Filtering", collapsable = True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label = "Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei = self.getEnumList(attr)) ui = pm.intFieldGrp(label="Filter Size:", numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".filtersize", index = 2 ) with pm.frameLayout(label="Renderer", collapsable = True, collapse=False): self.addRenderGlobalsUIElement(attName = 'use_max_thread', uiType = 'bool', displayName = 'Use Max Threads', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'threads', uiType = 'int', displayName = 'Threads', default=8, uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'tilesize', uiType = 'int', displayName = 'Tile Size', default=64, uiDict=uiDict) ui = pm.intFieldGrp(label="Verbosity:", numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".rendererVerbosity", index = 2 ) pm.setUITemplate("attributeEditorTemplate", popTemplate = True) pm.formLayout(parentForm, edit = True, attachForm = [ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) self.FujiRendererUpdateTab()
def addUIElement(uiType, attribute, uiLabel, callback, renderGlobalsNodeName): ui = None if uiType == 'bool': ui = pm.checkBoxGrp(label=uiLabel) if callback is not None: pm.checkBoxGrp(ui, edit=True, cc=callback) if uiType == 'int': ui = pm.intFieldGrp(label=uiLabel, numberOfFields = 1) if callback is not None: pm.intFieldGrp(ui, edit=True, cc = callback) if uiType == 'float': ui = pm.floatFieldGrp(label=uiLabel, numberOfFields = 1) if callback is not None: pm.floatFieldGrp(ui, edit=True, cc= callback) if uiType == 'enum': ui = pm.attrEnumOptionMenuGrp(label = uiLabel, at=attribute, ei = getEnumList(attribute)) # attrEnumOptionGrp has no cc callback, so I create a script job if callback is not None: attribute = pm.Attribute(renderGlobalsNodeName + "." + attribute) pm.scriptJob(attributeChange=[attribute, callback], parent=ui) if uiType == 'color': ui = pm.attrColorSliderGrp(label=uiLabel, at=attribute) if uiType == 'string': ui = pm.textFieldGrp(label=uiLabel) if callback is not None: pm.textFieldGrp(ui, edit=True, cc=callback) if uiType == 'vector': ui = pm.floatFieldGrp(label=uiLabel, nf=3) if callback is not None: pm.floatFieldGrp(ui, edit=True, cc=callback) return ui
def addUIElement(uiType, attribute, uiLabel, callback, renderGlobalsNodeName): ui = None if uiType == 'bool': ui = pm.checkBoxGrp(label=uiLabel) if callback is not None: pm.checkBoxGrp(ui, edit=True, cc=callback) if uiType == 'int': ui = pm.intFieldGrp(label=uiLabel, numberOfFields=1) if callback is not None: pm.intFieldGrp(ui, edit=True, cc=callback) if uiType == 'float': ui = pm.floatFieldGrp(label=uiLabel, numberOfFields=1) if callback is not None: pm.floatFieldGrp(ui, edit=True, cc=callback) if uiType == 'enum': ui = pm.attrEnumOptionMenuGrp(label=uiLabel, at=attribute, ei=getEnumList(attribute)) # attrEnumOptionGrp has no cc callback, so I create a script job if callback is not None: attribute = pm.Attribute(renderGlobalsNodeName + "." + attribute) pm.scriptJob(attributeChange=[attribute, callback], parent=ui) if uiType == 'color': ui = pm.attrColorSliderGrp(label=uiLabel, at=attribute) if uiType == 'string': ui = pm.textFieldGrp(label=uiLabel) if callback is not None: pm.textFieldGrp(ui, edit=True, cc=callback) if uiType == 'vector': ui = pm.floatFieldGrp(label=uiLabel, nf=3) if callback is not None: pm.floatFieldGrp(ui, edit=True, cc=callback) return ui
def KrayQualityCreateTab(self): log.debug("KrayFinalGatheringCreateTab()") self.createGlobalsNode() qDict = {} self.rendererTabUiDict['quality'] = qDict parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "PhotonsScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Quality", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayoutA", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".qLuminosityModel") ui = pm.attrEnumOptionMenuGrp(label="Luminosity Model", at=self.renderGlobalsNodeName + ".qLuminosityModel", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".qAreaLights") ui = pm.attrEnumOptionMenuGrp(label="Area Lights Computation", at=self.renderGlobalsNodeName + ".qAreaLights", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".qAreaLightVisibility") ui = pm.attrEnumOptionMenuGrp(label="Area Light Visibility", at=self.renderGlobalsNodeName + ".qAreaLightVisibility", ei=self.getEnumList(attr)) pm.separator() attr = pm.Attribute(self.renderGlobalsNodeName + ".qOctreeDetail") ui = pm.attrEnumOptionMenuGrp(label="Octree Detail", at=self.renderGlobalsNodeName + ".qOctreeDetail", ei=self.getEnumList(attr)) # float qLevel; // float # bool qDoubleSided; // bool # bool qSpotlightsToArea; // bool # float qAreaLightsThreshold; // float # int qAMinRecursion; // int # int qAMaxRecursion; // int # float qLinearLightsThreshold; // float # int qLMinRecursion; // int # int qLMaxRecursion; // int # float qLuminosityThreshold; // float # int qLumMinRays; // int # int qLumMaxRays; // int # float qBlurringThreshold; // float # int qBLumMinRays; // int # int qBLumMaxRays; // int # float qBAccuracyLimit; // float # bool qTraceDirectLightReflections; // bool # pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def AppleseedTranslatorCreateTab(self): log.debug("AppleseedTranslatorCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "TrScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Translator", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".translatorVerbosity") ui = pm.attrEnumOptionMenuGrp(label="Translator Verbosity", at=self.renderGlobalsNodeName + ".translatorVerbosity", ei=self.getEnumList(attr)) with pm.frameLayout(label="{0} export".format(self.rendererName), collapsable=True, collapse=False): ui = pm.checkBoxGrp(label="Export {0} Scene file:".format(self.rendererName), value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".exportSceneFile", index=2) # xmlDict = {} # self.rendererTabUiDict['xml'] = xmlDict # defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".appleseed" # if not defaultXMLPath.dirname().exists(): # defaultXMLPath.dirname().makedirs() # with pm.rowLayout(nc=3): # xmlDict['xmlFileText'] = pm.text(label="Export to") # xmlDict['xmlFile'] = pm.textField(text=defaultXMLPath) # pm.symbolButton(image="navButtonBrowse.png", c=self.xmlFileBrowse) # pm.connectControl(xmlDict['xmlFile'], self.renderGlobalsNodeName + ".exportSceneFileName", index=2) with pm.frameLayout(label="Optimize Textures", collapsable=True, collapse=False): optiDict = {} ui = pm.checkBoxGrp(label="Use Optimized Textures:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".useOptimizedTextures", index=2) with pm.rowLayout(nc=3): self.rendererTabUiDict['opti'] = optiDict pm.text(label="OptimizedTex Dir:") optiDict['optiField'] = pm.textField(text=self.renderGlobalsNode.optimizedTexturePath.get()) pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index=2) with pm.frameLayout(label="Additional Settings", collapsable=True, collapse=False): ui = pm.floatFieldGrp(label="Scene scale:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def IndigoTranslatorCreateTab(self): log.debug("IndigoTranslatorCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query = True) pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) scLo = self.rendererName + "TrScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness = 0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn = True, width = 400): with pm.frameLayout(label="Translator", collapsable = True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".translatorVerbosity") ui = pm.attrEnumOptionMenuGrp(label = "Translator Verbosity", at=self.renderGlobalsNodeName + ".translatorVerbosity", ei = self.getEnumList(attr)) with pm.frameLayout(label="Indigo Scene File export", collapsable = True, collapse=False): ui = pm.checkBoxGrp(label="Export Indigo Scene file:", value1 = False) pm.connectControl(ui, self.renderGlobalsNodeName + ".exportSceneFile", index = 2 ) xmlDict = {} self.rendererTabUiDict['xml'] = xmlDict defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".igs" if not defaultXMLPath.dirname().exists(): defaultXMLPath.dirname().makedirs() with pm.rowLayout(nc=3): xmlDict['xmlFileText'] = pm.text(label = "Export to") xmlDict['xmlFile'] = pm.textField(text = defaultXMLPath) pm.symbolButton(image="navButtonBrowse.png", c=self.xmlFileBrowse) pm.connectControl(xmlDict['xmlFile'], self.renderGlobalsNodeName + ".exportSceneFileName", index = 2 ) with pm.frameLayout(label="Optimize Textures", collapsable = True, collapse=False): optiDict = {} ui = pm.checkBoxGrp(label="Use Optimized Textures:", value1 = False) with pm.rowLayout(nc=3): self.rendererTabUiDict['opti'] = optiDict pm.text(label="OptimizedTex Dir:") optiDict['optiField'] = pm.textField(text = self.renderGlobalsNode.optimizedTexturePath.get()) pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index = 2 ) with pm.frameLayout(label="Additional Settings", collapsable = True, collapse=False): ui = pm.floatFieldGrp(label="Scene scale:", value1 = 1.0, numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index = 2 ) pm.setUITemplate("attributeEditorTemplate", popTemplate = True) pm.formLayout(parentForm, edit = True, attachForm = [ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def TheaTranslatorCreateTab(self): log.debug("TheaTranslatorCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query = True) pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) scLo = self.rendererName + "TrScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness = 0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn = True, width = 400): with pm.frameLayout(label="Translator", collapsable = True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".translatorVerbosity") ui = pm.attrEnumOptionMenuGrp(label = "Translator Verbosity", at=self.renderGlobalsNodeName + ".translatorVerbosity", ei = self.getEnumList(attr)) with pm.frameLayout(label="Thea XML export", collapsable = True, collapse=False): ui = pm.checkBoxGrp(label="Export scene XML file:", value1 = False) pm.connectControl(ui, self.renderGlobalsNodeName + ".exportXMLFile", index = 2 ) xmlDict = {} self.rendererTabUiDict['xml'] = xmlDict with pm.rowColumnLayout(nc=3, width = 120): pm.text(label="XMLFileName:", width = 60, align="right") defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".Thea" xmlDict['xmlFile'] = pm.textField(text = defaultXMLPath, width = 60) pm.symbolButton(image="navButtonBrowse.png", c=self.xmlFileBrowse) pm.connectControl(xmlDict['xmlFile'], self.renderGlobalsNodeName + ".exportXMLFileName", index = 2 ) with pm.frameLayout(label="Optimize Textures", collapsable = True, collapse=False): with pm.rowColumnLayout(nc=3, width = 120): optiDict = {} pm.text(label="OptimizedTex Dir:", width = 60, align="right") self.rendererTabUiDict['opti'] = optiDict pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) optiDict['optiField'] = pm.textField(text = self.renderGlobalsNode.optimizedTexturePath.get(), width = 60) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index = 2 ) with pm.frameLayout(label="Additional Settings", collapsable = True, collapse=False): ui = pm.floatFieldGrp(label="Scene scale:", value1 = 1.0, numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index = 2 ) pm.setUITemplate("attributeEditorTemplate", popTemplate = True) pm.formLayout(parentForm, edit = True, attachForm = [ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def AppleseedRendererCreateTab(self): log.debug("AppleseedRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Pixel Sampler", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): # attr = pm.Attribute(self.renderGlobalsNodeName + ".pixel_renderer") # ui = pm.attrEnumOptionMenuGrp(label="Pixel Sampler", at=self.renderGlobalsNodeName + ".pixel_renderer", ei=self.getEnumList(attr)) self.addRenderGlobalsUIElement(attName='pixel_renderer', uiType='enum', displayName='Pixel Sampler', default='0', uiDict=uiDict, callback=self.AppleseedRendererUpdateTab) self.addRenderGlobalsUIElement(attName='minSamples', uiType='int', displayName='Min Samples', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='maxSamples', uiType='int', displayName='Max Samples', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='maxError', uiType='float', displayName='Max Error', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='enable_diagnostics', uiType='bool', displayName="Diagnostic AOV's", default=False, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='frameRendererPasses', uiType='int', displayName='Passes', uiDict=uiDict) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) self.addRenderGlobalsUIElement(attName='filtersize', uiType='int', displayName='Filter Size', default=False, uiDict=uiDict) with pm.frameLayout(label="Features", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='doMotionBlur', uiType='bool', displayName='Motion Blur', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='doDof', uiType='bool', displayName='Depth Of Field', default=False, uiDict=uiDict) with pm.frameLayout(label="Output", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".bitdepth") ui = pm.attrEnumOptionMenuGrp(label="Bit Depth", at=self.renderGlobalsNodeName + ".bitdepth", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".colorSpace") ui = pm.attrEnumOptionMenuGrp(label="Color Space", at=self.renderGlobalsNodeName + ".colorSpace", ei=self.getEnumList(attr)) ui = pm.checkBoxGrp(label="Clamping:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".clamping", index=2) with pm.frameLayout(label="Lighting Engine", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='lightingEngine', uiType='enum', displayName='Lighting Engine', default='0', uiDict=uiDict, callback=self.AppleseedRendererUpdateTab) with pm.frameLayout(label="Lighting Engine Settings", collapsable=True, collapse=False) as uiDict['LE_framelayout']: with pm.columnLayout(self.rendererName + "LEColumnLayout", adjustableColumn=True, width=400) as uiDict['LE_layout']: pass with pm.frameLayout(label="Renderer", collapsable=True, collapse=True): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='threads', uiType='int', displayName='Threads:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='rendererVerbosity', uiType='int', displayName='Verbosity:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='tilesize', uiType='int', displayName='Tile Size:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='texCacheSize', uiType='int', displayName='Tex Cache Size (kb):', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='assemblySBVH', uiType='bool', displayName='Use SBVH Acc. for mb:', uiDict=uiDict) pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) # pm.scriptJob(attributeChange=[self.renderGlobalsNode.samplingType, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")]) # self.updateEnvironment() self.AppleseedRendererUpdateTab()
def createUi(self, node = None): log.debug("createUi for node %s" % str(node)) currentSegment = "" layoutList = [] for att in self.attList: if att.kategory!=None and currentSegment != att.kategory: log.debug("kategory %s != %s" % (currentSegment, att.kategory )) katlist = att.kategory.split("|") diff = len(layoutList) - len(katlist) # neue liste ist kuerzer als alte, also solange dicht machen bis die laenge gleich ist log.debug("check diff %d" % diff) while diff > 0: layoutList.pop() pm.setParent("..") pm.setParent("..") diff = len(layoutList) - len(katlist) log.debug("new diff %d" % diff) # alte liste ist nun nicht laenger als neue liste # durchgehen und alles dichtmachen was nicht gleich ist for i in range(len(layoutList)): kat = katlist[i] ckat = layoutList[i] # wenn werte ungelich dann alles was noch kommt zumachen if kat != ckat: laylen = len(layoutList) for n in range(i, laylen): pm.setParent("..") pm.setParent("..") layoutList.pop(n) # nun sollte sichergestellt sein, dass layoutList nur noch elemente # enthaelt, die gleich sind, also kann man daran anknuepfen for i in range(len(layoutList), len(katlist)): log.debug("opening layout for katlist %s %d %s" % (str(katlist), i, katlist[i])) self.beginUISegment(katlist[i]) layoutList.append(katlist[i]) currentSegment = att.kategory if MAP_API_ATTR.has_key(att.type): log.debug("Adding element %s with displayName %s" % (att.attname,att.displayname)) attype, attypeval = MAP_API_ATTR[att.type] log.debug("Adding attribute named %s type %s val %s default %s" % (att.attname, attype, attypeval, att.default)) if attypeval == 'bool': att.uiElement = pm.checkBoxGrp( att.attname, numberOfCheckBoxes = 1, label1 = att.displayname, cc = Callback(self.dimConnections,att)) att.uiDimFunction = pm.checkBoxGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index = 2 ) if attypeval == 'int': att.uiElement = pm.intFieldGrp( att.attname, numberOfFields=1, label=att.displayname, value1=att.default, cc = Callback(self.dimConnections,att)) att.uiDimFunction = pm.intFieldGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index = 2 ) if attypeval == 'long2': if node: att.uiDimFunction = pm.attrFieldGrp( label = att.displayname, attribute='%s' % (node + "." + att.attname), cc = Callback(self.dimConnections,att)) if attypeval == 'float': att.uiElement = pm.floatFieldGrp( att.attname, numberOfFields=1, label=att.displayname, value1=att.default, cc = Callback(self.dimConnections,att)) att.uiDimFunction = pm.floatFieldGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index = 2 ) if attypeval == 'float2': if node: att.uiDimFunction = pm.attrFieldGrp( attribute='%s' % (node + "." + att.attname), cc = Callback(self.dimConnections,att)) if attypeval == 'string': att.uiElement = pm.textFieldGrp( att.attname, label=att.displayname, text=att.default, cc = Callback(self.dimConnections,att)) pm.connectControl(att.uiElement, node + "." + att.attname, index = 2 ) pm.textFieldGrp(att.uiElement, edit=True, text = att.default) if attypeval == 'enum': poplist = map(list, enumerate(att.values)) if node: nodeatt = node + "." + att.attname att.uiElement = pm.attrEnumOptionMenuGrp(att.attname, label = att.displayname, at=nodeatt, ei = poplist, vcc = Callback(self.dimConnections,att)) att.uiDimFunction = pm.attrEnumOptionMenuGrp else: att.uiElement = pm.attrEnumOptionMenuGrp(att.attname, label = att.displayname, ei = poplist, vcc = Callback(self.dimConnections,att)) att.uiDimFunction = pm.attrEnumOptionMenuGrp if attypeval == 'message': pass if len(layoutList) > 0: for i in range(len(layoutList)): pm.setParent("..") pm.setParent("..")
def FujiRendererCreateTab(self): log.debug("FujiRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') parentForm = pm.setParent(query=True) uiDict = {} self.rendererTabUiDict['common'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Sampling", collapsable=True, collapse=False): self.addRenderGlobalsUIElement(attName='sampleJitter', uiType='float', displayName='SampleJitter', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='sample_time_range_min', uiType='float', displayName='Sample Time Range Min', default='0.0', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='sample_time_range_max', uiType='float', displayName='Sample Time Range Max', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='samplesX', uiType='int', displayName='Pixel Samples x', default=3, uiDict=uiDict) self.addRenderGlobalsUIElement( attName='samplesY', uiType='int', displayName='Pixel Samples y', default=3, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='cast_shadow', uiType='bool', displayName='Cast Shadows', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='max_reflect_depth', uiType='int', displayName='Max Reflection Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='max_refract_depth', uiType='int', displayName='Max Refraction Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_step', uiType='float', displayName='Raymarching Stepsize', default='0.05', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_shadow_step', uiType='float', displayName='Raymarching Shadow Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_reflect_ste', uiType='float', displayName='Raymarching Reflection Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_refract_ste', uiType='float', displayName='Raymarching Refraction Stepsize', default='0.1', uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='doMotionBlur', uiType='bool', displayName='Motionblur:', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement( attName='doDof', uiType='bool', displayName='Depth of Field:', default=False, uiDict=uiDict) with pm.frameLayout(label="Output", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".imageFormat") ui = pm.attrEnumOptionMenuGrp( label="Image Format", at=self.renderGlobalsNodeName + ".imageFormat", ei=self.getEnumList(attr)) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp( label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) ui = pm.intFieldGrp(label="Filter Size:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".filtersize", index=2) with pm.frameLayout(label="Renderer", collapsable=True, collapse=False): self.addRenderGlobalsUIElement( attName='use_max_thread', uiType='bool', displayName='Use Max Threads', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='threads', uiType='int', displayName='Threads', default=8, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='tilesize', uiType='int', displayName='Tile Size', default=64, uiDict=uiDict) ui = pm.intFieldGrp(label="Verbosity:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".rendererVerbosity", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[(scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0)]) self.FujiRendererUpdateTab()
def createUi(self, node=None): log.debug("createUi for node %s" % str(node)) currentSegment = "" layoutList = [] for att in self.attList: if att.kategory != None and currentSegment != att.kategory: log.debug("kategory %s != %s" % (currentSegment, att.kategory)) katlist = att.kategory.split("|") diff = len(layoutList) - len(katlist) # neue liste ist kuerzer als alte, also solange dicht machen bis die laenge gleich ist log.debug("check diff %d" % diff) while diff > 0: layoutList.pop() pm.setParent("..") pm.setParent("..") diff = len(layoutList) - len(katlist) log.debug("new diff %d" % diff) # alte liste ist nun nicht laenger als neue liste # durchgehen und alles dichtmachen was nicht gleich ist for i in range(len(layoutList)): kat = katlist[i] ckat = layoutList[i] # wenn werte ungelich dann alles was noch kommt zumachen if kat != ckat: laylen = len(layoutList) for n in range(i, laylen): pm.setParent("..") pm.setParent("..") layoutList.pop(n) # nun sollte sichergestellt sein, dass layoutList nur noch elemente # enthaelt, die gleich sind, also kann man daran anknuepfen for i in range(len(layoutList), len(katlist)): log.debug("opening layout for katlist %s %d %s" % (str(katlist), i, katlist[i])) self.beginUISegment(katlist[i]) layoutList.append(katlist[i]) currentSegment = att.kategory if MAP_API_ATTR.has_key(att.type): log.debug("Adding element %s with displayName %s" % (att.attname, att.displayname)) attype, attypeval = MAP_API_ATTR[att.type] log.debug( "Adding attribute named %s type %s val %s default %s" % (att.attname, attype, attypeval, att.default)) if attypeval == 'bool': att.uiElement = pm.checkBoxGrp(att.attname, numberOfCheckBoxes=1, label1=att.displayname, cc=Callback( self.dimConnections, att)) att.uiDimFunction = pm.checkBoxGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index=2) if attypeval == 'int': att.uiElement = pm.intFieldGrp(att.attname, numberOfFields=1, label=att.displayname, value1=att.default, cc=Callback( self.dimConnections, att)) att.uiDimFunction = pm.intFieldGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index=2) if attypeval == 'long2': if node: att.uiDimFunction = pm.attrFieldGrp( attribute='%s' % (node + "." + att.attname), cc=Callback(self.dimConnections, att)) if attypeval == 'float': att.uiElement = pm.floatFieldGrp(att.attname, numberOfFields=1, label=att.displayname, value1=att.default, cc=Callback( self.dimConnections, att)) att.uiDimFunction = pm.floatFieldGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index=2) if attypeval == 'float2': if node: att.uiDimFunction = pm.attrFieldGrp( attribute='%s' % (node + "." + att.attname), cc=Callback(self.dimConnections, att)) if attypeval == 'string': att.uiElement = pm.textFieldGrp(att.attname, label=att.displayname, text=att.default, cc=Callback( self.dimConnections, att)) pm.connectControl(att.uiElement, node + "." + att.attname, index=2) pm.textFieldGrp(att.uiElement, edit=True, text=att.default) if attypeval == 'enum': poplist = map(list, enumerate(att.values)) if node: nodeatt = node + "." + att.attname att.uiElement = pm.attrEnumOptionMenuGrp( att.attname, label=att.displayname, at=nodeatt, ei=poplist, vcc=Callback(self.dimConnections, att)) att.uiDimFunction = pm.attrEnumOptionMenuGrp else: att.uiElement = pm.attrEnumOptionMenuGrp( att.attname, label=att.displayname, ei=poplist, vcc=Callback(self.dimConnections, att)) att.uiDimFunction = pm.attrEnumOptionMenuGrp if attypeval == 'message': pass if len(layoutList) > 0: for i in range(len(layoutList)): pm.setParent("..") pm.setParent("..")
def create(self): # Create default render globals node if needed. createGlobalNodes() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) columnWidth = 400 with pm.scrollLayout("appleseedScrollLayout", horizontalScrollBarThickness=0): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): with pm.frameLayout(label="Sampling", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.intFieldGrp( label="Render Passes", numberOfFields=1), attrName="passes") self._addControl( ui=pm.checkBoxGrp( label="Adaptive Sampling", changeCommand=self.__adaptiveSamplerChanged), attrName="adaptiveSampling") adaptiveSampling = mc.getAttr("appleseedRenderGlobals.adaptiveSampling") self._addControl( ui=pm.intFieldGrp( label="Min Samples", numberOfFields=1, enable=adaptiveSampling), attrName="minPixelSamples") self._addControl( ui=pm.intFieldGrp( label="Max Samples", numberOfFields=1), attrName="samples") self._addControl( ui=pm.intFieldGrp( label="Batch Sample Size", numberOfFields=1, enable=adaptiveSampling), attrName="batchSampleSize") self._addControl( ui=pm.floatFieldGrp( label="Noise Threshold", numberOfFields=1, enable=adaptiveSampling), attrName="sampleNoiseThreshold") self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Pixel Filter", enumeratedItem=self._getAttributeMenuItems("pixelFilter")), attrName="pixelFilter") self._addControl( ui=pm.floatFieldGrp( label="Pixel Filter Size", numberOfFields=1), attrName="pixelFilterSize") self._addControl( ui=pm.intFieldGrp( label="Tile Size", numberOfFields=1), attrName="tileSize") with pm.frameLayout(label="Lighting", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Lighting Engine", enumeratedItem=self._getAttributeMenuItems("lightingEngine")), attrName="lightingEngine") with pm.frameLayout(label="Path Tracing", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.checkBoxGrp( label="Limit Bounces", changeCommand=self.__limitBouncesChanged), attrName="limitBounces") limitBounces = mc.getAttr( "appleseedRenderGlobals.limitBounces") self._addControl( ui=pm.intFieldGrp( label="Global Bounces", numberOfFields=1, enable=limitBounces), attrName="bounces") self._addControl( ui=pm.intFieldGrp( label="Diffuse Bounces", numberOfFields=1, enable=limitBounces), attrName="diffuseBounces") self._addControl( ui=pm.intFieldGrp( label="Glossy Bounces", numberOfFields=1, enable=limitBounces), attrName="glossyBounces") self._addControl( ui=pm.intFieldGrp( label="Specular Bounces", numberOfFields=1, enable=limitBounces), attrName="specularBounces") self._addControl( ui=pm.floatFieldGrp( label="Light Samples", numberOfFields=1), attrName="lightSamples") self._addControl( ui=pm.floatFieldGrp( label="Environment Samples", numberOfFields=1), attrName="envSamples") self._addControl( ui=pm.checkBoxGrp(label="Clamp Roughness"), attrName="clampRoughness") self._addControl( ui=pm.checkBoxGrp(label="Caustics"), attrName="caustics") self._addControl( ui=pm.floatFieldGrp( label="Max Ray Intensity", numberOfFields=1), attrName="maxRayIntensity") with pm.frameLayout(label="Scene", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Override Shaders", enumeratedItem=self._getAttributeMenuItems("diagnostics")), attrName="diagnostics") self._addControl( ui=pm.floatFieldGrp( label="Scene Scale", numberOfFields=1), attrName="sceneScale") with pm.rowLayout("appleseedRowLayout", nc=3): pm.text("Environment Light") ui = pm.optionMenu( changeCommand=self.__environmentLightSelected) pm.menuItem(label="<none>") for envLight in g_environmentLightsList: pm.menuItem(parent=ui, label=envLight) # Set the currently selected environment light in the menu. connections = mc.listConnections( "appleseedRenderGlobals.envLight") if connections: node = connections[0] if mc.nodeType(node) == "transform": shapes = mc.listRelatives(node, shapes=True) assert shapes node = shapes[0] pm.optionMenu(ui, edit=True, value=node) else: pm.optionMenu(ui, edit=True, value="<none>") self._uis["envLight"] = ui logger.debug( "Created globals env light menu, name = %s" % ui) self._addControl( ui=pm.checkBoxGrp(label="Environment Visible"), attrName="bgLight") with pm.frameLayout(label="Motion Blur", collapsable=True, collapse=True): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.checkBoxGrp( label="Motion Blur", changeCommand=self.__motionBlurChanged), attrName="motionBlur") enableMotionBlur = mc.getAttr( "appleseedRenderGlobals.motionBlur") self._addControl( ui=pm.intFieldGrp( label="Camera Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbCameraSamples") self._addControl( ui=pm.intFieldGrp( label="Transformation Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbTransformSamples") self._addControl( ui=pm.intFieldGrp( label="Deformation Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbDeformSamples") self._addControl( ui=pm.floatFieldGrp( label="Shutter Open", numberOfFields=1, enable=enableMotionBlur), attrName="shutterOpen") self._addControl( ui=pm.floatFieldGrp( label="Shutter Close", numberOfFields=1, enable=enableMotionBlur), attrName="shutterClose") with pm.frameLayout(label="System", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.intFieldGrp( label="Threads", numberOfFields=1), attrName="threads") self._addControl( ui=pm.intFieldGrp( label="Texture Cache Size (MB)", numberOfFields=1), attrName="maxTexCacheSize") with pm.frameLayout(label="Experimental", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.checkBoxGrp(label="Use Embree"), attrName="useEmbree") pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout( parentForm, edit=True, attachForm=[ ("appleseedScrollLayout", "top", 0), ("appleseedScrollLayout", "bottom", 0), ("appleseedScrollLayout", "left", 0), ("appleseedScrollLayout", "right", 0)]) logger.debug("Created appleseed render global main tab") # Update the newly created tab. self.update()
def OpenMayaCommonGlobalsCreateTab(self): log.debug("OpenMayaCommonGlobalsCreateTab()") scLo = "scrollLayout" parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict clo = "clo" with pm.frameLayout(clo, labelVisible=False, collapsable=False, mw=8, mh=5, borderVisible=False): with pm.columnLayout(adj=True): uiDict['imgpath'] = pm.text(label="Path:", align="left", font="smallBoldLabelFont") uiDict['imgname'] = pm.text(label="File Name:", align="left", font="smallBoldLabelFont") uiDict['imgsize'] = pm.text(label="Image Size:", align="left", font="smallBoldLabelFont") with pm.scrollLayout(scLo, horizontalScrollBarThickness=0) as sl: print "Scroll layout", sl with pm.columnLayout("commonTabColumn", adjustableColumn=True, width=400) as ctc: print "common", ctc with pm.frameLayout(label="File Output", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): pm.textFieldGrp(label="File Name Prefix:") pm.attrEnumOptionMenuGrp("imageMenuMayaSW", label="Image Format:", attribute=self.renderNode.imageFormat) uiDict['imageNumbering'] = pm.optionMenuGrp(label="Frame/Animation ext:", changeCommand=self.setFrameNumbering) for value in ["name.ext", "name.#.ext"]: pm.menuItem(value) if self.defaultGlobals.animation.get(): uiDict['imageNumbering'].setSelect(2) self.addRenderDefaultGlobalsUIElement(attName='extensionPadding', uiType='int', displayName='Frame Padding:', uiDict=uiDict) with pm.frameLayout(label="Frame Range", collapsable=True, collapse=False) as frameRangeLayout: uiDict['frameRangeLayout'] = frameRangeLayout with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement(attName='startFrame', uiType='float', displayName='Start Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='endFrame', uiType='float', displayName='End Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='byFrame', uiType='float', displayName='By Frame:', uiDict=uiDict) with pm.frameLayout(label="Renderable Cameras",collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): for cam in pm.ls(type="camera"): pm.checkBoxGrp(label=cam.name(), value1=cam.renderable.get(), cc=pm.Callback(self.switchCamRenderable, cam)) with pm.frameLayout(label="Image Size",collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict['imageSizePresets'] = pm.optionMenuGrp(label="Presets:", changeCommand=self.setImageSize) for imgFormat in self.imageFormatData: pm.menuItem(imgFormat[0]) uiDict['imageSizePresets'].setSelect(12) self.addRenderDefaultResGlobalsUIElement(attName='aspectLock', uiType='bool', displayName='Maintain aspect ratio', uiDict=uiDict) self.addRenderDefaultResGlobalsUIElement(attName='width', uiType='int', displayName='Width:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "width")) self.addRenderDefaultResGlobalsUIElement(attName='height', uiType='int', displayName='Height:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "height")) self.addRenderDefaultResGlobalsUIElement(attName='deviceAspectRatio', uiType='float', displayName='Device Aspect:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "devAsp")) #self.addRenderDefaultResGlobalsUIElement(attName='pixelAspect', uiType='float', displayName='Pixel Aspect:', uiDict=uiDict, callback=self.updateImageSize) with pm.frameLayout(label="Render Scripts",collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement(attName='preMel', uiType='string', displayName='Pre Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='postMel', uiType='string', displayName='Post Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='preRenderLayerMel', uiType='string', displayName='Pre Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='postRenderLayerMel', uiType='string', displayName='Post Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='preRenderMel', uiType='string', displayName='Pre Frame Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement(attName='postRenderMel', uiType='string', displayName='Post Frame Mel:', uiDict=uiDict) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (clo, "right", 0), (clo, "left", 0), (clo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ], attachControl = [(scLo, "top", 0, clo)]) self.setImageSize("HD_540") # set default self.OpenMayaCommonGlobalsUpdateTab()
def KrayEnvironmentCreateTab(self): log.debug("KrayEnvironmentCreateTab()") self.createGlobalsNode() envDict = {} self.rendererTabUiDict['environment'] = envDict bgDict = {} self.rendererTabUiDict['background'] = bgDict parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "EnvScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Background", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".backgroundType") ui = pm.attrEnumOptionMenuGrp(label="Background Type", at=self.renderGlobalsNodeName + ".backgroundType", ei=self.getEnumList(attr)) bgDict['environmentColor'] = pm.attrColorSliderGrp(label="Background Color", at=self.renderGlobalsNodeName + ".environmentColor") bgDict['gradientHorizon'] = pm.attrColorSliderGrp(label="Horizon Color", at=self.renderGlobalsNodeName + ".gradientHorizon") bgDict['gradientZenit'] = pm.attrColorSliderGrp(label="Zenith Color", at=self.renderGlobalsNodeName + ".gradientZenit") bgDict['nadir'] = pm.attrColorSliderGrp(label="Bottom Color", at=self.renderGlobalsNodeName + ".nadir") bgDict['groundAlbedo'] = pm.attrColorSliderGrp(label="Ground Albedo", at=self.renderGlobalsNodeName + ".groundAlbedo") pm.separator() bgDict['environmentMap'] = pm.attrColorSliderGrp(label="Environment Map", at=self.renderGlobalsNodeName + ".environmentMap") bgDict['environmentMap2'] = pm.attrColorSliderGrp(label="Environment Map 2", at=self.renderGlobalsNodeName + ".environmentMap2") pm.separator() bgDict['sunDir'] = pm.attrFieldGrp(label="Sun Direction:", at=self.renderGlobalsNodeName + ".sunDir") bgDict['zenithDir'] = pm.attrFieldGrp(label="Zenith Direction:", at=self.renderGlobalsNodeName + ".zenithDir") bgDict['orientation'] = pm.attrFieldGrp(label="Orientation:", at=self.renderGlobalsNodeName + ".orientation") pm.separator() bgDict['skyGamma'] = pm.floatFieldGrp(label="Sky Gamma:", numberOfFields=1) pm.connectControl(bgDict['skyGamma'], self.renderGlobalsNodeName + ".skyGamma", index=2) bgDict['groundGamma'] = pm.floatFieldGrp(label="Ground Gamma:", numberOfFields=1) pm.connectControl(bgDict['groundGamma'], self.renderGlobalsNodeName + ".groundGamma", index=2) bgDict['turbidity'] = pm.floatFieldGrp(label="Turbidity:", numberOfFields=1) pm.connectControl(bgDict['turbidity'], self.renderGlobalsNodeName + ".turbidity", index=2) bgDict['exposure'] = pm.floatFieldGrp(label="Exposure:", numberOfFields=1) pm.connectControl(bgDict['exposure'], self.renderGlobalsNodeName + ".exposure", index=2) bgDict['sunIntensity'] = pm.floatFieldGrp(label="Sun Intensity:", numberOfFields=1) pm.connectControl(bgDict['sunIntensity'], self.renderGlobalsNodeName + ".sunIntensity", index=2) pm.separator() bgDict['solidAngle'] = pm.floatFieldGrp(label="Solid Angle:", numberOfFields=1) pm.connectControl(bgDict['solidAngle'], self.renderGlobalsNodeName + ".solidAngle", index=2) bgDict['sunSpotAngle'] = pm.floatFieldGrp(label="Sun Spot Angle:", numberOfFields=1) pm.connectControl(bgDict['sunSpotAngle'], self.renderGlobalsNodeName + ".sunSpotAngle", index=2) with pm.frameLayout(label="Environment", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".environmentType") ui = pm.attrEnumOptionMenuGrp(label="Environment Type", at=self.renderGlobalsNodeName + ".environmentType", ei=self.getEnumList(attr)) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) self.KrayRendererUIUpdateCallback("environment") self.KrayRendererUIUpdateCallback("background") pm.scriptJob(attributeChange=[self.renderGlobalsNode.backgroundType, pm.Callback(self.KrayRendererUIUpdateCallback, "background")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.environmentType, pm.Callback(self.KrayRendererUIUpdateCallback, "environment")])
def KrayRendererUIUpdateCallback(self, what=None): self.createGlobalsNode() #self.updateEnvironment() log.debug("KrayRendererUIUpdateCallback(): " + str(what)) if what == "environment": log.debug("Update environment") eDict = self.rendererTabUiDict['environment'] if what == "background": log.debug("Update background") eDict = self.rendererTabUiDict['background'] eType = self.renderGlobalsNode.backgroundType.get() for key in eDict: eDict[key].setEnable(val=False) if eType == 0: #color eDict['environmentColor'].setEnable(val=True) if eType == 1 or eType == 2: #physSky eDict['sunDir'].setEnable(val=True) eDict['orientation'].setEnable(val=True) eDict['turbidity'].setEnable(val=True) eDict['exposure'].setEnable(val=True) if eType == 2: #physSky2 eDict['groundAlbedo'].setEnable(val=True) if eType == 3 or eType == 4: #sky eDict['gradientHorizon'].setEnable(val=True) eDict['gradientZenit'].setEnable(val=True) eDict['nadir'].setEnable(val=True) eDict['zenithDir'].setEnable(val=True) if eType == 4: #sky2 eDict['skyGamma'].setEnable(val=True) eDict['groundGamma'].setEnable(val=True) if eType == 5 or eType == 6: #bitmap eDict['environmentMap'].setEnable(val=True) if eType == 6: #bitmap2 eDict['environmentMap2'].setEnable(val=True) if eType == 7: #directionsMap pass if eType == 8: #lightMap pass if eType == 9: #sphericalMap eDict['environmentMap'].setEnable(val=True) if what == "sampling": print "Update sampling" sDict = self.rendererTabUiDict['sampling'] sType = self.renderGlobalsNode.samplingType.get() if sType != 1: #grid pm.intFieldGrp(sDict['gridSize'], edit=True, enable=False) pm.checkBoxGrp(sDict['gridRotate'], edit=True, enable=False) else: pm.intFieldGrp(sDict['gridSize'], edit=True, enable=True) pm.checkBoxGrp(sDict['gridRotate'], edit=True, enable=True) fType = self.renderGlobalsNode.filtertype.get() if fType in [4, 5, 6]: pm.floatFieldGrp(sDict['filterSize'], edit=True, enable=False) else: pm.floatFieldGrp(sDict['filterSize'], edit=True, enable=True) iFormat = self.renderGlobalsNode.imageFormat.get() if iFormat in [2, 3]: pm.attrEnumOptionMenuGrp(sDict['bitdepth'], edit=True, enable=True) else: pm.attrEnumOptionMenuGrp(sDict['bitdepth'], edit=True, enable=False) if iFormat == 1: pm.intFieldGrp(sDict['jpgQuality'], edit=True, enable=True) else: pm.intFieldGrp(sDict['jpgQuality'], edit=True, enable=False)
def KrayRendererCreateTab(self): log.debug("KrayRendererCreateTab()") self.createGlobalsNode() sDict = {} self.rendererTabUiDict['sampling'] = sDict parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Image format", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayoutA", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".diffuseModel") ui = pm.attrEnumOptionMenuGrp(label="Diffuse Model", at=self.renderGlobalsNodeName + ".diffuseModel", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".qLuminosityModel") ui = pm.attrEnumOptionMenuGrp(label="Luminosity Model", at=self.renderGlobalsNodeName + ".qLuminosityModel", ei=self.getEnumList(attr)) pm.separator() attr = pm.Attribute(self.renderGlobalsNodeName + ".imageFormat") ui = pm.attrEnumOptionMenuGrp(label="Image format", at=self.renderGlobalsNodeName + ".imageFormat", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".bitdepth") sDict['bitdepth'] = pm.attrEnumOptionMenuGrp(label="Bit depth", at=self.renderGlobalsNodeName + ".bitdepth", ei=self.getEnumList(attr)) sDict['jpgQuality'] = pm.intFieldGrp(label="Jpg Quality:", numberOfFields=1) pm.connectControl(sDict['jpgQuality'], self.renderGlobalsNodeName + ".jpgQuality", index=2) with pm.frameLayout(label="Sampling", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayoutA", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".samplingType") ui = pm.attrEnumOptionMenuGrp(label="Sampling Type", at=self.renderGlobalsNodeName + ".samplingType", ei=self.getEnumList(attr)) sDict['fullScreenAA'] = pm.checkBoxGrp(label="Full Screen AA:", value1=False) pm.connectControl(sDict['fullScreenAA'], self.renderGlobalsNodeName + ".fullScreenAA", index=2) pm.separator() sDict['gridSize'] = pm.intFieldGrp(label="Grid Size:", numberOfFields=1) pm.connectControl(sDict['gridSize'], self.renderGlobalsNodeName + ".gridSize", index=2) sDict['gridRotate'] = pm.checkBoxGrp(label="Grid Rotate:", value1=False) pm.connectControl(sDict['gridRotate'], self.renderGlobalsNodeName + ".rotateGrid", index=2) pm.separator() ui = pm.intFieldGrp(label="Rays:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_rays", index=2) ui = pm.intFieldGrp(label="Min Rays:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_minRays", index=2) ui = pm.intFieldGrp(label="Max Rays:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_maxRays", index=2) pm.separator() ui = pm.intFieldGrp(label="Edge Thickness:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_thickness", index=2) ui = pm.floatFieldGrp(label="Edge Absulut:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_edgeAbsolute", index=2) ui = pm.floatFieldGrp(label="Edge Relative:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_relative", index=2) pm.separator() ui = pm.floatFieldGrp(label="Normal Sentitivity:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_normal", index=2) ui = pm.floatFieldGrp(label="Z Sensitivity:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_z", index=2) ui = pm.floatFieldGrp(label="Max Brightness:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_overburn", index=2) ui = pm.floatFieldGrp(label="Threshold:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_threshold", index=2) pm.separator() ui = pm.intFieldGrp(label="Upsample:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".aa_upsample", index=2) ui = pm.floatFieldGrp(label="Mb Subframes:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".mb_subframes", index=2) pm.separator() attr = pm.Attribute(self.renderGlobalsNodeName + ".pixelOrder") ui = pm.attrEnumOptionMenuGrp(label="Pixel Order", at=self.renderGlobalsNodeName + ".pixelOrder", ei=self.getEnumList(attr)) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) sDict['filterSize'] = pm.floatFieldGrp(label="Filter Size:", numberOfFields=1) pm.connectControl(sDict['filterSize'], self.renderGlobalsNodeName + ".filtersize", index=2) with pm.frameLayout(label="Features", collapsable=True, collapse=False): sDict['doMb'] = pm.checkBoxGrp(label="Motion Blur:") pm.connectControl(sDict['doMb'], self.renderGlobalsNodeName + ".doMb", index=2) sDict['doDof'] = pm.checkBoxGrp(label="Depth Of Field:") pm.connectControl(sDict['doDof'], self.renderGlobalsNodeName + ".doDof", index=2) sDict['camSingleSided'] = pm.checkBoxGrp(label="Render Single Sided:") pm.connectControl(sDict['camSingleSided'], self.renderGlobalsNodeName + ".camSingleSided", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) self.KrayRendererUpdateTab() self.KrayRendererUIUpdateCallback("sampling") pm.scriptJob(attributeChange=[self.renderGlobalsNode.samplingType, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.filtertype, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.imageFormat, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")])
def KrayPhotonsCreateTab(self): log.debug("KrayPhotonsCreateTab()") self.createGlobalsNode() photonsDict = {} self.rendererTabUiDict['photons'] = photonsDict causticDict = {} self.rendererTabUiDict['caustic'] = causticDict parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "PhotonsScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Photons", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.floatFieldGrp(label="GI Resolution:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".giResolution", index=2) ui = pm.checkBoxGrp(label="GI Resolution Auto:") pm.connectControl(ui, self.renderGlobalsNodeName + ".giResolutionAuto", index=2) ui = pm.checkBoxGrp(label="Preview Photons:") pm.connectControl(ui, self.renderGlobalsNodeName + ".previewPhotons", index=2) attr = pm.Attribute(self.renderGlobalsNodeName + ".photonMapType") ui = pm.attrEnumOptionMenuGrp(label="Photon Map Type", at=self.renderGlobalsNodeName + ".photonMapType", ei=self.getEnumList(attr)) ui = pm.intFieldGrp(label="Photons:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonCount", index=2) ui = pm.floatFieldGrp(label="Power:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonPower", index=2) ui = pm.floatFieldGrp(label="NBlur:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonNBlur", index=2) ui = pm.floatFieldGrp(label="Precache Dist:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonPrecacheDist", index=2) ui = pm.floatFieldGrp(label="Precache Blur:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonPrecacheBlur", index=2) pm.separator() ui = pm.checkBoxGrp(label="Auto Photons:") pm.connectControl(ui, self.renderGlobalsNodeName + ".photonUseAutoPhotons", index=2) ui = pm.floatFieldGrp(label="Auto Photons Low:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonAutoPhotonsLow", index=2) ui = pm.floatFieldGrp(label="Auto Photons High:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonAutoPhotonsHigh", index=2) ui = pm.floatFieldGrp(label="Auto Photons Steps:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".photonAutoPhotonsSteps", index=2) with pm.frameLayout(label="Caustics", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.checkBoxGrp(label="Add To Lightmap:") pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsAddToLightmap", index=2) pm.separator() ui = pm.intFieldGrp(label="Caustic Photons:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsCount", index=2) ui = pm.floatFieldGrp(label="Caustic Power:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsPower", index=2) ui = pm.floatFieldGrp(label="Caustic NBlur:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsNBlur", index=2) pm.separator() ui = pm.checkBoxGrp(label="Caustic Auto Photons:") pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsUseAutoPhotons", index=2) ui = pm.floatFieldGrp(label="Caustic Auto Low:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsAutoPhotonsLow", index=2) ui = pm.floatFieldGrp(label="Caustic Auto High:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsAutoPhotonsHigh", index=2) ui = pm.floatFieldGrp(label="Caustic Auto Steps:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".causticsAutoPhotonsSteps", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def create(self): # Create default render globals node if needed. createGlobalNodes() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) columnWidth = 400 with pm.scrollLayout("outputScrollLayout", horizontalScrollBarThickness=0): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): with pm.frameLayout(label="AOVs", collapsable=True, collapse=False): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl(ui=pm.checkBoxGrp(label="Diffuse"), attrName="diffuseAOV") self._addControl(ui=pm.checkBoxGrp(label="Glossy"), attrName="glossyAOV") self._addControl(ui=pm.checkBoxGrp(label="Emission"), attrName="emissionAOV") self._addControl(ui=pm.checkBoxGrp(label="Direct Diffuse"), attrName="directDiffuseAOV") self._addControl(ui=pm.checkBoxGrp(label="Indirect Diffuse"), attrName="indirectDiffuseAOV") self._addControl(ui=pm.checkBoxGrp(label="Direct Glossy"), attrName="directGlossyAOV") self._addControl(ui=pm.checkBoxGrp(label="Indirect Glossy"), attrName="indirectGlossyAOV") self._addControl(ui=pm.checkBoxGrp(label="Albedo"), attrName="albedoAOV") self._addControl(ui=pm.checkBoxGrp(label="Normal"), attrName="normalAOV") self._addControl(ui=pm.checkBoxGrp(label="UV"), attrName="uvAOV") self._addControl(ui=pm.checkBoxGrp(label="Depth"), attrName="depthAOV") self._addControl(ui=pm.checkBoxGrp(label="NPR Shading"), attrName="nprShadingAOV") self._addControl(ui=pm.checkBoxGrp(label="NPR Contours"), attrName="nprContourAOV") with pm.frameLayout(label="Denoiser", collapsable=True, collapse=True): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Denoiser", enumeratedItem=self._getAttributeMenuItems("denoiser")), attrName="denoiser") self._addControl( ui=pm.checkBoxGrp( label="Skip Already Denoised"), attrName="skipDenoised") self._addControl( ui=pm.checkBoxGrp( label="Random Pixel Order"), attrName="randomPixelOrder") enablePrefilter = mc.getAttr( "appleseedRenderGlobals.prefilterSpikes") self._addControl( ui=pm.checkBoxGrp( label="Prefilter Spikes", changeCommand=self.__prefilterChanged), attrName="prefilterSpikes") self._addControl( ui=pm.floatFieldGrp( label="Spike Thereshold", numberOfFields=1, enable=enablePrefilter), attrName="spikeThreshold") self._addControl( ui=pm.floatFieldGrp( label="Patch Distance", numberOfFields=1), attrName="patchDistance") self._addControl( ui=pm.intFieldGrp( label="Denoise Scales", numberOfFields=1), attrName="denoiseScales") with pm.frameLayout(label="Render Stamp", collapsable=True, collapse=True): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl(ui=pm.checkBoxGrp(label="Enable"), attrName="renderStamp") self._addControl( ui=pm.textFieldGrp( label='Render Stamp'), attrName="renderStampString") with pm.frameLayout(label="Logging", collapsable=True, collapse=True): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Log Level", enumeratedItem=self._getAttributeMenuItems("logLevel")), attrName="logLevel") self._addControl( ui=pm.textFieldButtonGrp( label='Log Filename', buttonLabel='...', buttonCommand=self.__chooseLogFilename), attrName="logFilename") pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout( parentForm, edit=True, attachForm=[ ("outputScrollLayout", "top", 0), ("outputScrollLayout", "bottom", 0), ("outputScrollLayout", "left", 0), ("outputScrollLayout", "right", 0)]) logger.debug("Created appleseed render global output tab") # Update the newly created tab. self.update()
def AppleseedRendererCreateTab(self): log.debug("AppleseedRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Sampling", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.checkBoxGrp(label="Adaptive Sampling:", value1=False, cc=self.AppleseedRendererUpdateTab) pm.connectControl(ui, self.renderGlobalsNodeName + ".adaptiveSampling", index=2) self.rendererTabUiDict['minSamples'] = pm.intFieldGrp(label="Samples min:", value1=2, numberOfFields=1) pm.connectControl(self.rendererTabUiDict['minSamples'], self.renderGlobalsNodeName + ".minSamples", index=2) ui = pm.intFieldGrp(label="Samples max:", value1=16, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".maxSamples", index=2) self.rendererTabUiDict['maxError'] = pm.floatFieldGrp(label="Max Error:", value1=0.01, numberOfFields=1) pm.connectControl(self.rendererTabUiDict['maxError'], self.renderGlobalsNodeName + ".maxError", index=2) pm.separator() ui = pm.checkBoxGrp(label="Motionblur:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".doMotionBlur", index=2) ui = pm.checkBoxGrp(label="Depth Of Field:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".doDof", index=2) with pm.frameLayout(label="Output", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): #attr = pm.Attribute(self.renderGlobalsNodeName + ".imageFormat") #ui = pm.attrEnumOptionMenuGrp(label = "Image Format", at=self.renderGlobalsNodeName + ".imageFormat", ei = self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".bitdepth") ui = pm.attrEnumOptionMenuGrp(label="Bit Depth", at=self.renderGlobalsNodeName + ".bitdepth", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".colorSpace") ui = pm.attrEnumOptionMenuGrp(label="Color Space", at=self.renderGlobalsNodeName + ".colorSpace", ei=self.getEnumList(attr)) ui = pm.checkBoxGrp(label="Clamping:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".clamping", index=2) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) ui = pm.intFieldGrp(label="Filter Size:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".filtersize", index=2) with pm.frameLayout(label="Lighting", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".lightingEngine") ui = pm.attrEnumOptionMenuGrp(label="Lighting Engine", at=self.renderGlobalsNodeName + ".lightingEngine", ei=self.getEnumList(attr)) ui = pm.intFieldGrp(label="Max Trace Depth:", value1=4, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".maxTraceDepth", index=2) ui = pm.checkBoxGrp(label="Caustics:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".caustics", index=2) with pm.frameLayout(label="Advanced Lighting", collapsable=True, collapse=True): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.intFieldGrp(label="Diffuse Depth:", value1=4, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".diffuseDepth", index=2) ui = pm.intFieldGrp(label="Glossy Depth:", value1=4, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".glossyDepth", index=2) ui = pm.intFieldGrp(label="Direct Light Samples:", value1=4, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".directLightSamples", index=2) with pm.frameLayout(label="Renderer", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.intFieldGrp(label="Threads:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".threads", index=2) ui = pm.intFieldGrp(label="Verbosity:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".rendererVerbosity", index=2) ui = pm.intFieldGrp(label="Tile Size:", value1=32, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".tilesize", index=2) ui = pm.checkBoxGrp(label="Use SBVH Acceleration for mb:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".assemblySBVH", index=2) pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) #pm.scriptJob(attributeChange=[self.renderGlobalsNode.samplingType, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")]) #self.updateEnvironment() self.AppleseedRendererUpdateTab()
def OpenMayaCommonGlobalsCreateTab(self): scLo = "scrollLayout" parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) if self.rendererTabUiDict.has_key("common"): self.rendererTabUiDict.pop("common") uiDict = {} self.rendererTabUiDict["common"] = uiDict clo = "clo" with pm.frameLayout(clo, labelVisible=False, collapsable=False, mw=8, mh=5, borderVisible=False): with pm.columnLayout(adj=True): uiDict["imgpath"] = pm.text(label="Path:", align="left", font="smallBoldLabelFont") uiDict["imgname"] = pm.text(label="File Name:", align="left", font="smallBoldLabelFont") uiDict["imgsize"] = pm.text(label="Image Size:", align="left", font="smallBoldLabelFont") with pm.scrollLayout(scLo, horizontalScrollBarThickness=0) as sl: with pm.columnLayout("commonTabColumn", adjustableColumn=True, width=400) as ctc: with pm.frameLayout(label="File Output", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict["fileNamePrefixField"] = pm.textFieldGrp( label="File Name Prefix:", cc=self.updateFileNamePrefix ) pm.connectControl( uiDict["fileNamePrefixField"], pm.SCENE.defaultRenderGlobals.imageFilePrefix, index=2 ) pm.attrEnumOptionMenuGrp( "imageMenuMayaSW", label="Image Format:", attribute=self.renderNode.imageFormat ) formats = self.renderNode.imageFormat.getEnums().keys() if "EXR" in formats: with pm.columnLayout("exrOptionsLayout", adjustableColumn=True, width=400) as uiDict[ "exrOptionsLayout" ]: self.addRenderGlobalsUIElement( attName="exrDataTypeHalf", uiType="bool", displayName="Half Float", default="false", uiDict={}, ) self.addRenderGlobalsUIElement( attName="exrMergeChannels", uiType="bool", displayName="Merge passes", default="true", uiDict={}, ) uiDict["imageNumbering"] = pm.optionMenuGrp( label="Frame/Animation ext:", changeCommand=self.setFrameNumbering ) for value in ["name.ext", "name.#.ext"]: pm.menuItem(value) if self.defaultGlobals.animation.get(): uiDict["imageNumbering"].setSelect(2) self.addRenderDefaultGlobalsUIElement( attName="extensionPadding", uiType="int", displayName="Frame Padding:", uiDict=uiDict ) with pm.frameLayout(label="Frame Range", collapsable=True, collapse=False) as frameRangeLayout: uiDict["frameRangeLayout"] = frameRangeLayout with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName="startFrame", uiType="float", displayName="Start Frame:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="endFrame", uiType="float", displayName="End Frame:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="byFrameStep", uiType="float", displayName="By Frame:", uiDict=uiDict ) with pm.frameLayout(label="Renderable Cameras", collapsable=True, collapse=False) as uiDict[ "camerasFrame" ]: self.createCamerasUI(uiDict) with pm.frameLayout(label="Image Size", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict["imageSizePresets"] = pm.optionMenuGrp(label="Presets:", changeCommand=self.setImageSize) for imgFormat in self.imageFormatData: pm.menuItem(imgFormat[0]) self.addRenderDefaultResGlobalsUIElement( attName="aspectLock", uiType="bool", displayName="Maintain aspect ratio", uiDict=uiDict ) self.addRenderDefaultResGlobalsUIElement( attName="width", uiType="int", displayName="Width:", uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "width"), ) self.addRenderDefaultResGlobalsUIElement( attName="height", uiType="int", displayName="Height:", uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "height"), ) self.addRenderDefaultResGlobalsUIElement( attName="deviceAspectRatio", uiType="float", displayName="Device Aspect:", uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "devAsp"), ) with pm.frameLayout(label="Render Scripts", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName="preMel", uiType="string", displayName="Pre Render Mel:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="postMel", uiType="string", displayName="Post Render Mel:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="preRenderLayerMel", uiType="string", displayName="Pre Layer Mel:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="postRenderLayerMel", uiType="string", displayName="Post Layer Mel:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="preRenderMel", uiType="string", displayName="Pre Frame Mel:", uiDict=uiDict ) self.addRenderDefaultGlobalsUIElement( attName="postRenderMel", uiType="string", displayName="Post Frame Mel:", uiDict=uiDict ) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout( parentForm, edit=True, attachForm=[ (clo, "right", 0), (clo, "left", 0), (clo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0), ], attachControl=[(scLo, "top", 0, clo)], ) self.OpenMayaCommonGlobalsUpdateTab() self.updateExrUI() self.updateImageSize(["width"]) self.updateFileNamePrefix() pm.scriptJob(attributeChange=(self.renderNode.imageFormat, self.updateExrUI), parent=parentForm) defrw = pm.SCENE.defaultResolution.width defrh = pm.SCENE.defaultResolution.height defrd = pm.SCENE.defaultResolution.deviceAspectRatio pm.scriptJob(attributeChange=(defrw, pm.Callback(self.updateImageSize, ["width"])), runOnce=True) pm.scriptJob(attributeChange=(defrh, pm.Callback(self.updateImageSize, ["height"])), runOnce=True) pm.scriptJob(attributeChange=(defrd, pm.Callback(self.updateImageSize, ["devAsp"])), runOnce=True) pm.scriptJob(event=("SelectionChanged", self.selectionChangedEvent))
def OpenMayaCommonGlobalsCreateTab(self): log.debug("OpenMayaCommonGlobalsCreateTab()") scLo = "scrollLayout" parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict clo = "clo" with pm.frameLayout(clo, labelVisible=False, collapsable=False, mw=8, mh=5, borderVisible=False): with pm.columnLayout(adj=True): uiDict['imgpath'] = pm.text(label="Path:", align="left", font="smallBoldLabelFont") uiDict['imgname'] = pm.text(label="File Name:", align="left", font="smallBoldLabelFont") uiDict['imgsize'] = pm.text(label="Image Size:", align="left", font="smallBoldLabelFont") with pm.scrollLayout(scLo, horizontalScrollBarThickness=0) as sl: print "Scroll layout", sl with pm.columnLayout("commonTabColumn", adjustableColumn=True, width=400) as ctc: print "common", ctc with pm.frameLayout(label="File Output", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): pm.textFieldGrp(label="File Name Prefix:") pm.attrEnumOptionMenuGrp( "imageMenuMayaSW", label="Image Format:", attribute=self.renderNode.imageFormat) uiDict['imageNumbering'] = pm.optionMenuGrp( label="Frame/Animation ext:", changeCommand=self.setFrameNumbering) for value in ["name.ext", "name.#.ext"]: pm.menuItem(value) if self.defaultGlobals.animation.get(): uiDict['imageNumbering'].setSelect(2) self.addRenderDefaultGlobalsUIElement( attName='extensionPadding', uiType='int', displayName='Frame Padding:', uiDict=uiDict) with pm.frameLayout(label="Frame Range", collapsable=True, collapse=False) as frameRangeLayout: uiDict['frameRangeLayout'] = frameRangeLayout with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName='startFrame', uiType='float', displayName='Start Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='endFrame', uiType='float', displayName='End Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='byFrame', uiType='float', displayName='By Frame:', uiDict=uiDict) with pm.frameLayout(label="Renderable Cameras", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): for cam in pm.ls(type="camera"): pm.checkBoxGrp(label=cam.name(), value1=cam.renderable.get(), cc=pm.Callback( self.switchCamRenderable, cam)) with pm.frameLayout(label="Image Size", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict['imageSizePresets'] = pm.optionMenuGrp( label="Presets:", changeCommand=self.setImageSize) for imgFormat in self.imageFormatData: pm.menuItem(imgFormat[0]) #uiDict['imageSizePresets'].setSelect(12) self.addRenderDefaultResGlobalsUIElement( attName='aspectLock', uiType='bool', displayName='Maintain aspect ratio', uiDict=uiDict) self.addRenderDefaultResGlobalsUIElement( attName='width', uiType='int', displayName='Width:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "width")) self.addRenderDefaultResGlobalsUIElement( attName='height', uiType='int', displayName='Height:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "height")) self.addRenderDefaultResGlobalsUIElement( attName='deviceAspectRatio', uiType='float', displayName='Device Aspect:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "devAsp")) #self.addRenderDefaultResGlobalsUIElement(attName='pixelAspect', uiType='float', displayName='Pixel Aspect:', uiDict=uiDict, callback=self.updateImageSize) with pm.frameLayout(label="Render Scripts", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName='preMel', uiType='string', displayName='Pre Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postMel', uiType='string', displayName='Post Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='preRenderLayerMel', uiType='string', displayName='Pre Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postRenderLayerMel', uiType='string', displayName='Post Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='preRenderMel', uiType='string', displayName='Pre Frame Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postRenderMel', uiType='string', displayName='Post Frame Mel:', uiDict=uiDict) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[(clo, "right", 0), (clo, "left", 0), (clo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0)], attachControl=[(scLo, "top", 0, clo)]) #self.setImageSize("HD_540") # set default self.OpenMayaCommonGlobalsUpdateTab()
def initialize_moduleSettings(self): """ Places all UI widgets in the Modules Options Layout """ button_width = self.moduleOptionsWidth / 2 - 12 button_height = 28 module_distance = (self.moduleLayoutHeight / 2) / 7 self.UIwidgets["moduleOptions_formLayout"] = pm.formLayout( numberOfDivisions=100, parent=self.UIwidgets["modulesOptions_frameLayout"] ) self.UIwidgets["moduleOptions_name_textField"] = pm.textFieldGrp( label="Module Name: ", text="Module Name", parent=self.UIwidgets["moduleOptions_formLayout"], enable=False, changeCommand=self.rename_module, ) self.UIwidgets["moduleOptions_parent_button"] = pm.button( label="Parent Module", width=button_width, height=button_height, parent=self.UIwidgets["moduleOptions_formLayout"], enable=True, command=self.find_reParentModule, ) self.UIwidgets["moduleOptions_group_button"] = pm.button( label="Group Module", width=button_width, height=button_height, parent=self.UIwidgets["moduleOptions_formLayout"], enable=False, ) self.UIwidgets["moduleOptions_mirrorPlane_attrControl"] = pm.attrEnumOptionMenuGrp( l="Mirror Plane: ", ei=[(0, "YZ"), (1, "YX"), (2, "XZ"), (3, "None")], parent=self.UIwidgets["moduleOptions_formLayout"], enable=False, ) self.UIwidgets["moduleOptions_mirrorType_attrControl"] = pm.attrEnumOptionMenuGrp( l="Mirror Type: ", ei=[(0, "Behavior"), (1, "Orientation")], parent=self.UIwidgets["moduleOptions_formLayout"], enable=False, ) self.UIwidgets["moduleOptions_mirror_button"] = pm.button( label="Mirror Module", width=button_width, height=button_height, parent=self.UIwidgets["moduleOptions_formLayout"], enable=False, ) self.UIwidgets["moduleOptions_duplicate_button"] = pm.button( label="Duplicate Module", width=button_width, height=button_height, parent=self.UIwidgets["moduleOptions_formLayout"], enable=False, ) self.UIwidgets["moduleOptions_delete_button"] = pm.button( label="Delete Module", width=button_width, height=button_height, parent=self.UIwidgets["moduleOptions_formLayout"], command=self.delete_module, enable=False, ) pm.textFieldGrp( self.UIwidgets["moduleOptions_name_textField"], edit=True, columnWidth=[(1, 90), (2, self.moduleOptionsWidth - 108)], columnAttach2=["left", "left"], ) pm.attrEnumOptionMenuGrp( self.UIwidgets["moduleOptions_mirrorPlane_attrControl"], edit=True, columnWidth=[(1, 75), (2, 50)], columnAlign2=["left", "left"], columnOffset2=[0, 0], ) pm.attrEnumOptionMenuGrp( self.UIwidgets["moduleOptions_mirrorType_attrControl"], edit=True, columnWidth=[(1, 75), (2, 50)], columnAlign2=["left", "left"], columnOffset2=[0, 0], ) # MODULE NAME TEXT FIELD pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_name_textField"], "top", 28), (self.UIwidgets["moduleOptions_name_textField"], "left", 0), ], ) # PARENT BUTTON pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_parent_button"], "top", module_distance * 2), (self.UIwidgets["moduleOptions_parent_button"], "left", 5), ], ) # GROUP AND UNGROUP BUTTON pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_group_button"], "top", module_distance * 3), (self.UIwidgets["moduleOptions_group_button"], "left", 5), ], ) # MIRROR OPTIONS pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_mirrorPlane_attrControl"], "top", module_distance * 4 + 5), (self.UIwidgets["moduleOptions_mirrorPlane_attrControl"], "left", 5), ], ) pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_mirrorType_attrControl"], "top", module_distance * 4.9), (self.UIwidgets["moduleOptions_mirrorType_attrControl"], "left", 5), ], ) pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_mirror_button"], "top", module_distance * 5.7), (self.UIwidgets["moduleOptions_mirror_button"], "left", 5), ], ) # DUPLICATE BUTTON pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_duplicate_button"], "top", module_distance * 7), (self.UIwidgets["moduleOptions_duplicate_button"], "left", 5), ], ) # DELETE MODULE pm.formLayout( self.UIwidgets["moduleOptions_formLayout"], edit=True, attachForm=[ (self.UIwidgets["moduleOptions_delete_button"], "top", module_distance * 7), (self.UIwidgets["moduleOptions_delete_button"], "right", 5), ], )
def AppleseedRendererCreateTab(self): log.debug("AppleseedRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Pixel Sampler", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): #attr = pm.Attribute(self.renderGlobalsNodeName + ".pixel_renderer") #ui = pm.attrEnumOptionMenuGrp(label="Pixel Sampler", at=self.renderGlobalsNodeName + ".pixel_renderer", ei=self.getEnumList(attr)) self.addRenderGlobalsUIElement(attName = 'pixel_renderer', uiType = 'enum', displayName = 'Pixel Sampler', default='0', uiDict=uiDict, callback=self.AppleseedRendererUpdateTab) self.addRenderGlobalsUIElement(attName='minSamples', uiType='int', displayName='Min Samples', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='maxSamples', uiType='int', displayName='Max Samples', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='maxError', uiType='float', displayName='Max Error', default=False, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='frameRendererPasses', uiType='int', displayName='Passes', uiDict=uiDict) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) self.addRenderGlobalsUIElement(attName='filtersize', uiType='int', displayName='Filter Size', default=False, uiDict=uiDict) with pm.frameLayout(label="Features", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='doMotionBlur', uiType='bool', displayName='Motion Blur', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='doDof', uiType='bool', displayName='Depth Of Field', default=False, uiDict=uiDict) with pm.frameLayout(label="Output", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".bitdepth") ui = pm.attrEnumOptionMenuGrp(label="Bit Depth", at=self.renderGlobalsNodeName + ".bitdepth", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".colorSpace") ui = pm.attrEnumOptionMenuGrp(label="Color Space", at=self.renderGlobalsNodeName + ".colorSpace", ei=self.getEnumList(attr)) ui = pm.checkBoxGrp(label="Clamping:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".clamping", index=2) with pm.frameLayout(label="Lighting Engine", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".lightingEngine") ui = pm.attrEnumOptionMenuGrp(label="Lighting Engine", at=self.renderGlobalsNodeName + ".lightingEngine", ei=self.getEnumList(attr)) with pm.frameLayout(label="Common Settings", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='maxTraceDepth', uiType='int', displayName='Max Trace Depth', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='rr_min_path_length', uiType='float', displayName='RR Min Path Len', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='enable_caustics', uiType='bool', displayName='Enable Caustics', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='enable_ibl', uiType='bool', displayName='Enable IBL', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='enable_dl', uiType='bool', displayName='Enable Direct Light', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='directLightSamples', uiType='int', displayName='Direct Light Samples', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='environmentSamples', uiType='int', displayName='Environment Samples', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='diffuseDepth', uiType='int', displayName='Diffuse Depth', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='glossyDepth', uiType='int', displayName='Glossy Depth', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='max_ray_intensity', uiType='float', displayName='Max Ray Intensity', uiDict=uiDict) uiDict["SPPM Settings"] = pm.frameLayout(label="SPPM Settings", collapsable=True, collapse=False) with uiDict["SPPM Settings"]: with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='sppmAlpha', uiType='float', displayName='Alpha', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='env_photons_per_pass', uiType='int', displayName='Env Photons PP', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='light_photons_per_pass', uiType='int', displayName='Light Photons PP', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='photons_per_pass', uiType='int', displayName='Photons PP', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='max_photons_per_estimate', uiType='int', displayName='Max Photons Per Estimate', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='initial_radius', uiType='float', displayName='Initial Radius', uiDict=uiDict) with pm.frameLayout(label="Renderer", collapsable=True, collapse=True): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='threads', uiType='int', displayName='Threads:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='rendererVerbosity', uiType='int', displayName='Verbosity:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='tilesize', uiType='int', displayName='Tile Size:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='texCacheSize', uiType='int', displayName='Tex Cache Size (kb):', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='assemblySBVH', uiType='bool', displayName='Use SBVH Acc. for mb:', uiDict=uiDict) pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) # pm.scriptJob(attributeChange=[self.renderGlobalsNode.samplingType, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")]) # self.updateEnvironment() self.AppleseedRendererUpdateTab()
def create(self): # Create default render globals node if needed. createGlobalNodes() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) columnWidth = 400 with pm.scrollLayout("appleseedScrollLayout", horizontalScrollBarThickness=0): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): with pm.frameLayout(label="Sampling", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self.__addControl(ui=pm.intFieldGrp( label="Pixel Samples", numberOfFields=1), attrName="samples") self.__addControl(ui=pm.intFieldGrp( label="Render Passes", numberOfFields=1), attrName="passes") self.__addControl(ui=pm.intFieldGrp(label="Tile Size", numberOfFields=1), attrName="tileSize") with pm.frameLayout(label="Shading", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): attr = pm.Attribute( "appleseedRenderGlobals.diagnostics") menuItems = [ (i, v) for i, v in enumerate(attr.getEnums().keys()) ] self.__addControl(ui=pm.attrEnumOptionMenuGrp( label="Override Shaders", enumeratedItem=menuItems), attrName="diagnostics") with pm.frameLayout(label="Lighting", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): attr = pm.Attribute( "appleseedRenderGlobals.lightingEngine") menuItems = [ (i, v) for i, v in enumerate(attr.getEnums().keys()) ] self.__addControl(ui=pm.attrEnumOptionMenuGrp( label="Lighting Engine", enumeratedItem=menuItems), attrName="lightingEngine") with pm.frameLayout(label="Path Tracing", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self.__addControl(ui=pm.checkBoxGrp( label="Limit Bounces", changeCommand=self.__limitBouncesChanged), attrName="limitBounces") limitBounces = mc.getAttr( "appleseedRenderGlobals.limitBounces") self.__addControl(ui=pm.intFieldGrp( label="Global Bounces", numberOfFields=1, enable=limitBounces), attrName="bounces") self.__addControl(ui=pm.intFieldGrp( label="Diffuse Bounces", numberOfFields=1, enable=limitBounces), attrName="diffuseBounces") self.__addControl(ui=pm.intFieldGrp( label="Glossy Bounces", numberOfFields=1, enable=limitBounces), attrName="glossyBounces") self.__addControl(ui=pm.intFieldGrp( label="Specular Bounces", numberOfFields=1, enable=limitBounces), attrName="specularBounces") self.__addControl(ui=pm.floatFieldGrp( label="Light Samples", numberOfFields=1), attrName="lightSamples") self.__addControl(ui=pm.floatFieldGrp( label="Environment Samples", numberOfFields=1), attrName="envSamples") self.__addControl( ui=pm.checkBoxGrp(label="Caustics"), attrName="caustics") self.__addControl(ui=pm.floatFieldGrp( label="Max Ray Intensity", numberOfFields=1), attrName="maxRayIntensity") with pm.frameLayout(label="Environment", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): with pm.rowLayout("appleseedRowLayout", nc=3): pm.text("Environment Light") ui = pm.optionMenu( changeCommand=self.__environmentLightSelected) pm.menuItem(label="<none>") for envLight in g_environmentLightsList: pm.menuItem(label=envLight) self.__uis["envLight"] = ui logger.debug( "Created globals env light menu, name = %s" % ui) self.__addControl( ui=pm.checkBoxGrp(label="Background Emits Light"), attrName="bgLight") with pm.frameLayout(label="Motion Blur", collapsable=True, collapse=True): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self.__addControl(ui=pm.checkBoxGrp( label="Motion Blur", changeCommand=self.__motionBlurChanged), attrName="motionBlur") enableMotionBlur = mc.getAttr( "appleseedRenderGlobals.motionBlur") self.__addControl(ui=pm.intFieldGrp( label="Camera Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbCameraSamples") self.__addControl(ui=pm.intFieldGrp( label="Transformation Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbTransformSamples") self.__addControl(ui=pm.intFieldGrp( label="Deformation Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbDeformSamples") self.__addControl(ui=pm.floatFieldGrp( label="Shutter Open", numberOfFields=1, enable=enableMotionBlur), attrName="shutterOpen") self.__addControl(ui=pm.floatFieldGrp( label="Shutter Close", numberOfFields=1, enable=enableMotionBlur), attrName="shutterClose") with pm.frameLayout(label="System", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self.__addControl(ui=pm.intFieldGrp(label="Threads", numberOfFields=1), attrName="threads") pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[("appleseedScrollLayout", "top", 0), ("appleseedScrollLayout", "bottom", 0), ("appleseedScrollLayout", "left", 0), ("appleseedScrollLayout", "right", 0)]) logger.debug("Created appleseed render global main tab") # Update the newly created tab. self.update()
def AppleseedEnvironmentCreateTab(self): log.debug("AppleseedEnvironmentCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "AOScrollLayout" envDict = {} self.rendererTabUiDict['environment'] = envDict uiDict = envDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Environment Lighting", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".environmentType") envDict['environmentType'] = pm.attrEnumOptionMenuGrp(label="Environemnt Type", at=self.renderGlobalsNodeName + ".environmentType", ei=self.getEnumList(attr)) with pm.frameLayout(label="Environment Colors", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.floatFieldGrp(label="Environemnt Intensity:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".environmentIntensity", index=2) envDict['environmentColor'] = pm.attrColorSliderGrp(label="Environment Color", at=self.renderGlobalsNodeName + ".environmentColor") envDict['gradientHorizon'] = pm.attrColorSliderGrp(label="Gradient Horizon", at=self.renderGlobalsNodeName + ".gradientHorizon") envDict['gradientZenit'] = pm.attrColorSliderGrp(label="Gradient Zenit", at=self.renderGlobalsNodeName + ".gradientZenit") envDict['environmentMap'] = pm.attrColorSliderGrp(label="Environment Map", at=self.renderGlobalsNodeName + ".environmentMap") self.addRenderGlobalsUIElement(attName='latlongHoShift', uiType='float', displayName='LatLong Horiz Shift:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='latlongVeShift', uiType='float', displayName='LatLong Vertical Shift:', uiDict=uiDict) # envDict['latLongHShift'] = pm.floatFieldGrp(label="LatLong Horiz Shift:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['latLongHShift'], self.renderGlobalsNodeName + ".latlongHoShift", index=2) # envDict['latLongVShift'] = pm.floatFieldGrp(label="LatLong Vertical Shift:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['latLongVShift'], self.renderGlobalsNodeName + ".latlongVeShift", index=2) with pm.frameLayout(label="Physical Sky", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".skyModel") envDict['pskModel'] = pm.attrEnumOptionMenuGrp(label="Sky Model", at=self.renderGlobalsNodeName + ".skyModel", ei=self.getEnumList(attr)) pm.separator() envDict['pskUsePhySun'] = pm.checkBoxGrp(label="Use Physical Sun:", value1=False, cc=pm.Callback(self.uiCallback, tab="environment")) pm.connectControl(envDict['pskUsePhySun'], self.renderGlobalsNodeName + ".physicalSun", index=2) envDict['pskPhySun'] = pm.textFieldGrp(label="Sunobject:", text="", editable=False) envDict['pskSunExitMulti'] = pm.floatFieldGrp(label="sunExitance Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSunExitMulti'], self.renderGlobalsNodeName + ".sunExitanceMultiplier", index=2) # pm.connectControl(envDict['pskPhySun'], self.renderGlobalsNodeName + ".physicalSunConnection", index=2) pm.separator() envDict['pskGrAlbedo'] = pm.floatFieldGrp(label="Ground Albedo:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskGrAlbedo'], self.renderGlobalsNodeName + ".ground_albedo", index=2) envDict['pskGrHShit'] = pm.floatFieldGrp(label="Horizon Shift:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskGrHShit'], self.renderGlobalsNodeName + ".horizon_shift", index=2) envDict['pskLumMulti'] = pm.floatFieldGrp(label="Luminance Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskLumMulti'], self.renderGlobalsNodeName + ".luminance_multiplier", index=2) envDict['pskSatMulti'] = pm.floatFieldGrp(label="Saturation Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSatMulti'], self.renderGlobalsNodeName + ".saturation_multiplier", index=2) # envDict['pskSunAzi'] = pm.floatFieldGrp(label="Sun Azimut:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['pskSunAzi'], self.renderGlobalsNodeName + ".sun_phi", index=2) # envDict['pskSunEle'] = pm.floatFieldGrp(label="Sun Elevation:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['pskSunEle'], self.renderGlobalsNodeName + ".sun_theta", index=2) envDict['pskTurb'] = pm.floatFieldGrp(label="Turbidity:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurb'], self.renderGlobalsNodeName + ".turbidity", index=2) envDict['pskTurbMax'] = pm.floatFieldGrp(label="Turbidity Max:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMax'], self.renderGlobalsNodeName + ".turbidity_max", index=2) envDict['pskTurbMin'] = pm.floatFieldGrp(label="Turbidity Min:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMin'], self.renderGlobalsNodeName + ".turbidity_min", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.environmentType, pm.Callback(self.uiCallback, tab="environment")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.skyModel, pm.Callback(self.uiCallback, tab="environment")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.physicalSun, pm.Callback(self.uiCallback, tab="environment")]) self.updateEnvironment()
def UI_refreshAttributes(self): """Display the attributes of the shader that has been selected in the list Keyword arguments: none Return: none """ # Set the current shader we're working on self.selectedShader = self.sListWidgets['list'].getSelectItem()[0] # Remove previous shader attributes self.UI_removeAttributes() # Main layout for shader attributes self.sAttrWidgets['layout'] = pc.columnLayout(parent=self.globalWidgets['sAttrLayout'], cal="left") # Buttons for selecting shader in AA and assign material to current selection self.sAttrWidgets['selectedShaderLayout'] = pc.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 50), (2, 170)], parent=self.sAttrWidgets['layout']) pc.text(l="Selected: ", parent=self.sAttrWidgets['selectedShaderLayout']) pc.textField(enable=False, parent=self.sAttrWidgets['selectedShaderLayout'], text=self.selectedShader) self.sAttrWidgets['miscButtonsLayout'] = pc.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 50), (2, 60), (3, 120)], parent=self.sAttrWidgets['layout']) pc.button(label="Select", parent=self.sAttrWidgets['miscButtonsLayout'], c=self.Maya_selectShader) pc.button(label="Rename", parent=self.sAttrWidgets['miscButtonsLayout'], c=self.Maya_renameShader) pc.button(label="Assign to selection", parent=self.sAttrWidgets['miscButtonsLayout'], c=self.Maya_assignToSelection) self.sAttrWidgets['miscButtonsLayout2'] = pc.rowColumnLayout(nc=2, cw=[(1,150)], parent=self.sAttrWidgets['layout']) pc.button(label="Select objects w/ mat", parent=self.sAttrWidgets['miscButtonsLayout2'], c=self.Maya_selectObjWithMat) # DIFFUSE ################### # Label self.sAttrWidgets['diffuseLabelLayout'] = pc.rowColumnLayout(nc=2, columnAlign=(1, 'center'), columnAttach=(2, 'both', 0), columnWidth=[(1, 60), (2, 150)], parent=self.sAttrWidgets['layout']) pc.text(label='Diffuse ', fn='boldLabelFont', parent=self.sAttrWidgets['diffuseLabelLayout']) pc.separator(height=20, style='in', parent=self.sAttrWidgets['diffuseLabelLayout']) # Controls self.sAttrWidgets['diffuseControlsLayout'] = pc.rowColumnLayout(nc=2, cw=[(1, 200), (2, 30)], parent=self.sAttrWidgets['layout']) pc.attrColorSliderGrp(label="Color", w=200, cw=[(1, 50), (2, 30)], at='%s.color' % self.selectedShader, parent=self.sAttrWidgets['diffuseControlsLayout']) self.dynamicButtons['colorToggle'] = pc.iconTextButton(style='iconOnly', h=20, image1="disableForRendering.png", c=partial(self.Maya_toggleConnection, 'color')) pc.attrFieldSliderGrp(label="Weight", w=200, cw=[(1, 50), (2, 50)], min=0, max=1.0, at='%s.Kd' % self.selectedShader, pre=3, parent=self.sAttrWidgets['diffuseControlsLayout']) pc.text(l="") pc.attrFieldSliderGrp(label="Rough", w=200, cw=[(1, 50), (2, 50)], min=0, max=1.0, at='%s.diffuseRoughness' % self.selectedShader, pre=3, parent=self.sAttrWidgets['diffuseControlsLayout']) pc.text(l="") # SPECULAR ################### # Label self.sAttrWidgets['specularLabelLayout'] = pc.rowColumnLayout(numberOfColumns=2, columnAlign=(1, 'center'), columnAttach=(2, 'both', 0), columnWidth=[(1, 60), (2, 150)], parent=self.sAttrWidgets['layout']) pc.text(label='Specular ', fn='boldLabelFont', parent=self.sAttrWidgets['specularLabelLayout']) pc.separator(height=20, style='in') # Controls self.sAttrWidgets['specularControlsLayout'] = pc.rowColumnLayout(nc=2, cw=[(1, 200), (2, 30)], parent=self.sAttrWidgets['layout']) pc.attrColorSliderGrp(label="Color", w=200, cw=[(1, 50), (2, 30)], at='%s.KsColor' % self.selectedShader, parent=self.sAttrWidgets['specularControlsLayout']) self.dynamicButtons['KsColorToggle'] = pc.iconTextButton(style='iconOnly', h=20, image1="disableForRendering.png", c=partial(self.Maya_toggleConnection, 'KsColor')) pc.attrFieldSliderGrp(label="Weight", w=200, cw=[(1, 50), (2, 50)], pre=3, at='%s.Ks' % self.selectedShader, parent=self.sAttrWidgets['specularControlsLayout']) pc.text(l="") pc.attrEnumOptionMenuGrp(label="BRDF", w=200, cw=[(1, 50)], ei=[(0, 'stretched_phong'), (1, 'ward_duer'), (2, 'cook_torrance')], at='%s.specularBrdf' % self.selectedShader, parent=self.sAttrWidgets['specularControlsLayout']) pc.text(l="") pc.attrFieldSliderGrp(label="Rough", w=200, cw=[(1, 50), (2, 50)], pre=4, at='%s.specularRoughness' % self.selectedShader, parent=self.sAttrWidgets['specularControlsLayout']) self.dynamicButtons['specularRoughnessToggle'] = pc.iconTextButton(style='iconOnly', h=20, image1="disableForRendering.png", c=partial(self.Maya_toggleConnection, 'specularRoughness')) pc.attrEnumOptionMenuGrp(label="Fresnel", w=200, cw=[(1, 50)], ei=[(0, 'No'), (1, 'Yes')], at='%s.specularFresnel' % self.selectedShader, parent=self.sAttrWidgets['specularControlsLayout']) pc.text(l="") pc.attrFieldSliderGrp(label="% at N", w=200, cw=[(1, 50), (2, 50)], pre=3, at='%s.Ksn' % self.selectedShader, parent=self.sAttrWidgets['specularControlsLayout']) self.dynamicButtons['reflectance'] = pc.iconTextButton(style='iconOnly', h=20, image1="calculator.png", c=self.Maya_calculateReflectance) # BUMP MAPPING ################### # Label self.sAttrWidgets['bumpLabelLayout'] = pc.rowColumnLayout(numberOfColumns=2, columnAlign=(1, 'center'), columnAttach=(2, 'both', 0), columnWidth=[(1, 60), (2, 150)], parent=self.sAttrWidgets['layout']) pc.text(label='Bump ', fn='boldLabelFont', parent=self.sAttrWidgets['bumpLabelLayout']) pc.separator(height=20, style='in') # Controls self.sAttrWidgets['bumpControlsLayout'] = pc.rowColumnLayout(nc=2, cw=[(1, 200), (2, 30)], columnAlign=[(1,'right')], parent=self.sAttrWidgets['layout']) pc.attrNavigationControlGrp(label="Map", cw=[(1, 50), (2, 120)], at='%s.normalCamera' % self.selectedShader, parent=self.sAttrWidgets['bumpControlsLayout']) self.dynamicButtons['normalCameraToggle'] = pc.iconTextButton(style='iconOnly', h=20, image1="disableForRendering.png", c=partial(self.Maya_toggleConnection, 'normalCamera')) pc.button(l='Select bump node', p=self.sAttrWidgets['bumpControlsLayout'], w=50, c=self.Maya_selectBumpNode) # Refresh connection state icons self.UI_refreshIcons()
def OpenMayaCommonGlobalsCreateTab(self): scLo = "scrollLayout" parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict clo = "clo" with pm.frameLayout(clo, labelVisible=False, collapsable=False, mw=8, mh=5, borderVisible=False): with pm.columnLayout(adj=True): uiDict['imgpath'] = pm.text(label="Path:", align="left", font="smallBoldLabelFont") uiDict['imgname'] = pm.text(label="File Name:", align="left", font="smallBoldLabelFont") uiDict['imgsize'] = pm.text(label="Image Size:", align="left", font="smallBoldLabelFont") with pm.scrollLayout(scLo, horizontalScrollBarThickness=0) as sl: with pm.columnLayout("commonTabColumn", adjustableColumn=True, width=400) as ctc: with pm.frameLayout(label="File Output", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict['fileNamePrefixField'] = pm.textFieldGrp( label="File Name Prefix:", cc=self.updateFileNamePrefix) pm.connectControl( uiDict['fileNamePrefixField'], pm.SCENE.defaultRenderGlobals.imageFilePrefix, index=2) pm.attrEnumOptionMenuGrp( "imageMenuMayaSW", label="Image Format:", attribute=self.renderNode.imageFormat) formats = self.renderNode.imageFormat.getEnums().keys() if "EXR" in formats: with pm.columnLayout( "exrOptionsLayout", adjustableColumn=True, width=400) as uiDict['exrOptionsLayout']: self.addRenderGlobalsUIElement( attName='exrDataTypeHalf', uiType='bool', displayName='Half Float', default='false', uiDict={}) self.addRenderGlobalsUIElement( attName='exrMergeChannels', uiType='bool', displayName='Merge passes', default='true', uiDict={}) uiDict['imageNumbering'] = pm.optionMenuGrp( label="Frame/Animation ext:", changeCommand=self.setFrameNumbering) for value in ["name.ext", "name.#.ext"]: pm.menuItem(value) if self.defaultGlobals.animation.get(): uiDict['imageNumbering'].setSelect(2) self.addRenderDefaultGlobalsUIElement( attName='extensionPadding', uiType='int', displayName='Frame Padding:', uiDict=uiDict) with pm.frameLayout(label="Frame Range", collapsable=True, collapse=False) as frameRangeLayout: uiDict['frameRangeLayout'] = frameRangeLayout with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName='startFrame', uiType='float', displayName='Start Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='endFrame', uiType='float', displayName='End Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='byFrameStep', uiType='float', displayName='By Frame:', uiDict=uiDict) with pm.frameLayout(label="Renderable Cameras", collapsable=True, collapse=False) as uiDict['camerasFrame']: self.createCamerasUI(uiDict) with pm.frameLayout(label="Image Size", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict['imageSizePresets'] = pm.optionMenuGrp( label="Presets:", changeCommand=self.setImageSize) for imgFormat in self.imageFormatData: pm.menuItem(imgFormat[0]) self.addRenderDefaultResGlobalsUIElement( attName='aspectLock', uiType='bool', displayName='Maintain aspect ratio', uiDict=uiDict) self.addRenderDefaultResGlobalsUIElement( attName='width', uiType='int', displayName='Width:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "width")) self.addRenderDefaultResGlobalsUIElement( attName='height', uiType='int', displayName='Height:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "height")) self.addRenderDefaultResGlobalsUIElement( attName='deviceAspectRatio', uiType='float', displayName='Device Aspect:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "devAsp")) with pm.frameLayout(label="Render Scripts", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName='preMel', uiType='string', displayName='Pre Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postMel', uiType='string', displayName='Post Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='preRenderLayerMel', uiType='string', displayName='Pre Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postRenderLayerMel', uiType='string', displayName='Post Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='preRenderMel', uiType='string', displayName='Pre Frame Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postRenderMel', uiType='string', displayName='Post Frame Mel:', uiDict=uiDict) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[(clo, "right", 0), (clo, "left", 0), (clo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0)], attachControl=[(scLo, "top", 0, clo)]) self.OpenMayaCommonGlobalsUpdateTab() self.updateExrUI() self.updateImageSize(["width"]) self.updateFileNamePrefix() pm.scriptJob(attributeChange=(self.renderNode.imageFormat, self.updateExrUI), parent=parentForm) defrw = pm.SCENE.defaultResolution.width defrh = pm.SCENE.defaultResolution.height defrd = pm.SCENE.defaultResolution.deviceAspectRatio pm.scriptJob(attributeChange=(defrw, pm.Callback(self.updateImageSize, ["width"])), runOnce=True) pm.scriptJob(attributeChange=(defrh, pm.Callback(self.updateImageSize, ["height"])), runOnce=True) pm.scriptJob(attributeChange=(defrd, pm.Callback(self.updateImageSize, ["devAsp"])), runOnce=True) pm.scriptJob(event=("SelectionChanged", self.selectionChangedEvent))