def onAddRule(self, *args): # Obtain rule name. okStr = maya.stringTable['y_inputSpaceRulesUI.kColorMgtOK'] cancelStr = maya.stringTable['y_inputSpaceRulesUI.kColorMgtCancel'] result = cmds.promptDialog( title=maya.stringTable['y_inputSpaceRulesUI.kRuleDialogTitle'], message=maya.stringTable['y_inputSpaceRulesUI.kRuleDialogMsg'], button=[okStr, cancelStr], defaultButton=okStr, cancelButton=cancelStr, dismissString=cancelStr) if result != okStr: return text = cmds.promptDialog(query=True, text=True) # Create rule with match all pattern, 'exr' extension, and same color # space as default rule. rules = cmds.colorManagementFileRules(listRules=True) colorSpace = cmds.colorManagementFileRules(rules[0], query=True, colorSpace=True) cmds.colorManagementFileRules(add=text, pattern='*', extension='exr', colorSpace=colorSpace) self.appendRule(FilePathRule(name=text))
def cmConfigChanged(self, *_, **__): """ Color Management Config Changed callback slot. Clear the colorspace comboBox and repopulate it. """ self.colorSpace_comboBox.clear() for cs in static_lib.COLORSPACES(): self.colorSpace_comboBox.addItem(cs) defaultRule = cmds.colorManagementFileRules(lsr=True)[0] self.logic.defaultColorSpace = cmds.colorManagementFileRules( defaultRule, query=True, cs=True)
def onDeleteRule(self, *args): # If selected rule is 0 (default), early out. if self._selectedPos == 0: return # Update data model. cmds.colorManagementFileRules( rm=self._rulesChain[self._selectedPos].name) del self._rulesChain[self._selectedPos] self._selectedPos = min(self._selectedPos, len(self._rulesChain) - 1) self.updateScrollList() self.selectRule(self._selectedPos)
def _initial_scene_operations(self): """ Initial scene configurations, including frame range, frame rate, and resolution """ # Set file naming format to fileName.frameNumber.ext cmds.setAttr("defaultRenderGlobals.animation", True) cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", True) # Set color management default setting to ACEScg try: cmds.colorManagementFileRules("Default", edit=True, colorSpace="ACES - ACEScg") except: cmds.colorManagementFileRules("Default", edit=True, colorSpace="ACEScg") #Set view transform default setting to Rec.709 try: cmds.colorManagementPrefs(edit=True, viewTransformName="Rec.709 (ACES)") except: cmds.colorManagementPrefs(edit=True, viewTransformName="sRGB (ACES)") # Determine current render engine curr_renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer') if curr_renderer == "arnold": # Creates instance of Arnold's defaultSettings node, which is essential # for executing Arnold-specific functions without opening the menu from mtoa.core import createOptions createOptions() # # set file naming convention # cmds.setAttr("defaultRenderGlobals.imageFilePrefix", "<Scene>_<RenderLayer>/<Scene>_<RenderLayer>", type = "string") # set MergeAOVs to True cmds.setAttr('defaultArnoldDriver.mergeAOVs', 1) elif curr_renderer == "vray": cmds.setAttr("vraySettings.animType", 1) cmds.setAttr("vraySettings.imageFormatStr", 5) else: pass
def onDown(self, *args): # Rule 0 can't be moved, and therefore rule 1 can't either. if self._selectedPos <= 1: return # Update data model. cmds.colorManagementFileRules( down=self._rulesChain[self._selectedPos].name) # Take the selected rule, move it down, and rebuild the scroll list. previousRule = self._rulesChain[self._selectedPos - 1] self._rulesChain[self._selectedPos-1] = \ self._rulesChain[self._selectedPos] self._rulesChain[self._selectedPos] = previousRule self.updateScrollList() self.selectRule(self._selectedPos - 1)
def onUp(self, *args): # If last rule selected, early out. if self._selectedPos == (len(self._rulesChain) - 1): return # Update data model. cmds.colorManagementFileRules( up=self._rulesChain[self._selectedPos].name) # Take the selected rule, move it up, and rebuild the scroll list. nextRule = self._rulesChain[self._selectedPos + 1] self._rulesChain[self._selectedPos+1] = \ self._rulesChain[self._selectedPos] self._rulesChain[self._selectedPos] = nextRule self.updateScrollList() self.selectRule(self._selectedPos + 1)
def reapply(): # Get the list of color managed nodes. cmNodes = cmds.colorManagementPrefs(query=True, colorManagedNodes=True) # Avoid warning if mental ray plugin isn't loaded. if cmds.pluginInfo('Mayatomr', query=True, loaded=True): cmNodes = cmNodes + cmds.ls(type='mentalrayIblShape') # Avoid warning if mtoa plugin isn't loaded. if cmds.pluginInfo('mtoa', query=True, loaded=True): cmNodes = cmNodes + cmds.ls(type='aiImage') # Loop over nodes: get each node's file path, evaluate rules, set # the color space. for nodeName in cmNodes: # If ignore file rules is set for that node, don't reapply on it. ignoreColorSpaceFileRules = cmds.getAttr(nodeName + '.ignoreColorSpaceFileRules') if ignoreColorSpaceFileRules: continue TODO('HACK', 'Should not depend on per node type knowledge', None) # We should not need to know the list of file name attribute names # for all types of color managed nodes, as more color managed node # types can be added in the future. # # As of 5-Nov-2014, we know that the colorManagedNodes query # will return two types of nodes: image plane nodes, which have an # image file attribute, and file texture nodes, which have a file # name attribute. # # Additionally, we are relying on identical attribute naming for # the color space across all node types, which is very weak. attrList = cmds.listAttr(nodeName) fileAttrName = 'imageName' if 'imageName' in attrList: fileAttrName = 'imageName' elif 'fileTextureName' in attrList: fileAttrName = 'fileTextureName' elif 'filename' in attrList: # aiImage fileAttrName = 'filename' else: fileAttrName = 'texture' fileName = cmds.getAttr(nodeName + '.' + fileAttrName) colorSpace = cmds.colorManagementFileRules(evaluate=fileName) cmds.setAttr(nodeName + '.colorSpace', colorSpace, type='string')
def __init__(self, name=''): super(ChainRule, self).__init__(name=name) # Initialize our list of rules with a default rule. This will # always be the last rule. The rule list is always appended to, # and is placed in the scroll list in back to front (reverse # iteration) order. self._rulesChain = [] self._rulesChain.append(DefaultRule()) # Fill in UI with existing rules. rules = cmds.colorManagementFileRules(listRules=True) # Default rule already added, skip it. rules.pop(0) self._ocioRulesEnabled = cmds.colorManagementPrefs(query=True, cmConfigFileEnabled=True) \ and cmds.colorManagementPrefs(query=True, ocioRulesEnabled=True) if self._ocioRulesEnabled: self._rulesChain.append(OpaqueRule(rules.pop(0))) else: for rule in rules: self._rulesChain.append(FilePathRule(rule)) self._selectedPos = 0
def setExtension(self, extension): cmds.colorManagementFileRules(self.name, edit=True, extension=extension)
def getExtension(self): return cmds.colorManagementFileRules(self.name, query=True, extension=True)
def getPattern(self): return cmds.colorManagementFileRules(self.name, query=True, pattern=True)
def setPattern(self, pattern): cmds.colorManagementFileRules(self.name, edit=True, pattern=pattern)
def __init__(self): rules = cmds.colorManagementFileRules(listRules=True) super(DefaultRule, self).__init__(rules[0])
def getColorSpace(self): return cmds.colorManagementFileRules(self.name, query=True, colorSpace=True)
def setColorSpace(self, colorSpace): cmds.colorManagementFileRules(self.name, edit=True, colorSpace=colorSpace)