如何学习maya mel语言的经验分享

news2024/12/23 10:58:10

一、前言

总结一下这十几年来学习和使用mel语言的一些经验,供初学朋参考,哈哈。
这里不说深奥理论,只是朴实经历陈述。 其实,早在2003年,最初接触maya时,就已经涉及到mel的学习,当时在大学里接触到一些程序基础,虽然本人不是程序专业的(美术设计类专业)。但是还是对编程比较感兴趣。 特别对于手动输入代码,之后得到神奇反馈这件事很是着迷。哈哈。后来在制作动画时,死肯官方帮助你、mel基础知识。发现,mel确实非常的简单方便,特别是在处理大量繁琐和重复的批量工作时,可以大大提高工作效率。

二、总结一下mel 的特点:

一)、优点:

1、代码简练,使用方便。简单易学,上手迅速。
2、解释类语言,实时勘验结果,调试快速。
3、类C 的语言语法。规范精炼。
4、兼容性好,基本上在所有maya版本上都可以运行。
5、免费资源众多,便于参考学习。由于是解释类的语言,所以源码都是可见的。世界上,拥有不可计数的免费资源可以供大家学习参考。比如业内非常知名的www.creativecrash.com 就是以前的highend3d网提供大量的免费资源。

二)、缺点:

1、执行效率较低,对出处理高密度海量运算,没有优势,比C++开发的api插件效率差10倍;
2、单线程运行,cpu使用率低。现在多核心处理器很普及了,但是mel本身是单线程的这就大大的降低了脚本的执行效率。所以,maya才引入了python,哈哈。当然python的优点还有很多很多,这里就不详述了。
3、保密性差,对于不希望公布源码的开发者来说,mel几乎是完全透明的。这可能也是mel 的最大的魅力。哈哈。
4、mel的功能方面,局限于maya自身的功能,对于视频,音频、网络处理等方面没有有效的解决方案。当然,mel本身并不属于开发类语言,只是属于辅助类工具脚本。

三、好的下面说说我的mel学习经历

我最初其实是在开发一块群体动画插件brick dance时,开始学习mel的,这款插件的功能就是通过目标控制器批量控制群体物体的给类属性产生有秩序的渐变效果的插件。如图:
在这里插入图片描述

后来更名为attract magic,如图, 因为是学工业设计出身,所以在用户体验和UI设计方面花的精力多些。 说道底其实就是兴趣使然,如果不是因为喜欢,相信根本无法坚持下来。这里我为大家推荐一本书。《Maya5编程全攻略》,如下图。本书对于掌握maya的基本原理和将来深入的开发,非常有帮助。
在这里插入图片描述
其实,当初开发插件时,感觉就是一种精神历练,这么说吧,因为当时没有任何的编程经验,经常会犯一些低级错误,比如:语法规范,标点符号、逻辑顺序等等。对于一个几千行代码的脚本来说,真的是一行一行的测试,修改。直到最终把mel 的规范变成自己的本能!这就是一种守规矩的训练,与其他的工作一样,都需要先了解并遵守规则,之后,才能融会贯通,游刃有余。佛法中讲“戒、定、慧”三学,就是先守规矩;之后,就是专一不杂,持久深入就是开窍了,能游刃有余举一反三。哈哈。阿弥陀佛。

说到这里,我想所有编程其实都是一样的。作为一种语言,只有在不断的使用中才能够真正掌握。在这10几年影视工作中,涉及到maya 的各个模块编程,从建模、材质、UV、贴图、动画、渲染、特效。其实,你的工作内容就是你编程的战场。哈哈。这里对于初学者的建议是,首先,你如果要对maya中某个模块编程,一定要对该模块有较深入的使用经验,否则你的程序会被大家骂惨,这里主要涉及到人机交互UI设计和使用流程问题。从用户体验角度来说,你要站在使用者角度,为其提供最大方便。这样才算成功。之后就是不断的接受反馈和修复bug了,打磨迭代了。

这个过程是漫长的。你绝对不要有侥幸的心理。没有一款软件是完美无缺的。所以不要害怕被人骂,没有骂声就没有一个完美的工具诞生了,哈哈!阿弥陀佛。

四、提高和深入

掌握以后,就涉及到提高和深入的问题了。这个给的建议是,从maya官方的scripts目录中的程序,寻找灵感,我们知道,maya中所有可视界面和功能模块,都是通过mel构建的。所以,当你在制作中,希望改善流程或提高效率时,首先要反查maya内部的mel代码,并进行有效记录的过程。之后再组织代码,添加自定义变量和交互界面…

