Python 从maya场景文件中获取摄影机或渲染全局对象列表,而无需在maya中打开场景

Python 从maya场景文件中获取摄影机或渲染全局对象列表,而无需在maya中打开场景,python,maya,autodesk,Python,Maya,Autodesk,使用python是否可以读取maya场景文件而无需打开并获取摄影机或渲染全局设置列表,或对其执行某些操作。 我需要这样做,这样如果它们是多个场景文件,我就不必打开每个maya场景,只需从python脚本中调整它,如果有人能演示如何开始rest,我会自己做…这是可能的,可能不太实际。Maya ASCII文件的解析非常简单。一个Maya二进制文件并没有那么多。现在讨论这些问题可能有点为时过早 第一件事。Maya提供了批处理模式,批处理模式不使用完整许可证。它仍然打开完整的Maya环境,但没有GUI。

使用python是否可以读取maya场景文件而无需打开并获取摄影机或渲染全局设置列表,或对其执行某些操作。
我需要这样做,这样如果它们是多个场景文件,我就不必打开每个maya场景,只需从python脚本中调整它,如果有人能演示如何开始rest,我会自己做…

这是可能的,可能不太实际。Maya ASCII文件的解析非常简单。一个Maya二进制文件并没有那么多。现在讨论这些问题可能有点为时过早

第一件事。Maya提供了批处理模式,批处理模式不使用完整许可证。它仍然打开完整的Maya环境,但没有GUI。这是注入脚本的完美平台。它并不能真正满足您不打开Maya的要求,但它满足了所有其他要求。有几种方法可以使用此批处理模式。但主要归结为两种通用方法

方法1,使用mayabatch:mayaXX/bin/目录包含一个名为mayabatch的命令。您只需从cmd/shell批处理文件/shell脚本调用它。这是一种调用现有脚本的极其简单的方法。假设mayabatch位于环境的路径中,而脚本位于Maya脚本路径中。为了简单起见,让我们假设您的脚本如下所示(demo.py):

现在,在windows下为一个文件调用此函数将如下所示:

mayabatch -command "python(""import demo"") " -file filename.ma
在当前文件夹文件中的所有Maya上调用此选项将非常简单:

for %i in (*.ma) do mayabatch -command "python(""import demo"") " -file %i
mac和Linux上的报价规则有点不同,但应该很容易找到。冷藏到您的外壳手册

方法2,使用mayapy和standalone:

现在,您还可以使用mayapy直接调用python脚本。它与mayabtach位于同一目录中。如果在系统路径中包含Maya模块,那么也可以从其他python解释器调用该独立解释器。现在,必须对脚本进行一点更改,以便执行相同的操作(demo_direct.py):

使用以下命令调用此表单命令行:

mayapy demo_driect.py
这两种方法都不能加载Mayas图形用户界面。因此,您不能调用playblast等东西,因为它们依赖于GUI,因此需要完整的Maya许可证。没有任何东西表明您不能在GUI中执行与上述类似的加载循环


然后,对于没有实际加载Maya的方法。这有点棘手。这样做并不一定值得,因为批处理节点非常快,因为它们不会在负载上完成所有操作。为帧范围解析Maya ASCII文件的示例脚本。你可能会发现它很有用。见下文。对于Maya二进制文件,中有一个python模块,可帮助您读取Maya二进制块。不幸的是,它对理解数据没有任何作用。

我不能使用第一种方法,因为我要读取的是场景文件以及“渲染全局”(render globals)中的开始帧和结束帧,但就第二种方法而言,假设我通过cmds.ls获取所有形状(shapes=True)如何将我获得的形状列表附加到QComboBox?@san,您可以使用第一种方法。我只是演示了如何启动许多脚本,因为您的脚本并不是非常具体地描述了要执行的操作,因此我假设您知道如何编写maya脚本。显然,如果要列出所有相机,您需要将print cmd.ls()更改为print cmd.ls(type='camera')。至于QComboBox,那不是你要的。当您要求时,请尽量使其与您想要的内容保持一致,不要用许多您不知道的东西装饰它。导入子流程subprocess.call()导入操作系统导入maya.standalone导入maya.cmds as cmds fileToOpen=“I:/scenes/san_telus\u pan_v009.ma”def getCams(phileToOpen):maya.standalone.initialize(name='python')cmds.file(phileToOpen,force=True,open=True)cams=cmds.ls(type=“camera”)return cams getCams(fileToOpen)我想从[RenderUI.py][1]在readMayaFile.py中执行上述函数,以便在QComboBox[1]中获得凸轮的返回列表:好的,我能拿到这个。只是你已经破坏了stackoverflow的目的。你不应该在这里讨论事情。你应该问一些简洁的问题,这样这个问题就可以作为参考了。Stackoverflow正在尝试构建常见问题解答。因此,如果你想改变一个问题的解决方案,那么你需要改变你的问题以反映你需要的答案。如果你想大体上讨论一些事情,可以去一些论坛。大家都知道,如果你想扩展内容,我会挂在creativecrash.com上,否则就修改你的问题,使之更适合你的问题。忽略子流程行忽略最后一行。然后在主文件中键入import yourPythonFilename,然后在主文件中调用:cameras=yourPythonFilename.getCams('I:/scenes/san\u telus\u pan\u v009.ma')。但是注释字段不适合这种讨论,因为它们不应该发生在这里。
#init maya
import maya.standalone
maya.standalone.initialize( name='python' )
import maya.cmds as cmd
import glob

def func():
    print cmd.ls(shapes=True)

for file in glob.glob('*.m[ab]'):
    cmd.file( file, o=True )
    func()
mayapy demo_driect.py