mel語言

mel語言

mel是Maya Embedded Language(Maya內置語言)的縮寫,是一種強大的命令和腳本語言,讓你直接控制Maya的特徵、進程和工作流程。

mel能做的

mel有一個很重要的功能是編寫界面,Maya的整個界面是用mel編寫的,Maya中的所有界面元素都可以編寫到你自己的mel程式界面中,你可以用mel跟據自己的習慣定製自己的操作界面。

Maya中的所有的按鈕命令都是通過mel來調用的,你可以記錄並把其中一些命令組合起來,通過一鍵或按鈕來自動執行這一組命令,就像PhotoShop里的Actions一樣。

Maya中的每一步操作都是在執行mel,因此Maya的任何一個功能,能做的任何一項操作,都可以加到你自己的mel程式中。

mel有著和c語言類似的語法,有強大的字元串處理功能,還包含一些較為低層的命令(比如說獲取選擇物體的名稱和獲取點在空間中的坐標值等命令),可以編寫一些Maya中沒有的,較為複雜的功能。

mel不能做的

mel是一種腳本語言,受腳本解釋器(Command Engine)和Maya內置命令的影響,還是有很多局限的。

mel不能使用ActiveX外掛程式。

mel只能根據Maya中已有的命令(dll或mll中註冊過的命令)進行擴展,無法直接調用dll模組中的函式。

我們平常使用的dll或exe程式檔案是經過編譯器最佳化的二進制檔案,命令的執行速度非常快。mel腳本語言是文本,有一個腳本解釋器分析的過程,命令的執行速度較慢,大約要慢20倍。

mel不支持指針,不能對記憶體進行直接操作。這就導致了很多方面的效率超級低下,對記憶體的間接操作可能會使運行速度降低100倍甚至1000倍以上。不過這樣也有一個不容爭辯的好處,就是不會產生記憶體泄漏,保障了Maya的穩定性。

mel不能讀寫二進制檔案。既然mel不支持指針,不支持數據結構,就算能夠讀寫二進制檔案意義也不大。

mel不能編寫程式渲染器、播放器;不能編寫Maya中不存在的界面元素,如TreeView、RichEdit、透明視窗等;不能編寫讀取二進制檔案的程式,如3dmax(*.max)、LightWave(*.lwo,*.lw)等。

有人問過mel能不能編寫病毒問題。答案是肯定的。編寫mel病毒不需要什麼高超的技能,只要通過mel調用dos命令或JavaScript/VBScript命令就行了。編寫病毒是一件損人不利己的事,mel病毒絕對不能代表編寫者的技術高深,只能說明他的素質低劣。mel病毒極其罕見,只聽說國內有人編過,並害了自己人。如果萬一你被mel病毒格式了硬碟或刪除了檔案,可以用EasyRecover之類的程式來恢復,但有一點一定要記住,就是在恢復檔案之前千萬不要對受損的硬碟進行寫操作!包括不能把恢復的數據存到受損的硬碟上!否則再厲害的高手也救不了你。

學Maya一定要學mel嗎

不一定非要學mel。但由於Maya與mel的關係太密切了,Maya的用戶界面就是用mel編寫的,你在Maya中的每一步操作都是在執行mel,你也經常會在表達式里用到mel,或使用別人編寫的外部mel程式,這一切都要求你至少要對mel有一個初步的了解。

可以先學mel再學Maya嗎

不可以。只有先熟悉的Maya的操作後才可以學mel。一般至少學兩個月以上的Maya,才可以學mel。

學mel是否要有編程基礎?是否應該先學C語言再學mel?

有編程基礎的確會對學mel有很大幫助,但這並不是說學mel一定要有編程基礎。C語言和Java語言雖然在語法上與mel很相似,但在編程的思路方面有很大差距,mel更注重代碼的簡潔而非代碼運行的高效率。由於mel是不需要編譯的腳本語言,對一些編程的規範要求不是很嚴格,學習起來會比C或Java更簡單一些。

學mel是否要學好數學?是否要學好圖形學

如果你是學理科的,而且以後打算在3D圖形編程這方面發展,那么學好數學和圖形學是必須的。如果你是搞藝術的,學mel只是為了輔助Maya作圖,那么你就少在數學和圖形學上浪費時間。mel是比較高層的腳本語言,一般都是直接調用Maya中已經編好的算法,你只要熟練掌握Maya的操作就行了。如果你有比較好的圖形學基礎,可能反而會不喜歡使用mel,因為很多優秀的算法無法用mel實現 - mel的速度太慢了。

如何編寫mel

mel是腳本語言,這就意味著你可以用任何文本編輯器來編寫,比如寫字板、記事本等。Maya自帶的編輯器不好用,所以我們一般使用外部編輯器來編寫mel。比較專業的編輯器有:TextPad、UltraEditor、EditPlus等,有了這些編輯器後還要在網上(比如Highend3d)下載一個mel語法加亮檔案,配置好後,才好用。

如何使用mel

mel編輯器單行的mel命令,可以直接在命令行(Command Line)執行,也可以在Window > General Editors > Command Shell執行。

