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



python是否可以在不打开和获取相机或渲染全局设置列表的情况下读取maya场景文件,或对其执行一些操作。我需要这个,这样如果它们是多个场景文件,我就不必打开每个maya场景,只需从python脚本中进行调整,如果有人能展示如何开始休息,我将非常感激。。。

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

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

方法1,使用mayabach:mayaXX/bin/目录包含一个名为mayabach的命令。您可以简单地从cmd/shell批处理文件/shellscript调用它。这是调用现有脚本的一种极其简单的方法。假设mayabach位于环境的路径中,并且脚本位于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上的引用规则有点不同,但应该很容易找到。冷藏到你的外壳手册。

方法2,使用mayapy和独立:

现在,您还可以使用mayapy直接调用python脚本。它与mayabtach位于同一目录中。如果在系统路径中包含Maya模块,那么单机版也可以从其他python解释器中调用。现在,脚本必须进行一些更改,以便执行相同的操作(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文件中帧范围的示例脚本。你可能会发现它很有用。请参阅下面的帖子。对于Maya二进制文件,cgKit中有一个python模块,可以帮助您读取Maya二进制块。不幸的是,它对理解数据没有任何作用。

最新更新