2013年11月9日 星期六

如何安裝與使用 python script ( How to install and use Python script in Maya)



在網路上看到不少人說 自從 Autodesk 併購 Alias 之後,Maya 就沒什麼功能上的突破了。這批評不完全失真,但這麼說就有點委屈Autodesk Maya 團隊了,因為從 Maya8.5 至 2014 ,Autodesk Maya 團隊最大的貢獻之一就是把Maya 變成一個客製性非常高並且相對穩定的一個系統。這一點對一個中大型製作團隊來說非常有吸引力。其中一個亮點就是 Python 。

在 2007 年 (Maya 8.5版,Autodesk(或Alias) 團隊開始把 Python 引進 Maya 裡當一個工具開發語言之一(其他兩個就是 MEL & C++)。相對於其他那兩位,Python 是一個易懂,方便,功能有強大的一個語言。MEL 雖然是 Maya 的core script language, 可是因為功能上限制太多了,也沒有額外的 library 支援,所以可以開發的工具非常有限。C++ 又是一個 hardcore 的程式語言 ,需要經過編譯過才可以用,執行檔又無法跨作業系統使用,所以開發起來非常不便。Python 就剛好可以站在這兩位的中間,而且可以取代很多 Mel & C++ 的必要性,所以也難怪近年來 Python 的程式 (尤其是 script 類的) 越來越普遍了。

在這我就大概分享一下 Python script 的第一門課。也就是如何安裝以及使用它 。其實我的 blog 第一篇文章就有稍微解釋如何安裝 python 程式,只是又跟 MEL & C++ 混雜在一起,所以在這就特別針對 python 在分享一次。

呼叫一個python 程式時,Maya Python 需要先知道這程式的位子在哪。不像 Mel script 可以直接指定絕對路徑 (source "C:/mymaya/scripts/myscript.mel") ,Python 指令並沒有這一種 source 絕對路徑的方式。所以我們必須告知 Python 編譯器要在哪找這程式。有幾種方法可以用:


  1. 大家可能最熟悉的方式就是把 Python script 放在 maya 預設的 script 目錄裡,例如 :
    • C:\Users\rainmaker\Documents\maya\2013\scripts
    • /home/rainmaker/maya/2011-x64/scripts

    放在這的好處就是方便,但缺點就是不好做分類或管控。
  2. 在 Maya.env 檔案裡列出你想要增加的目錄,例如:
    • PYTHONPATH = C:\mymaya\scripts\python; D:\others\maya_scripts\;

    (Maya.env 的檔案位子請參考此文章)

  3. 直接在 script editor 裡指定目錄的路徑。例如 :
      •  import sys  
         sys.path.append('C:/home/myfolder')  
        

      •  import sys  
         sys.path.insert(0,'C:/home/myfolder')  
        
    append 跟 insert 的差異就是 append 會吧目錄搜尋順序放到最後面,insert 是放到最前面。這就看你想讓 python 先搜尋哪一個目錄來決定。
    用這方法的好處就是 可以直接在 Maya裡增加script目錄,缺點就是每次開 Maya 都需要執行一次 (一個目錄 insert/append 一次就夠了,不需要每次呼叫 python 程式都增加一次)。


把 script 目錄增加完過後,我們就可以開始在 script editor 裡呼在此目錄裡的叫 python script 了。

一般來說,呼叫 python script 的  方法就是 import [檔案名字 (不包含.py 或 .pyc)] ,然後在執行 script 裡的某一個 function。 通常 script 作者都會告訴你要執行哪一個 function 來開工具視窗或執行工具的某個功能。在呼叫 function 之前也可以加一行 reload([檔案名字]) 。加這一行的目的是為了強迫 python 編譯器重新讀取該檔案 (如果沒重開Maya 然後檔案內容有更新就需要執行這一行)。

以下我有提供一個簡單的 Maya python script 來方便做測試. 呼叫方法就是:

 import callMe  
 callMe.go()  


callMe.pyt
(把副檔名從 .pyt 改為 .py)

成功執行的話,在Maya script editor 就會顯示 : I am here





失敗的話大概就會出現紅字吧 XD


1 則留言: