使用python可以读取Maya场景文件而无需打开并获取照相机列表或渲染全局设置或对其执行某些操作。
我需要这样做,以便如果它们是多个场景文件,我不必打开每个maya场景,而只需通过python脚本对其进行调整,如果有人可以显示如何开始休息,我将自己动手...

最佳答案

它的可能,可能只是不切实际。解析Maya ASCII文件非常简单。 Maya二进制文件不是很多。讨论这些问题可能为时过早。

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

使用mayabatch的方法1: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和独立方法:

现在,您还可以使用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文件的帧范围。您可能会发现它很有用。请参阅以下post。对于Maya二进制文件,在cgKit中有一个python模块,它将帮助您读取Maya二进制块。不幸的是,它对于理解数据没有任何作用。

关于python - 从Maya场景文件获取相机列表或渲染全局图像,而无需在Maya中打开场景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13757962/

10-12 17:59