在算圖農場主機上,修改MAYA 場景檔的路徑資訊–以 sed、grep 實作

前言

在 MAYA 製作作品時,或多或少會需要使用到貼圖或外部的檔案。而 MAYA 並不會把這些資訊都納入自己的場景檔(scene files)裡頭,它只會記錄外部檔案的路徑,等要開始算圖時,才會去讀取檔案。

國網中心的算圖農場的作業系統是 Linux ,因此,無論你的 MAYA 是在哪種環境下製作的,你都要把 MAYA 檔案內的那些路徑格式改成正確的 Linux 路徑。

路徑設定正確後,算圖才會正確,不然算完的作品可能就沒有貼圖囉!

以下假設在 Windows 下製作動畫,然後上傳到國網中心的算圖農場做算圖 。

存檔要存成 ASCII

請記得,當你準備結束 MAYA 工作時,把存檔格式選擇 MAYA ASCII,也就是 *.ma 檔。如此你才能用文字編輯的方式修改路徑資料。

ascii

圖一、選取存檔格式為 Maya ASCII

ma

圖二、 用文字編輯器打開任一 Maya ASCII 檔案,可以看到以文字格式儲存。


Windows  下的路徑

如果你是在 Windows 上製作 MAYA ,路徑可能會像這樣:

F:/maya/projects/Practice_Realflow/sourceimages/office01.hdr

很明顯這可能是個 IBL 環境貼圖所需要的檔案。

Linux 下的路徑

在 Linux  下,路徑通常像這樣:

/RenderFarm/user001/Practice_Realflow/sourceimages/office01.hdr

/ 作為最頂層,而不是像Windows   以 F: 作為最頂層


該做什麼步驟?

在此我們不細論兩者的設計理念以及區別,總之,我們的任務是把 MAYA 檔案內的

F:/maya/projects/Practice_Realflow/sourceimages/office01.hdr

取代成為

/RenderFarm/user001/Practice_Realflow/sourceimages/office01.hdr

比較、觀察一下關鍵之處,可以看到,其實也就是把 F:/maya/projects 換成 /RenderFarm/user001 這樣就可以了。

改成相對路徑的作法

前一節的作法稱為絕對路徑。事實上這一大串文字真的是落落長,太麻煩了,很多情況下我們喜歡相對路徑,通常會簡短很多。

例如、你把 MAYA 檔案儲存在

/RenderFarm/user001/Practice_Realflow/scenecs/animation.ma

那對這個 animation.ma 檔案來說,上面的 office01.hdr 的檔案,就在相對的 ../sourceimages/office01.hdr  路徑上

註:  ..   兩個冒號代表向上跳一層目錄的意思

所以,我們只需要把 F:/maya/projects/Practice_Realflow 取代為  ..  ,讓路徑變成 ../sourceimages/office01.hdr  就行了。

有沒有簡短多了呢?


實作,假設 animation.ma 就是你的 MAYA 場景檔案

 

步驟一、以 grep 指令尋找 animation.ma 內的 F: 關鍵字。找到兩筆資料

[scenes]$ grep 'F:' animation.ma
       setAttr ".tx" -type "string" "F:/maya/projects/Practice_Realflow//sourceimages/office.hdr";
       setAttr ".ftn" -type "string" "F:/maya/projects/Practice_Realflow//sourceimages/cup.jpg";

 

步驟二、先自己產生一些文字檔來練習搜尋與取代。

[scenes]$ vi test001.ma 

###  以 vi 編輯 test001.ma  ###
###  把上面的兩筆路徑資料自行複製到 test001.ma 內  ###
###  然後存檔,離開 vi  ###

[scenes]$cat test001.ma
       setAttr ".tx" -type "string" "F:/maya/projects/Practice_Realflow//sourceimages/office.hdr";
       setAttr ".ftn" -type "string" "F:/maya/projects/Practice_Realflow//sourceimages/cup.jpg";

### 以 cat 指令確保一下檔案內容 ###

 

步驟三、F:/maya/projects/Practice_Realflow/ 先變成 ..

[scenes]$ sed -i 's/F:\/maya\/projects\/Practice_Realflow\//../g' test001.ma 
  • 說明一: sed 指令,格式如下

  sed ‘s/[被取代的舊字串]/[取代別人的新字串]/g’ 檔案名稱

  • 所以 如果你打 sed ‘s/a/bbb/g’ test001.ma,那所有的 a 都會變成 bbb,例如 maya 會變成 mbbbybbb
  • 說明二: –i  代表把改變寫入檔案。若忘記加,所有的輸出會跑到螢幕上 … 那會很精采哦 ~~~XDDD
  • 說明三:你可以注意到指令裡面所有的 / 前面都多了一個 \ ,我把它用紅色重新標註給你看 :

sed -i ‘s/F:\/maya\/projects\/Practice_Realflow\//../g’ test001.ma

  • 這是因為 / 是特殊字元,有特殊用途的,如果你要告訴系統:「這不是特殊字元,只是普通斜線!」那麼你得在前面加上倒斜線 \

好了,試試看!

 

步驟四、觀察結果,根據預期路徑應是  “../sourceimages/office.hdr” ,所以找關鍵字  “../source

[scenes]$ grep '\"../source' test001.ma
        setAttr ".tx" -type "string" "../sourceimages/office.hdr";
        setAttr ".ftn" -type "string" "../sourceimages/cup.jpg";

大功告成!

 

步驟五、對真正的檔案下手,先觀察、下指令、再檢查

[scenes]$ grep 'F:' animation.ma
       setAttr ".tx" -type "string" "F:/maya/projects/Practice_Realflow//sourceimages/office.hdr";
       setAttr ".ftn" -type "string" "F:/maya/projects/Practice_Realflow//sourceimages/cup.jpg";
[scenes]$ sed -i 's/F:\/maya\/projects\/Practice_Realflow\//../g' animation.ma
[scenes]$ grep '\"../source'animation.ma
       setAttr ".tx" -type "string" "../sourceimages/office.hdr";
       setAttr ".ftn" -type "string" "../sourceimages/cup.jpg";

大功告成,算圖吧!

 


更多 sed 與 grep 的用法,請參考鳥哥的 LINUX 私房菜:

或是 柏青哥的 SUSE LINUX :

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料