首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maya呈现设置问题

Maya呈现设置问题
EN

Stack Overflow用户
提问于 2014-12-17 07:55:40
回答 2查看 5.6K关注 0票数 1

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

我的玛雅版本没有安装任何精神射线。有时,当我打开文件(安装在Mental的文件)时,我经常会收到以下错误:

代码语言:javascript
复制
// 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. // 

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

代码语言:javascript
复制
list = cmds.listAttr("defaultRenderGlobals", l=True)

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

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

但是,如果我试图打开呈现设置,我会得到另一堆错误

代码语言:javascript
复制
//Error: Object ‘tabForm’ not found.

所以,有什么办法可以在现场补救吗?

随附的是截图:

EN

回答 2

Stack Overflow用户

发布于 2014-12-17 12:41:02

注:请参阅本答案中的“更新”部分,以找到完整的解决方案。

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

代码语言:javascript
复制
cmds.setAttr("defaultRenderGlobals.currentRenderer", l=False)    
cmds.setAttr("defaultRenderGlobals.currentRenderer", "mayaHardware", type="string")

您获得错误//Error: Object ‘tabForm’ not found.是因为呈现设置窗口加载失败,可能是因为未注册的mentalRay。因此,在更改当前呈现器之前,请避免调用以下内容:

代码语言:javascript
复制
mel.eval('updateCurrentRendererSel("unifiedRenderGlobalsRendererSelOptionMenu");')
mel.eval('loadPreferredRenderGlobalsPreset("mayaHardware");')

更新:

从问题中的更新和下面的注释中,我们了解到这里的问题是,当Maya遇到缺少的呈现器或呈现设置错误时,它无法正确地构造呈现设置窗口的UI。这导致父UI组件,如制表符和框架没有被构建。因此,当呈现器被切换时,呈现设置UI尝试将相应的设置加载到这些选项卡中,但无法找到它们并停止。

为了解决这个问题,我们可以设置我们想要的呈现设置,完全删除呈现设置窗口的UI并重新加载它。我为此写了一个快速的函数。这会解决问题的。

代码语言:javascript
复制
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再次丢失。为了防止这种情况,最好是卸载渲染器的插件。在任何情况下,如果再次调用上述方法,则应修复窗口。

希望这是有用的。

票数 3
EN

Stack Overflow用户

发布于 2014-12-24 03:32:31

在渲染设置中出现了一些问题,因为在安装了的机器中打开包含file射线跟踪的场景文件时,没有file插件

出于某些原因,尽管在场景中的defaultRenderGlobals中解锁并设置了一个呈现器,呈现设置仍将继续出现问题,如线程帖子或kartikg3应答中的注释中提到的那样。

我找到了一个解决办法就是-

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

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

代码语言:javascript
复制
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. //。它可能相应地与场景文件不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27520717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档