`
schi
  • 浏览: 205323 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PyMel

    博客分类:
  • maya
阅读更多
什么是PyMel?它是python还是mel?一个新的语言?...
也许你会这样不停的追问,Ok,现在就给你们介绍一下PyMel。
PyMel已经存在挺久的了,已经是1.00版本了,支持maya2008, 2009和2010,是一个开源项目。
其实我也一直都在关注PyMel,为什么到现在才给大家介绍呢?因为我到目前为止都没使用PyMel,但为什么现在又要介绍它呢?因为maya2011已经集成了PyMel,你根本就不需要单独安装,所以我觉得是时候使用PyMel了,也是时候给大家介绍一下了。

PyMelLuma Pictures内部开发的,自从它问世以来的一年内就参与了很多令人映像深刻的电影和游戏项目,如:
  • DreamWorks: 功夫熊猫,怪物史瑞克4,怪兽大战外星人,驯龙高手(How to Train Your Dragon,国内4月下旬上映)
  • Luma Pictures: 勒比海盗3:世界的尽头,哈利·波特与混血王子,X战警前传-金刚狼
  • ImageMovers Digital: 圣诞颂歌(A Christman Carol)

PyMel是一个Maya的Python模块。
PyMel项目的目标是
  • 为Maya创建一个开源的Python模块
  • 修复Maya的Python模块(maya.cmds和maya.mel)的bug和限制
  • 让代码清晰易读
  • 通过类的层次结构和子模块加强代码组织
  • 通过html和内建函数help()来提供文档

我们来看看PyMel和Mel以及MayaPython的区别
string $sel[] = `ls -sl`;
string $shapes[] = `listRelatives -s $sel[0]`;
string $conn[] = `listConnections -s 1 -d 0 $shapes[0]`;
setAttr ( $conn[0] + ".radius") 3;

import maya.cmds as cmds
sel = cmds.ls(sl=1)[0]
shape = cmds.listRelatives(sel,s=1)[0]
conn = cmds.listConnections(shape,s=1,d=0)[0]
cmds. setAttr((conn + ".radius"),3)

from pymel import *
selected()[0].getShape().inputs()[0].radius.set(3)

WO...
对于Mel用户来说可能(应该)根本看不明白,但对于十分熟悉python的用户就再熟悉不过了,或是说python的代码就应该这样写。

PyMel有很多很强大的类,Maya里的每个节点都有一个节点类,如摄像机:
camTrans, cam = camera()  # 创建一个新相机
cam.setFocalLength(100)
fov = cam.getHorizontalFieldOfView()
cam.dolly( -3 )
cam.track(left=10)
cam.addBookmark('new')

一个属性类组织所有的属性命令
s = polySphere()[0]
if s.visibility.isKeyable() and not s.visibility.isLocked():
    s.visibility.set( True )
    s.visibility.lock()
    print s.visibility.type()

操纵文件路径更简单
#backup all mb files in the current scene's directory
#备份所有的mb文件到当前场景所在的文件夹
basedir = sceneName().parent
backupDir = basedir / "backup" #slash op joins paths("/"操作符代表加入路径)
if not backupDir.exists:
    backupDir.mkdir()
for file in basedir.files( '*.mb' ):
    print "backing up: ", file.name
    file.copy( backupDir / (file.namebase + ".old") )


再用长点的代码来对比一下(注释我就先不翻译了,太累了要睡了)
string $objs[] = `ls -type transform`;
for ($x in $objs) {
    print (longNameOf($x)); print "\n";

    // make and break some connections
    connectAttr( $x + ".sx") ($x + ".sy");
    connectAttr( $x + ".sx") ($x + ".sz");
    disconnectAttr( $x + ".sx") ($x + ".sy");
    string $conn[] = `listConnections -s 0 -d 1 -p 1 ($x + ".sx")`;
    for ($inputPlug in $conn)
        disconnectAttr ($x + ".sx") $inputPlug;

    // add and set a string array attribute with the history of this transform's shape
    if ( !`attributeExists "newAt" $x`)
        addAttr -ln newAt -dataType stringArray $x;
    string $shape[] = `listRelatives -s $x`;
    string $history[] = `listHistory $shape[0]`;
    string $elements = "";
    for ($elem in $history)
        $elements += """ + $elem + "" ";
    eval ("setAttr -type stringArray " + $x + ".newAt " + `size $history` + $elements);
    print `getAttr ( $x + ".newAt" )`;

    // get and set some attributes
    setAttr ($x + ".rotate") 1 1 1;
    float $trans[] = `getAttr ($x + ".translate")`;
    float $scale[] = `getAttr ($x + ".scale")`;
    $trans[0] *= $scale[0];
    $trans[1] *= $scale[1];
    $trans[2] *= $scale[2];
    setAttr ($x + ".scale") $trans[0] $trans[1] $trans[2];

    // call some other scripts
    myMelScript( `nodeType $x`, $trans );
}

objs = cmds.ls( type= 'transform')
if objs is not None:                    # returns None when it finds no matches
    for x in objs:
        print mm.eval('longNameOf("%s")' % x)

        # make and break some connections
        cmds.connectAttr(   '%s.sx' % x,  '%s.sy' % x )
        cmds.connectAttr(   '%s.sx' % x,  '%s.sz' % x )
        cmds.disconnectAttr( '%s.sx' % x,  '%s.sy' % x)

        conn = cmds.listConnections( x + ".sx", s=0, d=1, p=1)
        # returns None when it finds no matches
        if conn is not None:
            for inputPlug in conn:
                cmds.disconnectAttr( x + ".sx", inputPlug )

        # add and set a string array attribute with the history of this transform's shape
        if not mm.eval( 'attributeExists "newAt" "%s"' % x):
            cmds.addAttr(  x, ln='newAt', dataType='stringArray')
        shape = cmds.listRelatives( x, s=1 )
        if shape is not None:
            history = cmds.listHistory( shape[0] )
        else:
            history = []
        args = tuple( ['%s.newAt' % x, len(history)] + history )
        cmds.setAttr( *args ,  type= 'stringArray' )

        # get and set some attributes
        cmds.setAttr ( '%s.rotate' % x, 1,  1, 1 )
        scale = cmds.getAttr ( '%s.scale' % x )
        scale = scale[0] # maya packs the previous result in a list for no apparent reason
        trans = list( cmds.getAttr ( '%s.translate' % x )[0] )  # the tuple must be converted to a list for item assignment
        trans[0] *= scale[0]
        trans[1] *= scale[1]
        trans[2] *= scale[2]
        cmds.setAttr ( '%s.scale' % x, trans[0], trans[1], trans[2] )
        mm.eval('myMelScript("%s",{%s,%s,%s})' % (cmds.nodeType(x), trans[0], trans[1], trans[2]) )

from pymel import *                   # safe to import into main namespace
for x in ls( type='transform'):
    print x.longName()                # object oriented design

    # make and break some connections
    x.sx >> x.sy                      # connection operator
    x.sx >> x.sz
    x.sx // x.sy                      # disconnection operator
    x.sx.disconnect()                 # smarter methods -- (automatically disconnects all inputs and outputs when no arg is passed)

    # add and set a string array attribute with the history of this transform's shape
    x.setAttr( 'newAt', x.getShape().history(), force=1 )

    # get and set some attributes
    x.rotate.set( [1,1,1] )
    trans = x.translate.get()
    trans *= x.scale.get()           # vector math
    x.translate.set( trans )         # ability to pass list/vector args
    mel.myMelScript(x.type(), trans) # automatic handling of mel procedures

现在你应该知道为什么那么多nx的公司\工作室都用PyMel了吧,如果你想在Maya里写python脚本,那么PyMel绝对是你最好的选择。
1
0
分享到:
评论

相关推荐

    maya2023最新pymel兼容python2/python3版本下载

    Pymel是Maya中的Python绑定库,它提供了一种更高效、更面向对象的方式来操作Maya,使得开发者能更容易地进行脚本编写和插件开发。在Maya2023中,Pymel对Python2和Python3的兼容性是至关重要的,因为这直接影响到用户...

    Python库 | pymel-1.2.0a8-py2.py3-none-any.whl

    **Python库pymel简介** `pymel`是一个针对Autodesk Maya的强大的Python绑定工具,它提供了对Maya API的全面访问,并扩展了Maya内置的Python接口。`pymel`的主要目标是提高生产力,提供更加Pythonic的方式来操作和...

    PyPI 官网下载 | pymel-1.2.0a8-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:pymel-1.2.0a8-py2.py3-none-any.whl

    pymel:Maya中的Python完成了

    PyMEL使Maya的python脚本按应有的方式工作。 Maya的命令模块是将mel命令直接转换为python命令的方法。 结果是非常笨拙和非Python的语法,没有利用python的优势-特别是一种灵活的,面向对象的设计。 通过将其命令...

    PyMelDocset:用于Dash&Zeal的PyMel 1.0.7文档集

    PyMel是Autodesk Maya中的一个强大的Python绑定库,它提供了对Maya API的高级接口,使得Python编程在Maya环境中变得更加直观和高效。这个文档集专注于PyMel 1.0.7版本,该版本可能包含了一些特定的特性和功能,因此...

    Maya_TD_tools:一些个人 Maya TD 工具研发,包括 PyMEL & MEL

    《Maya TD工具研发:PyMEL与MEL在实践中的应用》 在3D建模和动画领域,Maya是一款广泛使用的强大软件,而Maya的Technical Director(TD)工具则是提升工作效率的关键。本资源“Maya_TD_tools”正是针对Maya TD工具...

    Pymel-开源

    Pymel代表:Eelco Lempsink的Python MP3播放器,是与mp3serverbox(http://www.mp3sb.org)一起使用的完全基于Python的程序。 它本身还不能播放mp3。 它在curses环境(基于文本)中运行。

    maya mel/python编辑器

    此外,还可以通过`cmds`模块访问MEL命令,通过`pyMel`库使MEL和Python脚本互相调用。 7. **学习资源**:学习Maya的MEL和Python编程,可以参考Autodesk官方文档、在线教程、社区论坛如CGTalk、StackExchange等。此外...

    PyMaya-开源

    《PyMaya与PyMel:Python在Maya中的强大应用》 在计算机图形学领域,Autodesk Maya是一款广泛使用的三维建模、动画和渲染软件。它以其强大的功能和灵活的可扩展性深受专业设计师和艺术家的喜爱。而在Maya中,Python...

    Python库 | cnocr-1.2.0-py3-none-any.whl

    python库。 资源全名:cnocr-1.2.0-py3-none-any.whl

    Practical-Maya-Programming-with-Python.pdf.pdf

    2. Maya和PyMEL的深入探索:作者可能会指导读者如何使用Python在Maya中进行对象和数据类型的操作,以及如何利用PyMEL进一步简化和增强Maya的编程接口。这可能包括解释MEL和Python数据类型的差异,以及如何利用PyMEL...

    python游戏编程之旅学习文档

    Python 游戏编程之旅是一份全面的学习资源,旨在引导初学者和有经验的开发者通过Python语言探索游戏开发的世界。这份文档可能涵盖了多个关键知识点,包括基础语法、游戏框架的使用、图形绘制、物理引擎、AI算法以及...

    Maya Python游戏与影视编程指南

    本书涵盖了与Maya相关的Python的主要内容,解答了有关Maya的多个Python实施问题,包括最强大的PyMEL和漂亮的PyQt用户界面。本书内容包括基础知识和更高级的主题,分为3部分,共12章。第1部分为Python和Maya的基础...

    Maya_Python_教程-很难得最新mayapython教程.pdf

    5. **常用模块**:介绍MAYA环境中常用的Python模块,如numpy、pymel等,以及它们在MAYA中的应用。 通过逐步学习这些基础知识,用户将能够逐渐掌握编写MAYA Python脚本的技能。教程中提供的实例和练习将帮助学习者...

    Python库 | pytntprog-1.2.0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:pytntprog-1.2.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | mau-1.2.0-py2.py3-none-any.whl

    《PyPI官网下载:mau-1.2.0-py2.py3-none-any.whl——深入了解Python库的安装与管理》 在Python的世界里,PyPI(Python Package Index)是全球最大的Python软件仓库,它为开发者提供了一个平台来发布、分享和下载...

    PyPI 官网下载 | clipkit-1.2.0-py2.py3-none-any.whl

    《PyPI官网下载的Python库:clipkit-1.2.0-py2.py3-none-any.whl详解》 PyPI(Python Package Index)是Python社区的重要资源库,它为全球Python开发者提供了一个集中发布、查找和安装Python软件包的平台。...

    Python库 | pyplink-1.3.1-py2.py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:pyplink-1.3.1-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | rjm-1.2.0-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:rjm-1.2.0-py2.py3-none-any.whl

    Python库 | pymitv-1.4.0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:pymitv-1.4.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics