python - Maya 渲染设置问题

标签 python maya renderer

我有两个问题,我不确定这是否可以使用 python 在场景中完成。

我的 Maya 版本未随任何 Mental Ray 一起安装。有时,当我打开文件(随 Mental Ray 安装)时,我不断收到如下错误:

// Warning: file: /apps/Linux64/aw/maya2014/scripts/others/supportRenderers.mel line 77: The renderer "mentalRay" used by this scene, is not currently available. The Maya Software renderer will be used instead. //
// Error: file: /apps/Linux64/aw/maya2014/scripts/others/supportRenderers.mel line 82: setAttr: The attribute 'defaultRenderGlobals.currentRenderer' is locked or connected and cannot be modified. //
// Error: file: /apps/Linux64/aw/maya2014/scripts/others/unifiedRenderGlobalsWindow.mel line 415: The renderer mentalRay is not registered yet. //
// Error: line 1: The renderer mentalRay is not registered yet. // 

我尝试使用以下代码来“纠正”该问题:

list = cmds.listAttr("defaultRenderGlobals", l=True)

for item in list:
    cmds.setAttr("defaultRenderGlobals." + item, l=False)

mel.eval('updateCurrentRendererSel("unifiedRenderGlobalsRendererSelOptionMenu");')
mel.eval('loadPreferredRenderGlobalsPreset("mayaHardware");')

但是如果我尝试打开渲染设置,我会收到另一堆错误

//Error: Object ‘tabForm’ not found.

那么,有什么方法可以在场景中解决这个问题

附截图: enter image description here

最佳答案

注意:请参阅此答案下面的“更新”部分以查找完整的解决方案。

为什么不尝试使用 setAttr 本身解锁并设置 currentRenderer 值。

cmds.setAttr("defaultRenderGlobals.currentRenderer", l=False)    
cmds.setAttr("defaultRenderGlobals.currentRenderer", "mayaHardware", type="string")

您收到错误 //Error: Object ‘tabForm’ not find. 因为渲染设置窗口无法加载,可能是因为未注册 mentalRay。因此,在当前渲染器更改之前,请避免调用以下命令:

mel.eval('updateCurrentRendererSel("unifiedRenderGlobalsRendererSelOptionMenu");')
mel.eval('loadPreferredRenderGlobalsPreset("mayaHardware");')

更新:

从问题的更新和下面的评论中,我们了解到这里的问题是 Maya 在遇到缺少渲染器或渲染设置错误时无法正确构建渲染设置窗口的 UI。这会导致父 UI 组件(例如选项卡和框架)无法构建。因此,当渲染器切换时,渲染设置 UI 会尝试将相应的设置加载到这些选项卡中,但找不到它们并停止。

要解决此问题,我们只需设置所需的渲染设置,完全删除渲染设置窗口的 UI 并重新加载即可。我为此编写了一个快速函数。这将修复它。

import maya.cmds as cmds
import maya.mel as mel


def remake_render_settings_ui(renderer="mayaSoftware"):
    """ Remakes the render settings window """
    # Unlock the render globals' current renderer attribute
    cmds.setAttr("defaultRenderGlobals.currentRenderer", l=False)    

    # Sets the current renderer to given renderer
    cmds.setAttr("defaultRenderGlobals.currentRenderer", renderer, type="string")

    # Deletes the render settings window UI completely
    if cmds.window("unifiedRenderGlobalsWindow", exists=True):
        cmds.deleteUI("unifiedRenderGlobalsWindow")

    # Remake the render settings UI
    mel.eval('unifiedRenderGlobalsWindow;')


if __name__ == "__main__":
    remake_render_settings_ui(renderer="mayaHardware")

警告:如果再次选择有问题的渲染器,这不会阻止 UI 再次丢失。为了防止这种情况,最好 unload渲染器的插件。无论如何,如果再次调用上述方法,窗口应该被修复。

希望这有用。

关于python - Maya 渲染设置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27520717/

相关文章:

java - 如何为 javax.swing.JTable() 重新定义 VerticalTableHeaderCellRenderer() 以垂直写入文本

python - Pandastable 表无法使用向下键自动向下滚动

python - 何时使用静态方法和类方法

python - 在 Maya 中打印动画定位器的 xyz 值

jsf - 了解 SelectItemGroup

java - 在 Axis 上标记当前值 - jfreecharts

python - Mac OS X(雪豹)上的 NI VISA + pyVisa

python - Numpy 中 zeros 函数的性能

python - pandas DataFrame 的插值

python-2.7 - maya python子进程错误