maya的mel腳本
『壹』 maya中mel文件如何使用
使用腳本語言編輯器
本章包括以下內容: 1、打開腳本編輯器;2、打開一個腳本程序;3、把一個MEL腳本程序文件作為源文件 ;
4、保存腳本文字;5、執行一個腳本程序;6、清除狀態信息;7、清除指令輸入;8、響應一個指令;
9、顯示程序中的語句行號;10、顯示堆棧跟蹤。
1、打開腳本編輯器
可以通過選擇Window > General Editors > Script Editor或者點擊Maya窗口右下部的Script Editor圖標打開腳本編輯器。
腳本編輯器提供以下菜單選項:
Open Script--打開腳本程序
Source Script--把一個腳本程序文件作為源文件
Save Selected--保存腳本程序
Execute--執行腳本程序
Clear History--清除歷史
Clear Input--清除輸入
Echo All Commands--返回所有指令的返回值
Show Line Numbers--顯示行號
Show Stack Trace--顯示堆棧跟蹤
編輯命令
下表列出了在腳本編輯器中有效的鍵盤命令。(在表達式編輯器和一些輸入框中它們也是有效的。) 命令 定義 平台
Ctrl+c Copy IRIX、Windows
Ctrl+x Cut IRIX、Windows
Ctrl+v Paste IRIX、Windows
Ctrl+k 刪除到本行末 IRIX
Ctrl+d 刪除下一個字元 IRIX
Ctrl+a 移動游標到行首 IRIX
Ctrl+e 移動游標到行末 IRIX
Ctrl+a 選擇編輯框中的所有文字 Windows
2、打開一個腳本程序
我們可以打開一個腳本程序以便檢查、執行或找出它的問題。打開一個腳本程序時並不執行它。
只是在腳本編輯器的輸入欄里簡單地把它顯示出來。
要執行顯示在腳本編輯器的輸入欄里的一些或者全部腳本程序,可以用滑鼠選擇它,然後按鍵盤的數字Enter鍵。
當你想把一些或者全部內容拖拉到櫃架上並在那裡產生一個圖標時,打開一個腳本程序就是非常有用的。
可以點擊該圖標執行這個程序。
為了打開一個腳本文件:
1--從腳本語言編輯器中選擇File > Open Script。出現一個文件瀏覽器。
2--選擇要打開的腳本文件。
把一個腳本程序作為源文件
把一個MEL腳本程序文件作為源文件,執行所有的MEL指令並聲明包含在該腳本程序文件中的所有的全局過程。
如果你在一個腳本程序文件中修改了一個程序,Maya 並不把這個改變登記給該程序,直到你把它的程序文件作為源文件。
這是因為Maya把執行了的程序保存到了存儲器中。當你把一個腳本程序文件作為源文件時,Maya再次讀該腳本程序文件里的那個程序。
為了把一個腳本程序作為源文件:
1--從腳本語言編輯器中選擇File > Open Script。出現一個文件瀏覽器。
2--選擇要打開的腳本文件。
把一個腳本程序作為源文件之後,該文件里的所有MEL指令會執行。該腳本程序中的所有全局過程會被聲明,但並不被執行。
MEL指令是按照它們出現在文件中的順序執行的,並且應當沒有錯誤。如果產生了一個錯誤,執行會中斷並不再裝載更多的程序。
當你把一個MEL腳本程序作為源文件之後,不聲明或者不執行局部過程。
但是,如果你是通過在腳本編輯器或指令行里輸入而聲明了一個局部過程,該過程會被聲明為全局過程,你可以在任何時候執行它。
執行一個程序可以通過執行一個MEL指令實現。當你想把一個腳本程序作為源文件,並具有執行該文件中的程序的作用時,這是很有用的。
為了這樣做,要首先聲明該程序,然後聲明通過一個文件瀏覽器執行該程序的指令。
4、保存腳本文字
使用File > Save Selected指令從腳本編輯器保存腳本文字。可以從指令輸入(底部)將文字高亮化,
也可以通過腳本編輯器的狀態信息(頂部)部分。Maya 將會把高亮的文字部分保存到你說明的目錄里的一個 .mel 文件中。
5、執行一個腳本程序
當你想執行一個預先已經源化了的腳本程序時,可以在腳本編輯器的指令輸入欄(底部)輸入該程序的名字,然後進行下面工作中的一種:
按 Ctrl + Enter 鍵;
或者
按數字鍵盤的 Enter 鍵;
或者
從腳本編輯器里選擇 Edit > Execute。
也可以使用這些指令執行一個在腳本編輯器里已經打開了的腳本程序的定義。如果MEL腳本定義沒有出現失敗,
則該定義是從腳本編輯器的底部移到頂部。否則該定義不會移動,並且在頂部會顯示出一個錯誤信息。
提示:
可以首先選取MEL script的一部分然後只執行這一部分(Ctrl+Enter)。 它不會刪除其它部分。
6、清除狀態信息
要清除狀態信息(腳本編輯器的頂部),從腳本編輯器里選擇Edit > Clear History。這將會刪除掉所有的狀態信息文字。
使用這個指令時應當小心一些,因為沒有辦法撤消它。
7、清除指令輸入
要清除指令輸入文字(腳本編輯器的頂部), 從腳本編輯器里選擇Edit > Clear Input。這將會刪除掉所有的指令輸入文字。
使用這個指令時應當小心一些,因為沒有辦法撤消它。
8、響應一個指令
當你用Maya工作時,對應的MEL指令常常出現在腳本編輯器的頂部。預設情況下,只有那最重要的指令才會顯示。
你可以在腳本編輯器里選擇Edit > Echo All Commands ,虛擬地顯示與你的Maya作用相關的所有指令。
它可以幫助你學習哪些MEL指令觸發作用。
在你的Maya的作用之間並不是總有一對一的對應關系,這些指令返回響應到腳本編輯器里。
如果你使用一個腳本程序去打開屬性編輯器,一些MEL指令出現在腳本編輯器里(響應是打開的):
buildObjectEdMenu MayaWindow|menu4|menuItem56;
editSelected;
editMenuUpdate MayaWindow|menu2;
但是,只有以下的MEL指令需要引入屬性編輯器:
editSelected;
同時,對於一些作用來說,也不總是會將MEL指令的響應返回到腳本編輯器里。如,當你選擇了一個屬性編輯器時,
腳本編輯器的頂部沒有返回任何信息。
要關閉返回信息,從腳本編輯器里再次選擇 Edit > Echo All Commands。
9、顯示程序中的語句行號
如果你在執行一個長的程序時由於錯誤而出現了問題,可以打開腳本程序的行號,你就可以更容易地找到錯誤。
要顯示錯誤指令的行號,從腳本編輯器里選擇Edit > Show Line Numbers。當你打開了Show Line Numbers選項,
Maya 在腳本編輯器狀態信息框(頂部)的旁邊顯示腳本程序的行號。
要關掉行號,在腳本編輯器菜單里再次選擇Edit > Show Line Numbers。
Maya將顯示行號的設置保存下來作為以後使用。如果打開了行號,當下一次你運行Maya時它們會出現在腳本編輯器里。
10、顯示堆棧跟蹤
如果你用埋入的腳本程序文件執行一個腳本程序時出現了問題,打開堆棧跟蹤選項顯示文件結構中的腳本程序錯誤。
要顯示一個腳本文件的堆棧跟蹤,在腳本編輯器里選擇Edit > Show Stack Trace。Maya會在一個窗口裡顯示堆棧跟蹤,
在腳本編輯器里顯示一個錯誤信息。
使用腳本語言結點
一個腳本語言結點是一個包括了一個 MEL腳本語言程序的結點。
當該結點產生或者當該結點被破壞時,該程序被執行,它取決於腳本結點的類型。
本章包括以下內容:
1、了解腳本語言結點;
2、產生腳本語言結點;
3、測試腳本語言;
4、編輯腳本語言結點;
5、設立腳本語言結點的執行;
6、刪除腳本語言結點。
1、了解腳本語言結點
腳本語言結點是把一個MEL腳本語言程序存儲到一個Maya場景文件中的一種方法。
腳本語言結點也包含了用於產生用戶界面的所有MEL指令,並被用MAYA文件保存。
你可以用不同的方法執行腳本語言程序。可以指明一個腳本程序結點執行它的程序:
當該結點是從一個文件中讀出的;
在渲染一楨圖像的之前或者之後;
在渲染一個動畫的之前或者之後。
當一個文件關閉著時使用File > Open或者File > New
一個腳本語言程序結點有三個屬性:
Before、After和Type。決定於腳本程序的類型,當執行該程序時,說明Before和After屬性。
2、產生腳本語言結點
可以使用表達式編輯器產生腳本語言結點。
為了產生一個腳本語言結點:
1--選擇Window > Expression Editor。
2--在Expression Editor中選擇Select Filter > By Script Node Name。
任何現存的Script Nodes顯示在Script Nodes表中。
3--在Expression Editor的Script window中輸入腳本程序。
4--在Script Node Name框中輸入一個名字。
5--定義你想要使腳本成為一個之前或者之後的腳本程序。
6--點擊Create鍵。
這產生腳本結點。現在你可以定義它的類型。
7--從Execute On 下拉菜單里選擇以下的一個腳本程序結點類型:
Demand
當你使用scriptNode指令,隱含地需求它時,運行腳本文件(看在線指令文件的scriptNode指令的信息)。
忽略這種類型的腳本文件的之前和之後的屬性。
Open/Close
如果你已經指定了該腳本文件作為之前的腳本文件,當以批處理模式讀文件時腳本被執行。如果你把它
作為之後的腳本文件,當文件被關閉或者沒有以圖示用戶界面模式提供,或者當該結點被刪除時,它被執行。
GUI Open/Close
如果你已經指定了該腳本文件作為之前的腳本文件,當以圖示用戶界面模式運行MAYA,在讀文件時腳本文件
被執行。如果你把它作為之後的腳本文件,當文件被關閉,或者沒有以圖示用戶界面模式提供,或者當該結
點被刪除時,它被執行。
UI Configuration (內部)
之前的腳本文件包括了用戶界面設置的信息。它是由Maya或者一個plug-in為了保存面板排列和編輯狀態信息
而自動的產生的。當你打開一個文件時,這個腳本結點執行它的腳本文件。在執行之後,該結點被刪除掉。之
後的腳本是不會運行的。如果一個文件被提供或被輸入,這個結點將會不存在。
軟體渲染
如果你選派好腳本作為之前的腳本,腳本的執行在一個動畫之前被渲染。如果你選派好腳本作為之後的腳本,
腳本的執行在一個動畫之後被渲染。
軟體楨渲染
如果你選派好腳本作為之前的腳本,腳本的執行在一個楨之前被渲染。如果你選派好腳本作為之後的腳本,腳
本的執行在一個楨之後被渲染。
8--點擊Edit鍵給腳本結點賦類型。
9--如果你想增加另外一個腳本結點,點擊New Script Node鍵。
Script窗口和Script Node Name框被清除,你可以輸入一個新的腳本結點。
『貳』 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函數命令。
『叄』 怎樣在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))均受支持。
『肆』 怎樣把maya的mel腳本插件 添加到工具架上急!!
1、打開腳本編輯器
2、將腳本粘貼進來
3、全選腳本
4、滑鼠中鍵將其拖拽到工具欄上即可
PS:右鍵已經添加好的mel腳本可以編輯屬性
『伍』 maya怎麼用mel腳本控制導出的文件路徑及名稱
string $sel[] = `ls -sl`;
string $savePath = ""; //替換成存放路徑
string $nowObj;
for ($nowObj in $sel)
{
select $nowObj;
file -force -options "v=0;" -typ "FBX export" -pr -es ($savePath+$nowObj+".fbx");
};
這段腳本會按照你選擇的物體,把每個單獨保存成一個FBX文件
『陸』 請問,怎樣把MEL腳本導入MAYA
最簡單的辦法就是直接拖到maya窗口裡,這一步相當於把它載入,然後的把文件名(擴展名之前的部分)復制到命令行里運行一下。這樣就OK了。這樣做簡單,而且不是每次打開MAYA都自動載入,所以不影響maya的運行速度和穩定性。
『柒』 如何把maya的mel腳本插件 添加到工具架上去啊
在script editor里打開你的mel腳本,全選 然後按住滑鼠中鍵拖到上方的工具架上
如果想刪除某個工具架上的按鈕 用滑鼠中鍵拖著它到右邊的垃圾桶圖標
『捌』 MAYA里 屬性關聯MEL腳本
你是說點擊屬性時執行 還是改變屬性的數值 到達一定的值後執行
『玖』 maya的mel腳本與表達式是否等同
這個問題問得很亂 只能按語句逐個回答
1 可在mel語言中使用的所有內容是否全部可用於表達式?
這個是肯定的 但有轉化命令 mel直接使用表達式 (表達式只是語言的邏輯數學關系賦值嘛) 表達式要使用mel命令則需要輔助命令eval(「」);
2 換句話說:是腳本>表達式,還是腳本=表達式;
這個是你概念上的混亂 腳本和表達式完全兩回事 互不相干 表達式表達的是邏輯數學關系 mel是用來調用命令 至於二者的搭配使用 就好像你從A點到B點 公路呢就坐車 水路呢就坐船 實際上船和車沒有太大關系 頂多都是交通工具
3 如果兩者不同,請給出不同點,比如:變數定義、語法、語句、maya定義的函數庫(或命令)等
變數定義、語法、語句、maya定義的函數庫(或命令)這些都相同,表達式是需要關系運算符的 沒有關系運算符的不能叫表達式 mel不需要一定有關系運算符 表達式調用mel 當然要遵守mel的語法規則 表達式是mel的一部分 可以獨立使用的特殊mel 這個只能用來理解二者關系 但實際上他們獨立性很強
4 不要解釋與問題無關的內容(比如什麼事腳本語言、表達式、API、命令行等等)
從你問的問題可以看出 這些概念你很混亂 先搞清比較好