1

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

4

1 回答 1

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 上的引用规则有点不同,但应该很容易找到。冷藏到您的外壳手册。

方法2,使用mayapy和standalone:

现在也可以直接用mayapy调用python脚本了。它与 mayabtach 位于同一目录中。如果您在系统路径中包含 Maya 模块,也可以从其他 python 解释器调用 Tough 独立的。现在必须对脚本进行一些更改,以便它执行相同的操作(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 二进制块。不幸的是,它对理解数据没有任何帮助。

于 2012-12-08T17:36:02.547 回答