获取相机列表或从maya场景文件渲染全局变量而不在Maya中打开场景

时间:2012-12-07 06:18:51

标签: python maya autodesk

是否可以使用python读取maya场景文件而不打开并获取相机或渲染全局设置列表或对其执行某些操作。 我需要这个,所以如果他们是多个场景文件,我不必打开每个maya场景,只需从python脚本调整它,我真的很感激,如果有人可以展示如何开始休息,我会做自己... < / p>

1 个答案:

答案 0 :(得分:2)

它可能,可能不太实际。 Maya ASCII文件解析起来非常简单。 Maya二进制文件不是那么多。讨论这个问题可能为时过早。

首先要做的事情。 Maya确实提供批处理模式,批处理模式不会耗尽完整许可证。它仍然打开一个完整的Maya环境,但没有GUI。这是注入脚本的完美平台。它并没有真正满足您不打开Maya的要求,但它满足所有其他要求。使用此批处理模式有几种方法。但大多数情况下,归结为两种一般方法。

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

import maya.cmds as cmd

def func():
    print cmd.ls()

# we want this to execute on import
func()

现在在windows下为一个文件调用它看起来如下:

mayabatch -command "python(""import demo"") " -file filename.ma

在当前文件夹文件中通过所有Maya调用它将只是:

for %i in (*.ma) do mayabatch -command "python(""import demo"") " -file %i

引用规则在mac和Linux上有点不同但应该很容易找到。冷藏你的shell手册。

方法2,使用 mayapy 和独立:

现在你也可以用mayapy直接调用python脚本。它位于与mayabtach相同的目录中。如果在系统路径中包含Maya模块,那么也可以从其他python解释器中调用standalone。现在脚本必须稍微改变,所以它做同样的事情(demo_direct.py):

#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

这两种方法都没有加载Mayas图形用户界面。所以你不能像playblast等那样调用它们。因为它们依赖于GUI,因而是完整的Maya许可证。没有什么说你不能像上面那样在GUI中做类似的加载循环。

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