我一般的流程是,首先,在maya中找到解决问题的思路和方法,就是具体的制作步骤。之后,在脚本编辑器中,查看底层代码显示,并反查原始的mel命令源码,之后,就可以进行优化和编写自己的脚本程序了。
在这里插入图片描述
使用的编辑器是EditPlus,一个第三方的脚本开发工具 ,如下图:
在这里插入图片描述
官方提供了针对mel的语言包地址如下:
http://knowledge.autodesk.com/support/maya/downloads/caas/downloads/content/download-install-maya-product-help.html

editplus mel stx 语言支持包 下载地址:链接:http://pan.baidu.com/s/1qWvezZQ 密码:js4j

1)拷贝到editplus目录后,需要在设置中指定相应的文件路径。如下图:
在这里插入图片描述
2)新建自定义mel 脚本类:如下图:
在这里插入图片描述

3)指定解压后的配置文件路径:
在这里插入图片描述
4)打开mel脚本,就可以显示不同的关键字色彩了。该软件有批量查找功能,能够从无数的脚本中,查找程序关键字,这就帮了大忙了。哈哈。我经常使用它来搜索maya自身的程序命令非常的好用!如图:
在这里插入图片描述

五、MEL 与 Python 之间的重要差异

现在用python的人比较多,但作为maya的原生语言,mel还是有很多Python不具有的优势。官方也出了相应的说明:

1) 更改
在 Python 中可以访问使用 MEL runTimeCommand 命令创建的 MEL 命令。例如:
在 MEL 选项卡中:

runTimeCommand -command "sphere -name myName" mySphere;

在 Python 选项卡中

import maya.cmds as cmds 
cmds.mySphere() 

同样,可以使用以下语法创建 Python 运行时命令,并从 Python 中调用这些命令:

import maya.cmds as cmds 
def mySphere(): 	 
     cmds.sphere(name='myName') 
     cmds.runTimeCommand('MyBall', command='mySphere()') 
     cmds.MyBall() 

2)其他差异
在 Python 中不支持 eval 和 evalDeferred Maya 命令。但是,请注意下列事项:
Python 有一个用于对 Python 表达式求值的内置 eval 函数。
Python 具有用于对 MEL 表达式求值的 maya.mel.eval。
evalDeferred 已由 maya.utils.executeDeferred() 取代。
有关详细信息,请参见使用 Python。

MEL 具有它自己的警告和错误消息报告机制,该机制已与 Maya 消息报告集成。这包括命令行上的颜色反馈。Python 附带系统模块,这些模块提供警告和错误报告功能;但是,这些模块未集成到 Maya 中,并且在命令行中不提供颜色反馈。
必须将 Python 中的单位指定为带引号的字符串;例如:

maya.cmds.scale(3, 3, 3, r=True, p=('0cm', '0.5cm', '0cm'))

Python 脚本中的命令标志参数采用一个包含 Python 脚本的字符串(就像 MEL 等效项一样)或一个 Python 可调用对象(如函数)。
例如:

import maya.cmds as cmds 
def defaultButtonPush(*args): 	
    print 'Default was pushed.' 
    cmds.window( width=150 ) 
    cmds.columnLayout( adjustableColumn=True ) 
    cmds.button( label='Default', command=defaultButtonPush ) 
    cmds.button( label='Left', align='left' ) 
    cmds.button( label='Center', align='center' ) 
    cmds.button( label='Right', align='right' ) 
    cmds.showWindow()

MEL 使用不同于 Python 的语法来指定值的范围。在 MEL 中,使用 “*” 来指定值的范围,而不使用 *,例如:

select -r surface1.cv["*"][0]; 

在 Python 中,使用不带引号的 * 指定值的范围。对于上面的示例,在 Python 中则为:

cmds.select( 'surface1.cv[*][0]' , r=True) 

3)返回和回显结果
存在两种方式,MEL 和 Python 在返回和回显结果方面会有差异。一个是与正确的脚本执行相关的,而另一个是表面问题。本节将讨论回显结果和返回结果,有时会混淆它们。

本节主要对熟悉 MEL 但不熟悉 Python 的人员有帮助。

4)返回结果
MEL 在执行脚本时会返回最后执行的语句的结果(如果有)。将值指定给变量和返回结果的过程调用的语句属于返回结果的语句类型。例如,以下代码块将有一个结果,MEL 会将该结果回显到脚本编辑器和命令行消息区域:

if ( $foo == 1 ) $bar = 42; else $bar = 7;

相比之下,在 Python 中指定值的语句不返回结果,尽管 Python 执行该指定。

使用 Python 的语法,只需引用一个变量即可返回其值。MEL 的语法不允许只是编写变量的名称作为一条完整的语句。

在 Python 中可以将上述 MEL 代码片段编写为以下内容。最后一行 (bar) 会返回结果。

if foo == 1: bar = 42 else bar = 7 bar

