2009年2月8日 星期日

XBOX的不可思議改造任務

XBOX的不可思議改造任務
自從XBOX推出之後,很多的人開始對於XBOX的這台機器的定位有許多不同的看法,因為就XBOX的規格來看,基本上它就是一台小型x86的電腦,只是被Microsoft"包"成一台個人的家庭遊樂器,也因為這樣,就有一群人專門HACK XBOX的硬體,使之能夠在上面跑一些原來在電腦上跑的一些程式,像是模擬器啦,Mp3的播放器等等啦,開發不少的工具,也有人希望在XBOX上跑一些作業平台,像是Linux,也因為有這樣的計劃,才讓這個原來只是遊戲的"X盒子"變成有像電腦的無限可能。


說起來也是無聊,也因為有人在XBOX上開發Linux這樣的計劃,讓我有一個莫名其妙的想法,就是如果能在XBOX上跑Maya該有多好,因為這樣,也許可以讓一台相當於PIII-733CPU的XBOX充當算圖機器,便可以發揮不只遊樂器的功能而將XBOX的極限推到最高。這只是一個玩CG動畫的人的一個想法,也因為這樣,便開始這樣的改造任務。

第一步

機器運作原理:
要知道本身XBOX的啟動的時候只會依循機器本身的BIOS去讀取CD中的資料並進入遊戲,要讓XBOX能夠啟動指定的磁碟區,就必須要HACK本身的機器BIOS(注意,本改機的部分純為測試用途,本人並不建議修改機器硬體以導致機器損毀或保固失效),因為預設的XBOX磁碟分割使用特殊的FATX的格式,而且不能直接讀取檔案,修改之後使用特殊的啟動程式便可以在機器上面可以透過網路使用ftp程式去直接讀取XBOX磁碟資料,編輯XBOX可以讀取特定的磁碟區的Boot File,而且將XBOX啟動的磁區另外指定,這樣便可以讀取特別的啟動檔案。

XBOX拆開上蓋內部

改造機器:
因為原始XBOX的內建的是WD,8GB的IDE硬碟,分為C,D,E,F,X,Y,Z,七個磁槽,X,Y,Z分別是儲存遊戲讀取暫存的部分,C,D,E,F是存放啟動資料與一般資料的部分,但是因為灌Linux是使用E槽來灌,大概灌完需要2GB的容量,避免容量的不足,我換了一顆Seagate 10GB的硬碟。使用ASUS 8X DVD還有一顆Seagate 10GB的硬碟

格式化先前準備
因為要在XBOX上格式化硬碟,必須要有開機光碟來執行格式化的程式,可以去下載EVOX的開機BIOS ISO,燒到光碟裡面就可以了。

關於XBOX的硬體相容的問題,XBOX因為版本的問題1.1版本的XBOX的光碟機相容度對CDR還有CDRW的光碟片相容度很低,為了解決這樣的問題,我直接使用一條電源分接線接一台華碩的DVD光碟機來當作預設讀取的光碟機。

因為XBOX所使用的是特殊的FATX的檔案格式,一般電腦無法辨認,便要使用開機EVOX的BIOS來在XBOX開機時Format硬碟,Format好了,把EVOX BIOS 利用Ftp傳到C槽,使XBOX可以用新硬碟開機,再來便可以再進行下一步啦。

使用evox開機光碟格式化硬碟

當然我們也要使用USB的鍵盤與滑鼠,我是去網路上購買的轉接線

安裝Linux
我們所安裝的是由Debian Linux為base的Linux Distribution,稱為"Xebian",所以以這個平台,可以使用所有的Debian所有超過8000個Application,或應用元件。

關於Xebian Linux Distribution 1.0.1可以到下面下載
http://xbox-linux.sourceforge.net/docs/download.html

下載的安裝是一個叫做dist-1.0.1.tar.bz2的檔案,使用rar解開會有一個dist-1.0.0.tar
再解開有一些檔案

1.0.1.iso是作為安裝光碟的iso檔

boot_fatx_e.iso是使用於Liunx的開機的BIOS

在E:下面建立一個Linux的資料夾,把boot_fatx_e.iso用rar解開的4個檔案全部copy到
E:\Linux的資料夾中。

之後在C:下面修改evox.ini的檔案加入這一行

Item "Linux OS","E:\Linux\default.xbe"

重新開機放入Linux的安裝光碟,讓開機的選單可以增加Linux OS選項這時應該系統就可以進入Linux的作業環境了.....出現Linux OS字樣

到進入登入畫面的時候,輸入Username:rootPassword:xbox登入,
在Xterm輸入安裝命令XBOXLinuxInstall(注意大小寫)
之後的選項大部分都直接按Enter就可以跳過啦。

詳細的安裝可以去參考下列網站
http://xbox.egchina.com/JIANJIE/87.htm

安裝完成之後輸入reboot重新開機,就可以看到xvm的登入畫面啦,輸入使用者與密碼登入
就可以使用基本的X Window的介面了。