多行的mel代碼,可以在Script Editor中按Ctrl+Enter執行。

shelf

在Shelf中執行mel。把要執行的代碼選中,用滑鼠拖放到Shelf上,Shelf上多了一個mel圖示,點這個圖示,就可以執行你的mel代碼了。

使用textToShelf命令。比如:textToShelf "cube" "polyCube";可以在當前Shelf上建一個polyCube命令的圖示。

使用Shelf Editor,添加、編輯你的mel代碼,或更改圖示。

mel檔案

mel檔案的名字必須取與檔案中的主函式相同的名字。要把mel檔案複製到我的文檔/Maya/2009/scripts目錄中,然後在命令行輸入主函式名就可以執行這個函式命令。

源化腳本(Source Script)

Source Script可以使mel檔案中的代碼或命令立即生效。有幾種方法可以Source Script,比如說可以在命令行執行source yourScript.mel,或用Script Editor的File > Source Script...,或直接把你的mel檔案拖放到Maya的視窗中。

啟動檔案userSetup.mel

要想在Maya每次啟動時都執行某一段代碼,需要把這段代碼加到Maya的啟動檔案userSetup.mel中。

具體方法是在我的文檔/Maya/2009/scripts目錄中新建一個文本檔案並重命名為userSetup.mel,然後把你的代碼加到這個檔案中。如果scripts目錄中已經存在了userSetup.mel,就把你的代碼加到這個檔案的結尾。

其它

也可以通過快捷鍵、選單、Marking Menu、mll外掛程式、外部程式檔案、JavaScript等方法來調用mel。

如何學習mel

學mel最好的參考手冊就是Maya的幫助文檔,遇到問題時,應首先從這些文檔中找答案。我把文檔中的Mel Command Reference部分做成了chm檔案便於查詢,可以點此處下載。

要想提高自己的水平,需要多看別人編寫的mel代碼。<disk>:\\Alias\\Maya6.0\\scripts目錄中存放著所有Maya自帶的mel,這些mel可以隨意抄寫,修改並發布,無著作權限制,是我們學習的範本。另外在Maya官方網站和Highend3d也可以下載到大量有用的mel供我們學習。

什麼是表達式?mel與表達式有什麼關係

mel與表達式的關係,Maya幫助文檔中講得很清楚:

Expressions have a different purpose from MEL commands and MEL scripts. You enter a MEL command to do a single action, for example, to create a sphere.

A MEL script is a list of commands you create to do a sequence of actions, for instance, create a wall-shaped object and apply a brick texture to it.

Because you store a MEL script in a file on disk, you can run a script in different scenes and different work sessions, whether today or next year.

An expression animates one or more attributes over time in a single scene. By default, an expression executes each frame as an animation plays. After you create an expression, it executes whenever you play the animation-including when you play the animation after saving, closing, and reopening the scene.

A MEL command or script is not part of a scene after you execute it. You must execute it again to repeat the action.

補充說明

mel是用戶與Maya內部機制交流的通道。mel不能直接編寫節點和屬性,因此往往要使用表達式才能對物體進行實時控制。

表達式是與動畫不可分割的,表達式與動畫的時間(time或frame)有密切的關係,表達式對動畫的每一幀都要進行計算。

在表達式中可以使用mel,但很多mel用在表達式中是沒有意義的,比如說一般不會把編寫界面的mel用在表達式中。

mel腳本可以用於任何場景。表達式只能用於一個場景,另一個場景即使用到相同的表達式,也要重新創建。

表達式主要是對物體的屬性進行控制,可以用等號對物體的屬性直接取值或賦值,例如:

cone.translateX = 3;

而mel就必須用getAttr或setAttr來做同樣的事情了,例如:

setAttr cone.translateX 3;

什麼是MayaAPI?與mel有什麼關係?

API - Application Programmer Interface(應用程式界面)。也有人稱作SDK,是一種專門給程式設計師使用的界面或接口。

MayaAPI提供了Maya的5個dll檔案。這些dll中包含控制Maya的大量類和函式,我們通過這些類和函式用vc++編寫自己的dll(mll)檔案,這些函式通過Maya的方式(比如用mel命令的形式)來調用。

我們常用到的*.mll外掛程式都是通過MayaAPI編寫的。

MayaAPI比mel更強大,更複雜,效率更高,能做到許多mel做不到的事情,運行速度在mel的十倍以上。MayaAPI的功能主要體現在以下幾點:

編寫mel命令。

執行mel命令。

進行創建物體,選擇、縮放、刪除等基本操作。

編寫manipulator。

編寫contexts(tool)。

編寫屬性節點。

編寫材質節點。

檔案輸入輸出。

編寫獨立的exe控制台程式。

MayaAPI程式因為使用vc++,可以使用MayaAPI,MFC,還有很多SDK,幾乎是無所限制。不過不能改動Maya底層的東西,不能更改Maya的運作方式。

使用MayaAPI,需要有vc++的編程經驗,並具有圖形學基礎。mayamaya

相關詞條

相關搜尋

熱門詞條

聯絡我們