如果需要在一种语言的上下文中使用在另一种语言中计算的值,那么了解该差异是很重要的。例如,如果希望在 MEL 中使用 Python 值,只需执行以下命令:

$myMELvariable = python ("myPythonVariable");

反之,如果希望在 Python 中使用 MEL 变量,则需要执行类似以下的命令:

import maya.mel myPythonVariable = maya.mel.eval ('global $myMELvariable; $temp=$myMELvariable;' )

可以这样做是因为赋值语句会返回一个结果,该语句是脚本中传递到 eval 命令的最后一条语句。

在 Python 中只能访问全局范围的 MEL 变量。

5)回显结果
MEL 会回显由脚本的最后一条语句返回的结果(如果有),而不管脚本中有多少行。Python 仅回显单条语句的结果。

六、mel学习的意义

1、mel与python 的关系

最后,展望一下学习mel语言的必要性,mel 的全称叫maya embed language,从字面上你就看出,作为maya嵌入式核心语言,它涉及了maya的所有方面,因为maya本身就是mel构建的。python其实是mel命令c++的外部封装。了解mel的用法,对于python的调用其实一样。

2、经验积累效率提升

如果你是一个maya的专业用户,那么建议你一定要掌握它,因为它可以帮你解决很多的核心问题。比如对于复杂制作流程的记录与快速重复操作。有些制作技巧过程很复杂,别人不容易重复模仿,此时,可以编写为工具插件。

还有一些是默认maya命令没有提供的mel内部功能选项,maya默认官方可能只用到了mel命令的部分选项功能, 还有一些隐藏选项功能,没被使用到。

其实,国外的很多工作室效率极高,是因为他们都积累大量的工作经验,和工具插件。

3、模块标准化操作

可以实现技术的普及化标准化,对于团队作战,这是必须解决的问题,如果制作标准不规范,很难被其他流程模块所理解和使用,比如统一的命名规范,统一的文件格式、统一的流程等。

好了就简单说说,一门编程语言的学习,就和普通中文和英语一样,要天天的说和练习,才能不断积累和提高。所以一定要有毅力和恒心。南无阿弥陀佛。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

究竟是什么样的讲解二分查找算法的博客让我写了三小时???

版本说明 当前版本号[20230926]。 版本修改说明20230926初版 目录 文章目录 版本说明目录二分查找基础版算法描述分步演示情况一:能在有序数组找到待查值情况二:不能在有序数组找到待查值 翻译成代码基础版代码(包括测试类)疑惑…

regsvr32 initpki.dll找不到指定模块要怎么解决?教你快速修复initpki.dll文件

当你尝试在 Windows 操作系统中注册 DLL 文件时,可能会遇到错误消息:“regsvr32 initpki.dll找不到指定模块”。它通常是由于一个或多个 DLL 文件缺失或损坏所导致的。这是一个常见的错误,并且可以遇到在 Windows 7、Windows 8 和 Windows 10…

百度实习一面(知识图谱部门)

百度面经(知识图谱部)一面 1.自我介绍 介绍完了,打开共享,对着简历一点一点问 2.ffmpeg在项目中是怎么使用的 回答了ffmpeg在项目中使用的命令,用来干了什么 3.为什么使用toml配置,了解过yml配置吗&am…

【Vue3 源码解析】computed

export function computed<T>(getter: ComputedGetter<T>,debugOptions?: DebuggerOptions ): ComputedRef<T> export function computed<T>(options: WritableComputedOptions<T>,debugOptions?: DebuggerOptions ): WritableComputedRef<…

SPA项目之主页面--动态树右侧内容管理

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.左侧动态树 1.定义组件 ①样式…

【神印王座】悲啸洞穴之物揭晓,圣采儿差点被骗,幸好龙皓晨聪明

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析神印王座。 神印王座动漫现阶段已经出到龙皓晨等人接取新任务深入魔族地界的阶段&#xff0c;而龙皓晨等人接取的任务想必现在大家都知道了&#xff0c;那就是探索魔族地界中的悲啸洞穴。但是大家知道悲啸洞穴里面藏着什么…

智能的障碍:符号化

基于事实与价值叠加的算计与基于事实的计算有着明显的区别。 基于事实的计算是指根据已有的客观事实和数据进行计算和推理。在这种计算中&#xff0c;只考虑和利用与事实相关的信息和数据&#xff0c;目的是得出合理的、基于客观事实的结论。例如&#xff0c;使用数学公式和逻辑…

python实现全局变量共享,一个全局变量在多个文件中使用

因为业务需求要将抓到的数据进行累加统计&#xff0c;而且还要间隔三秒钟将这个数据推送到服务端&#xff0c;所以就要实现一个全局变量来记录这个数据&#xff0c;而且推送服务要每隔三秒钟就推送一次到服务端。之前使用了一个全局文件common.py&#xff0c;里面存储这个变量t…