開啟console使用vi編z/etc/apt/source.list 加入下列server
deb http://opensource.nchc.org.tw/apt/kde/3.1 woody main

存檔後就可以使用#apt-get install kdebase 安裝Kde 3.1的桌面環境
安裝完成之後,XBOX就擁有漂亮的KDE桌面了。

這時候XBOX已經擁有可以運作的Linux的作業系統了,現在要開始安裝我們最重要的Maya啦

安裝Maya
Maya的軟體,基本上是要在Redhat Linux的版本上安裝運行的,因為Redhat是使用RPM的安裝程式進行安裝,所以在Debian Linux會有一些問題,因為Debian預設的安裝封包是以deb為主,所以在Debian上要安裝Maya的rpm安裝封包時要先做一個轉換的動作

基本上Maya只需要安裝兩個檔案
AWcommon-5.3-5.i386.rpm
Maya5_0-5.0.1-135.i686.rpm

轉換RPM檔
alien -d AWcommon-5.3-5.i386.rpm
alien -d Maya5_0-5.0.1-135.i686.rpm (將RPM轉換成deb的安裝檔案)

安裝deb檔
dpkg -i AWcommon-5.3-5.i386.deb
dpkg -i Maya5_0-5.0.1-135.i686.deb

Maya會安裝在/usr/aw/裡面
Maya的License會放在/var/flexlm裡面

這時啟動前必須要修改/etc/X11/XF86Config-4裡面
section "Module"下
# Load "glx"
的前面的#字號去掉,存檔
這樣Maya就可以正常啟動囉

任務完成,XBOX可以啟動Maya囉

Render測試
Render Scene
我測試是用Highend3d上的公用測試場景來作測試,如果想要測試的人可以到下面網址下載
http://www.highend3d.com/tests/maya/testcenter/download.3d測試結果
Render時間6分16秒

 這樣的Render時間反映的是XBOX的主機記憶體只有64MB,導致使用SWAP而造成讀取的執行效率的降低,如果有兩到三倍以上的RAM,應該可以有更好的效能,繪圖硬體其實有相當的水準,因為是相當於Geforce 3 MX的整合式顯示晶片,只是輸出的介面是使用電視來顯示,電視的解析度遠遠不如電腦的操作,在開啟Maya的全視窗時,有一半的Maya介面被擋住了,造成使用上的不順暢,而且硬體並不支援OpenGL的Depth,像Hardware Fog都無法使用,而且使用Hypershade會因為切換視窗頻繁而使整個X-window掛掉,還是在相容上有一些問題存在。


這樣的任務,只是從一個無聊的討論中間想出來的,原因是因為有人說XBOX就是一台電腦,而且可以掛Linux架伺服器,而且一台XBOX才5千多就有啦,比一台準系統還要便宜,看看XBOX的規格也是有PIII-C733的CPU在撐,雖然RAM少了一些,也可以做一些運算的工作,拿來架個Renderfarm也是不錯的啊,呵呵(開玩笑的)....,最重要的也是完成一種想法,像有很多人都認為Linux的環境很穩定,在很多遊戲主機上有些人都想盡辦法在上面Run Linux,Linux的優勢就是吃硬體資源比較少而且是Open Source的開發環境,讓很多的開發資源都共享,XBOX的Linux便讓我有這樣的想法,讓一些支援Linux的環境的CG Application可以在上面執行,雖然顯示的畫面是在電視上,但是卻可以完成一個CG軟體在遊戲機上運行的不可能的任務,呵呵....也希望藉此實驗提起一些更新的想法像是Maya,Shake,XSI還有一些Render引擎(PRMAN,Mentalray)都有Linux的版本,也都可能可以在XBOX Linux上運行,這只是一個起頭而已,之後的想法也可大家提出來討論喔。

硬體支援
感謝MAXX提供XBOX的遊戲主機
技術支援
感謝FAKE3D提供Linux相關技術詢問

Indigo Digital Studio 2004

Maya Expression初階篇(一)

好久沒有寫一些教學了,因為都在做一些特效方面的東西,自然都要用一些Expression來做一些快速的應用。不過在講Expression之前,還是要先介紹一下Expression與MEL有什麼不同,即使是使用過的人,也常常不知道它們之間的差別,就我的經驗,來做一些解釋好了。

Expression本身在Maya的環境裡,是屬於一個Node結構,也就是說,它是用API編寫出來的一個節點,Maya的任何Node都需要有Input與Output的部份,這個Node的輸入就是一段String,也就是在Expression Editor裡編寫的Expression語法,這個Node裡接受到了使用者所寫的語法結構後,裡面的語法分析器(Parser)會分析所寫入的語法後產生動態的直譯結果,並產生對應的聯結,這時Maya就可以動態使用這個Expression的輸入與輸出動態產生的參數結果,Expression就是以MEL的語法結構為基礎,配合簡單的數學運算式來作為控制屬性(Attribute)的輸入與輸出。

