當前位置:首頁 » 編程軟體 » mel腳本

mel腳本

發布時間: 2023-07-27 05:08:58

1. 關於mel腳本語言的編寫與使用

ge(Maya內置語言)的縮寫,是一種強大的命令和腳本語言,讓你直接控制Maya的特徵、進程和工作流程。mel能做什麼,不能做什麼?能做的mel有一個很重要的功能是編寫界面,Maya的整個界面是用mel編寫的,Maya中的所有界面元素都可以編寫到你自己的mel程序界面中,你可以用mel跟據自己的習慣定製自己的操作界面。Maya中的所有的按鈕命令都是通過mel來調用的,你可以記錄並把其中一些命令組合起來,通過一鍵或按鈕來自動執行這一組命令,就像PhotoShop里的Actions一樣。Maya中的每一步操作都是在執行mel,因此Maya的任何一個功能,能做的任何一項操作,都可以加到你自己的mel程序中。mel有著和c語言類似的語法,有強大的字元串處理功能,還包含一些較為低層的命令(比如說獲取選擇物體的名稱和獲取點在空間中的坐標值等命令),可以編寫一些Maya中沒有的,較為復雜的功能。不能做的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/5.0/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/5.0/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++的編程經驗,並具有圖形學基礎

2. maya中的mel腳本是什麼意思

mel語言是maya自己的一套編程語言,mel是maya的基礎,是比較偏底層的東西。如果你稍有編程基礎的話,可以很容易掌握它。我們可以看到除了maya的插件(maya內部很多組件也都是以插件形式存在的)以外,所有的操作都可以在script editor窗口中有相應的mel語言與之對應。例如:創建一個常規的polygon球體,打開windows-->General Editors-->Script Editor,可以看到:polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -tx 2 -ch 1;;這句話的意思是創建一個polygon球體(polySphere),其半徑為1(-r 1),x、y軸向的分段皆為20(-sx 20 -sy 20),軸向為Y軸向上(-ax 0 1 0),顯示方式為有鋸齒貼圖(-tx 2),並帶有歷史紀錄(-ch 1)。參見help中的polySphere詞條。

最好的方法還是買書自己學,可以參考《Maya動畫師MEL腳本編程全攻略》(以前看過,很快就能上手)。

附上我以前學習的一些筆記,希望能給你一些幫助:

1.得到所有被選中對象的列表並存入數組:「string $sel[] = `ls -sl`;」
2.在表達式中可以直接用「=」給對象的屬性賦值或取值;而mel中則必須通過getAttr和setAttr來實現,這種方式效率比較低
3.「==」是判斷是否相等;「!=」不等於
4.定義變數:「float $rotation_value;」
5.為對象添加屬性:Window-->Attribute Editor;Attributes-->Add Attribute
6.在數學表達式中的向量:可以對向量中的單個分值賦值,如:$abc.x=3;但是不可以這樣賦值:$abc=<<$abc.x,1,1>>
7.向量運算(Maya中的點都是向量存儲,因此要定位的話向量比較重要):向量相減:代表向量從一個點移到另一個點所需行進的方向和距離,減數指向被減數
8.向量操作:unit(格式化)/unit($vectoer1);mag(長度)/mag($vectoer1);angle(夾角,弧度制,如果想獲得角度將它乘以180/pi,方向為逆時針)/angle($vector1l,$vector2);cross(叉積,與兩個向量正交,即垂直的第三個向量,其長度為:dot運算)/cross($vector1l,$vector2);dot(=mag($vector1)*mag($vector2)*cos(angle($vector1,$vector2)))/($vector1l,$vector2);rot(將一個向量繞著由另一個向量所定義的軸旋轉一定的角度)/rot($vector1,$vector_axis,$degrees)
9.檢測兩個向量平行或垂直:dot(unit($vector1),unit($vector2)),如果=0,那麼垂直;如果=1,那麼平行
10.在mel語言中,不能把屬性值賦給變數,必須用如下格式獲得:$val=`getAttr expression1.time`;
11.連接屬性:connectAttr 屬性1 屬性2
12.創建表達式:express -string "屬性1=值";;適用於mel中對屬性的賦值
13.變數:數組變數/$t={1,2,3};聲明變數/int $t;
14.全局變數:Maya要求在每一個使用全局變數的域中重新聲明該變數,如:
global int $a=1;
proc print_a(){
global int $a;
print($a);
}
print_a();
15.將一個整數轉換為一個浮點數:float(3);;將浮點數轉換為整數:int(3.7),結果為向下取整=3
16.算術比較運算:print(5>6);結果為:0或1
17.運算符:+,-,*,/,%,+=,-=,*=,/=,++,--,&&,||,!
18.取相鄰最大整數:ceil($f);取相鄰最小整數:floor($f)
19.在mel中的向量:不能直接將一個值賦給向量的一個分量,如:$abc.x=3;必須這樣賦值:$abc=<<$abc.x,1,1>>
20.分隔字元串:tokenize "string1" $myarray;得到的結果將是以空白符來拆分字元串,並存入數組中;又:tokenize "string1" "char" $myarray;將得到以char來拆分字元串,並存入數組中
21.數組中所有沒有被賦值的元素默認為0
22.數組的尺寸:size($myarray)
23.如果需要在腳本中使用一個非常的數組,在結束時使用mel中的clear命令清楚該數組:clear $myarray
24.模式選擇:-c標記或不適用標記將選擇創建模式;-q選擇查詢模式;-e選擇編輯模式
如:sphere -q -radius nurbsSphere1 返回半徑
sphere -e -radius 15 nurbsSphere1 修改半徑
25.當希望存儲命令的返回值時,可以在賦值運算的右邊將命令置入反引號(``)中。如:string $coneNodeNames[]=`cone -name testing2`
26.使用eval命令:string $spherecommand="sphere"; string $nodenames[]=eval($spherecommand);表示創建一個球體,將sphere命令的返回值存入$nodenames數組中
27.在腳本中有三種運行mel命令的方法:(一)如果不關心返回值,作為獨立一行的語句獨立運行;(二)如果想將返回值存入一個變數,將其放入反引號中;(三)如果想在字元串中構造命令並執行它,使用eval函數命令。

