【问题标题】:Maya Render Settings ProblemsMaya 渲染设置问题
【发布时间】:2014-12-17 07:55:40
【问题描述】:

我有 2 个问题,我不确定这是否可以在现场使用 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.

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

附上截图:

【问题讨论】:

  • 如果我的回答对您有用,请告诉我。如果它没有分享您得到的确切错误,并且可能是您的渲染设置窗口的屏幕截图。
  • @kartikg3 顺便说一句,当我尝试您的解决方案时,我不再看到// Error: line 1: The renderer mentalRay is not registered yet. // 但是每当我打开渲染设置时,我得到的截图与我粘贴的截图相同我选择了哪个渲染器。话虽如此,我在编辑器中没有看到任何错误或任何错误

标签: python maya renderer


【解决方案1】:

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

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

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

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

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

更新:

从问题中的更新和下面的 cmets 中,我们了解到这里的问题是 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渲染器的插件。无论如何,如果再次调用上述方法,窗口应该是固定的。

希望这是有用的。

【讨论】:

  • 感谢您回复我。当我尝试你的命令时,我遇到了这个问题,每当我尝试打开渲染设置时,请查看我的屏幕截图。因此,这就是我实施 mel 命令的原因。即便如此,在使用我的 mel 命令时,有时当我在渲染之间切换时,它的选项卡/内容不会相应更新,并且它还在编辑器中显示 //Error: Object ‘tabForm’ not found.
  • 您使用的是哪个版本的 Maya,以及使用哪个版本的 Maya 创建您尝试打开的这些场景文件?
  • 我使用的是 Maya 2014 版。我试图打开的场景文件很可能是在 Maya 2012 中创建的(加载有 mentalray),因此这就是我看到此消息的原因 // 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. //
  • 尝试:运行我上面的脚本,然后将文件保存为副本,重新启动maya。然后打开副本。
  • 我稍后会尝试,但是请问是否可以不保存文件并重新启动maya?无法“修复”场景中的所有内容?
【解决方案2】:

在安装了没有 Mental Ray 插件的机器上打开包含 Mental Ray 痕迹的场景文件时,渲染设置中会出现一些问题p>

由于某些原因,尽管在场景中的defaultRenderGlobals 中解锁并设置了渲染器,但渲染设置仍会出现线程帖子或kartikg3 答案中的cmets 中提到的问题。

我找到了一个解决方法-

  • 解锁defaultRenderGlobals
  • 保存上述文件删除任何现有的unifiedRenderGlobalsWindow UI + 一些更多的 mel 命令
  • 重新加载/重新打开场景

在我看来,在场景中执行前 2 个步骤时,它不会纠正“渲染设置”窗口中的问题,除非我通过打开新文件会话关闭当前场景文件或重新打开文件本身...

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

def unlockRenderer(renderer="mayaHardware2"):
    print "Unlocking and resetting current renderer"

    # 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")

def saveFile():
    # Prompts User to resave the file, removing traces of Mental Ray
    mel.eval('SaveSceneAs;')

def reloadScene():
    recentFiles = []
    try:
        recentFiles = cmds.optionVar( query = 'RecentFilesList' )

    except:
        cmds.error("No recent files found!")

    curFile = cmds.file(query =True, loc = True)

    if curFile == "unknown":
        cmds.confirmDialog(title = 'Reload Scene', message = ('Reload Last Opened Scene?\n\n' + recentFiles[len(recentFiles)-1]), button = ['Cancel','OK'], defaultButton = 'OK', cancelButton = 'Cancel', dismissString = 'Cancel' )
        cmds.file( str(recentFiles[len(recentFiles)-1]), force = True, open = True)
        print "Opening Last Recent File - ", recentFiles[len(recentFiles)-1]
    else:
        cmds.confirmDialog(title = 'Reload Scene', message = ('Reload Current Scene?\n'), button = ['Cancel','OK'], defaultButton = 'OK', cancelButton = 'Cancel', dismissString = 'Cancel' )
        curFileLoc = cmds.file(query = True, location = True)
        cmds.file( curFileLoc , force = True, open = True)
        print "Re-Opening current file - ", curFileLoc

def main():
    unlockRenderer(renderer="mayaHardware2")
    saveFile()
    if cmds.window("unifiedRenderGlobalsWindow", exists=True):
        cmds.deleteUI("unifiedRenderGlobalsWindow")
    mel.eval('resetAE()')
    mel.eval('buildNewSceneUI;')
    reloadScene()

main()

注意事项 - 有时,即使重新打开文件,仍会遇到一些错误,例如 #// Error: file: /apps/Linux64/aw/maya2014/scripts/others/unifiedRenderGlobalsWindow.mel line 1074: setParent: Object 'unifiedRenderGlobalsWindow' not found. //。可能因场景文件而异

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多