Expression與Particle Expression在Maya裡面是完全分開的東西,基本上particle Expression是完全為了particle的機制所用的,裡面有creation與runtime的使用型態,與定義per Particle Attribute 語法,跟一般的Expression完全不一樣,唯一一樣的就是都可以使用MEL的語法。

Expression的基本應用不外乎就是來做數值的轉換或連結,也就是如果我要一個ObjectA的Rotate Y屬性控制ObjectB的Translate Y屬性,只要這樣寫

objectB.translateY = objectA.rotateX;

Expression在上面的語法表示objectB.translateY連結到objectA.rotateX的屬性上,與MEL語法的=用法有些許的不一樣。

//也可以加入一些簡單的運算

objectB.translateY = (objectA.rotateX/2)+10;

//也可以加入一些數學的函式

objectB.translateY = sin(objectA.rotateX);

//跟時間單位扯上一些關係 time , frame

objectB.translateY = sin(time)*sin(frame);

//也可以呼叫MEL的Command
//但是這個語法便沒法用在MEL裡
objectB.translateY
= `getAttr "objectA.rotateX"`;

下面這兩行,是否結果都一樣?

objectB.translateY = objectA.rotateX;
objectB.translateY = `getAttr "objectA.rotateX"`;

其實是不一樣的,雖然取的物件的值都是一樣的,但是在執行的順序會有差別,上面兩個屬性直接等於的方式,等於Maya的Make Connection,所以只要Source Attribute Change就會更新Destination的Attribute Value,但是第二行並非直接Connect Attribute,而是將objectA的值取出並指給objectB,這時只有在Evaluate這個Expression或Time Change才會把結果送出,也就是只有第一次執行Expression或Play Time時才會更新,這個可要特別注意喔。

Expression本身可以當作快速連結使用,但是它的執行效率會比使用Maya Node連結來的慢,因為要加上轉譯的時間,但是修改快速,如果處理過多的MEL Command也會使記憶體暴增,無法釋放,撰寫Expression的時候盡量寫在同一個Expression Node裡,盡量在Expression裡少使用迴圈,就可以享受到Expression的便利性了。

之後有時間會再多介紹應用的方式。

開發是為了走更長遠的路

最近都在寫一些給Asset Team,Animator與Shot Setup的工具,大部分都是為了加快製程的工具,內容不外乎置換客戶的檔案,自動備份等等,但是總是在用程式做一些重複率很高的事,雖然的確可以加速製作,內容其實相當乏味,因為以一個禮拜要做6~70卡的檔案,用人工的話,製作可能會花2~3倍的時間,畢竟拼的是量產,所謂重複率高的事情包括開檔,置換檔案,製作Keyframe,Copy Key,Delete Key存檔等等,都是一般User會重複上千次的動作,用程序來製作可以省去一些重複的動作,並且減少錯誤,對於一個依賴量產的公司,這是相當重要的,但是這樣的工具能幫公司帶來製作技術的獨特性嗎,其實不然,一個獨特的技術在現今已經不是一個簡單工具或Plugin可以處理的,像是Crowd Animation,除了Animation Blending,還有Motion Path Simulation,Geomatry Caching, Geometry Repalcing,Geometry Dynamic Loading,Rendering等等技術的整合,才能Setup一個完整的Crowd Animation的環境,當然可以使用套裝軟體所提供的機制來製作,但是就被軟體的環境所綁住了,軟體的版本一換,或軟體公司倒了,就什麼都沒了,其實了解自己的製作環境,並開發自己的獨特的製作工具才是公司最有價值的部份,因為這種技術搶不走,如果又是市場獨占,基本上要製作這種特殊的效果就是非有這個技術的公司莫屬,不過通常開發這樣的環境有時在公司的立場是無底洞,因為市場會決定需不需要這個技術,像是如果Rhythm & Hues當初沒有製作貓狗大戰,就沒法奠定製作Fur技術的環境與在好萊塢製作毛髮的第一把交椅,相較於國內的公司,大部分都是為了交案子了事,並非挑戰技術為前提,開發新技術便成為一個遙不可及的工作,也無法建構出一個公司獨有的技術環境,造成無法跳脫製作公司與代工的型態,幾乎開發工具都是成為一個口號,或是一個實踐個人的想法而實作的測試工具。

不過開發重要的是對各環境的整合的暸解,期待國內的公司能夠有一些新技術的開發,也鼓勵一些有開發經驗的人做一些新技術的嘗試與開發,讓CG的產業有一些新的氣象。

MEL筆記-快速找到Object Shading Group


如果要在Maya裡找到正確的Shading Group(SG)如果使用listConnection來找的話,如果遇到選面材質或是instance的狀況會無法列出正確的Shading Group,所以可以使用下面的Command

listSets -ets -t 1 -o "pSphere1";
//Result : blinn1SG blinn2SG

如果參數-o的值輸入的是Shape的話,會指向Shape的主要的Shading Group而非Instance物件的Shading Group,如果是Transform的話則會列出Instance物件的Shading Group.

注意,這個Command如果不指定物件參數-o的話,return的值會是之前第一次執行的結果,並不會重新更新,務必要加上-o。