3. 怎樣在maya中用mel腳本,實現一個點在空間中的運動軌跡

DirectX 11 Shader 節點的屬性,指定了 MayaUberShader 著色器文件。
要使用該著色器,您必須在 Viewport 2.0 的 DirectX 11 環境中工作,並啟用 dx11shader.mll 插件。有關詳細信息。
您可以在 Hypershade 創建欄中找到 DirectX 11 Shader。創建著色器後,會自動載入 MayaUberShader.fx 文件。
dx11Shader.mll 插件可使您在 Maya Viewport 2.0 中載入並查看自己的 HLSL 著色器。使用 Hypershade 創建 DirectX 11 shader 時,會自動連接 MayaUberShader.fxo 文件;但是,您也可以改為載入自定義 HLSL 著色器。此外,<maya directory>\presets\HLSL11\examples\ 中提供了其他示例 HLSL 著色器。

選擇 DirectX 作為渲染引擎(方法 1)
選擇「窗口 > 設置/首選項 > 首選項 > 顯示」(Window > Settings/Preferences > Preferences > Display)並將「渲染引擎」(Rendering engine)設置為「DirectX 11」。

重要信息若要使用 DirectX 渲染引擎,您必須使用 64 位的 Windows 和可兼容 DirectX 11 的顯卡。
在面板菜單中選擇「渲染器 > Viewport 2.0」(Renderer > Viewport 2.0)將工作區切換到 Viewport 2.0。

注意您的工作區平視顯示儀現在應指示 Viewport 2.0 (DirectX 11)。
選擇「窗口 > 設置/首選項 > 插件管理器」(Window > Settings/Preferences > Plug-in Manager)並載入 dx11Shader.mll 插件。
選擇 DirectX 作為渲染引擎(方法 2)
此環境變數將覆蓋互動式和批處理會話的用戶首選項(「窗口 > 設置/首選項 > 首選項 > 顯示」(Window > Settings/Preferences > Preferences > Display))(使用 -hw2 選項)。
將 MAYA_VP2_DEVICE_OVERRIDE 設置為 VirtualDeviceDx11 可在 Viewport 2.0 中渲染時始終使用 DirectX 11。

提示將此環境變數設置為 VirtualDeviceGL 可在 Viewport 2.0 中渲染時始終使用 OpenGL。

注意取消設置該環境變數可再次使用用戶首選項來選擇渲染引擎。
創建 DirectX 著色器
選擇「窗口 > 渲染編輯器 > Hypershade」(Window > Rendering Editors > Hypershade),以打開「Hypershade」窗口。在「創建」(Create)欄中,選擇「Maya > 曲面 > DirectX 11 Shader」(Maya > Surface > DirectX 11 Shader)。
將創建 DirectX 11 Shader,同時自動載入 MayaUberShader.fx。
按 6 以獲得紋理模式,按 7 以使用場景照明。

提示紋理和非紋理模式均受支持,且所有燈光模式(「使用所有燈光」(Use All Lights)、「使用選定燈光」(Use Selected Lights)、「不使用燈光」(Use No Lights)和「使用默認照明」(Use Default Lighting))均受支持。

4. 怎樣把maya的mel腳本插件 添加到工具架上急!!

1、打開腳本編輯器

2、將腳本粘貼進來

3、全選腳本

4、滑鼠中鍵將其拖拽到工具欄上即可

PS:右鍵已經添加好的mel腳本可以編輯屬性

熱點內容
h6二代有哪些隱藏配置 發布:2025-02-06 04:11:09 瀏覽:606
c語言中的void是什麼意思 發布:2025-02-06 04:05:26 瀏覽:233
加密狗是啥 發布:2025-02-06 03:48:03 瀏覽:556
phpcopy文件 發布:2025-02-06 03:41:26 瀏覽:412
系統配置頁面怎麼設置 發布:2025-02-06 03:36:34 瀏覽:699
家庭電腦搭建流媒體伺服器 發布:2025-02-06 03:19:02 瀏覽:346
matlab稀疏矩陣存儲 發布:2025-02-06 03:07:54 瀏覽:840
國際服2b2t伺服器地址 發布:2025-02-06 03:06:28 瀏覽:392
c語言輸出b 發布:2025-02-06 03:06:27 瀏覽:33
普通火車wifi密碼多少 發布:2025-02-06 03:04:20 瀏覽:438