【CV学习笔记】tensorrtx-yolov5 逐行代码解析

1、前言 TensorRTx(下文简称为trtx)是一个十分流行的利用API来搭建网络结构实现trt加速的开源库&#xff0c;作者提到为什么不用ONNX parser的方式来进行trt加速&#xff0c;而用最底层的API来搭建trt加速的方式有如下原因: Flexible 很容易修改模型的任意一层&#xff0c;删…

渗透测试——信息收集思路

文章目录 信息收集域名与 IPOSINTCDNCDN的作用如何检测是否存在CDN CDN 绕过多地Ping邮件服务器子域名真实IP寻找国外地址请求查找老域名查找关联域名信息泄露/配置文件网站漏洞DNS记录&#xff0c;证书域名历史 搜索引擎语法WHOIS端口对外开放情况Nmap 网站的三种部署模式网站…

chrome extensions mv3通过content scripts注入/获取原网站的window数据

开发插件的都知道插件的content scripts和top window只共享Dom不共享window和其他数据&#xff0c;如果想拿挂载在window的数据还有点难度&#xff0c;下面会通过事件的方式传递cs和top window之间的数据写一个例子 代码 manifest.json 这里只搞了2个js&#xff0c;content.…

DataX - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数

更新服务器上的datax版本后&#xff0c;发现执行以前的任务全都失败&#xff0c;查看日志都有报 com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误&#xff0c;该问题通常是由于DataX安装错误引起&#xff0c;请联系…

ssl证书 阿里的域名,腾讯云的证书

目录 1.腾讯云申请ssl免费证书 2.去阿里云进行解析 3.回到腾讯云 4.nginx的配置 说明&#xff1a;阿里云的免费证书用完了&#xff08;每年可以申请20个&#xff09;&#xff0c;还有个项目要用证书&#xff0c;第三方的证书免费的都是90天的。看了下腾讯云业可以申请免费的…

史上最全的公司各种体系流程图,直接拿走!

大家好&#xff0c;我是老原。 优秀企业和卓越企业的区别在哪里&#xff1f; 两个字&#xff1a;流程。 流程的水平高低在一定程度上也体现了项目经理做项目的能力&#xff0c;一个企业能否持续成功的过程能力。 拥有稳定高效的流程管理体系&#xff0c;项目经理的管理水平…

ABB机器人如何在示教器上查看输入输出以及强制输出DO信号

ABB机器人如何在示教器上查看输入输出以及强制输出DO信号 如下图所示,点击左上角的菜单—选择“输入输出“, 如下图所示,进入输入输出画面后,点击右下角的视图,选择“数字输出“, 如下图所示,此时可以看到所有的DO信号及其当前值, 如下图所示,这里以 Local_IO_0_DO1 为…

AI大模型服务上线,助力企业AI大模型应用落地

在数字时代的浪潮中&#xff0c;人工智能(AI)技术的发展和应用已经深入到我们生活的方方面面。其中&#xff0c;企业AI大模型作为AI技术的重要形式之一&#xff0c;正在成为推动企业创新、提高效率和优化决策的关键力量。为顺应AI大模型的新趋势需求&#xff0c;近日&#xff0…

游戏技术亮点|Aavegotchi 与 GameSwift 建立合作伙伴关系

构建一个优秀的游戏只是成功发布的一部分&#xff0c;让数百万玩家体验这款游戏才是真正的乐趣所在。 这也是为什么我们很高兴宣布与 GameSwift 建立了新的合作伙伴关系&#xff0c;GameSwift 是一款先进的模块化游戏区块链&#xff0c;采用 zkEVM 技术构建&#xff0c;是全球…

【通意千问】大模型GitHub开源工程学习笔记(1)

9月25日&#xff0c;阿里云开源通义千问140亿参数模型Qwen-14B及其对话模型Qwen-14B-Chat,免费可商用。 立马就到了GitHub去fork。 GitHub&#xff1a; GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed b…

解决谷歌Redux DevTools调试React+Typescript项目数据对不上/连接不上问题

上文 ReactTypescript项目环境中搭建并使用redux环境 我们创建了一个redux项目的环境 但是我们用谷歌浏览器插件调试 会发现 要不 匹配的数据有问题 看不到数据 要不 就压根连接不到 而且 我们点击加减号 去改变值 调试工具也没有任何反应 我们终端输入 npm install --save-d…

VSCode安装离线插件

1. 打开 VSCode 插件市场网址 Extensions for the Visual Studio family of product&#xff0c;输入你想要的插件名称&#xff0c;比如这里我想要安装的是 Markdown All in One 插件 2. 点击进入插件主页&#xff0c;点击右侧的 Download Extension 链接&#xff0c;得到下载…