Monday, December 27, 2010

OpenCL Wave & MacOS


Just port the whole thing to Mac OS 10.6. Spent about two nights, mainly dealt with platform specific OpenCL/OpenGL share context issue. Maybe I should start add some lighting to the ocean.

I want to post some quick code snippet, but first I need a syntax highlighter...


//can I write code now?
void main(){
printf("hellow blogger\n");
}

Wednesday, December 22, 2010

siggraph 2010 asia

first day


飛行時間非常短,短到連一部電影都看不完(其實真正原因是因為他一直插播...),到韓國時,從窗外灑進來金黃色的陽光,會讓人誤以為外面是個晴朗炎熱的天氣,不過一出了飛機艙,馬上就會發現這完全是個假象,從登機門細縫吹進來的冷風非常的冷。


出關後到科南找到的租借手機的地方借了iphone,理論上應該五天免費,不過實際上應該一不小心就會付出額外費用吧,因為只有wifi免費,3G就要收錢,另外,在旅館wifi的收訊非常糟,幾乎收不到訊號,因此租那隻iphone還沒有任何實際效用。旅館的網路費用很高,wifi品質也不好,韓國號稱世界網路最快應該是誇大其詞吧。


旅館房間是單人房還加一張床,打掃的不太乾淨,還有前房客的頭髮,據Brian說他們房間還有用過的保險套...然後牙刷牙膏都要賣錢,實在很難讓人有好印象...


晚上大家走了一段路(真的超級冷...)去吃一家韓國烤肉,因為菜單完全沒有圖片,也沒人會韓文,所以就讓老闆娘幫我們配菜,一人一萬韓元。跟台灣吃的烤肉還滿不一樣的,肉是一大片一大片沒有醃過的,烤盤是長方形的一大塊鐵盤,然後斜斜的放著讓他可以從缺口滴油。肉要用剪刀剪成小小片,然後加一堆的佐料沾醬一起烤,烤好後用生菜包起來吃,另外還有一些泡菜,小菜(生的蚵仔只有獸王敢吃)和辣的豆腐鍋等配菜。吃起來還算ok。臨走前老板娘送了一人一個橘子。


回程去了一家便利商店買東西(越來越冷了...),韓國的便利商店似乎不像台灣幾乎都是seven或全家連鎖,而是有很多種不同的小店,買了一包類似蝦味先的零食,和一瓶20%酒精濃度的燒酒,目前在旅館大約喝了三分之二瓶的狀態下寫東西,有點恍神,應該是這輩子一次喝下最多酒精吧,喝酒真的是很好的取暖方式啊,可惜那個燒酒不好喝,味道很像直接在喝酒精,還有點擔心是不是買到工業酒精了。


開始酒醉了,剛打給Brian居然忘了他名字,好像某人犯過的錯啊...哈哈哈



second day


今天是研討會第一天,所以必須早點起床去會場登錄,大概六點就起床了吧,出旅館的瞬間,真的是讓想罵髒話的冷,據AccuWeather顯示,應該是零下11度,這樣的天氣,我們用走路的到Coex展覽館,幸好有買手套和帽子...。


會場的標示很差,我們從coex北邊的大門進去,有看到小小的一張siggraph asia海報,但都沒有標示方向,Brian還遇到了他大學同學也來參加,可是他同學也不知道登錄的地方在哪,結果再會場繞了老半天,問了其他來沒關係的展覽的人員,最後發現是要走到會場的南邊。


上的第一堂course是叫multi-dimensional spatial sorting的課程,講師是一個老美教授,內容大約就是一些quad tree,AABB tree之類的和一些那個教授提出來的改善方法,當然這些課程內容都收錄在會場也有賣的,他出的spatial sorting書裡面。


因為那個教授有些demo是放在網頁上的,所以他從上課前就一直試著要連無線網路,可是訊號很差一直斷網,他看起來還滿生氣的一直說this is ridicules,unacceptable,後來有個工讀生之類的人拿了一條網路線進來,結果也沒用。我們一般的參加者,如果要用會場網路居然還要付錢,韓國的網路真的很好嗎?並不是家裡網路很快就是網路很好吧?


另外有些研討室真的很小,最小的大概只有二十個位子,韓國人好像不把這個當作國際研討會是吧,下一堂課在同一個教室,是有關mocap的課程,結果我去上個廁所回來那間教室就被擠爆了,只好去聽pixar的toy story 3一些lighting設定之類的東西,老實說有點失望,因為投影片和demo影片的影像品質很差,細節都看不清楚了,另外講師有一個是韓國人,所以他用英文講可是不太能表達他的意思,總之內容大約是一些lighting和情境之間的關係,不過我想大部份有經驗的美術應該都很清楚這些內容了。


第一天的會議,這個研討會讓我留下一些不太好的第一印象...


Sunday, December 12, 2010

3D/Kinect, etc

最近一些遊戲的內容或消息讓我有點不爽,其中一個是GT 5支援3D,另一個是Forza 4要支援kinect。

奇怪吧,支援越多不是越好嗎,只要用不到可以關掉就好啦,我也是這麼想的沒有錯,但是必須建立在遊戲的核心已經有非常好的表現的前提下。

GT 5的繪圖效果很明顯有很多可以加強的地方(shadow,particle!!!),效能無法鎖60FPS(其實還掉格掉很大...),可是這樣還要硬撐3D,3D電視在世界上有1%了嗎???

Forza系列沒什麼大問題,但是不支援羅技方向盤,只支援微軟本家非常爛的方向盤,光這一點他就無法與GT站在同一個起跑線上了,模擬類型的賽車遊戲,居然可以不支援羅技???如此他還是要多支援一個有點雞肋的kinect。

很明顯的3D和kinect正好是sony/microsoft猛推的自家技術,polyphony digital和turn 10這兩家第一方大廠,如果說他們沒有被高層脅迫要幫忙推銷這些技術我實在不相信。

如果說polyphony把實作3D的時間拿來改善shadow map/particle的品質或效能,turn 10可以不要理會微軟爛方向盤的滯銷情況而支援高品質的羅技方向盤,我想大部份的玩家才真正開心吧。

只是現實就是這樣,第一方開發商通常肩負了讓大老板開心的責任,玩家有什麼不滿,自己吞下去吧。

Thursday, November 18, 2010

RAGE

id的新作rage已經出了,在 iphone上...

但是...Apple偏偏要搞什麼分區阿,台灣的app store都買不到,我想花錢買遊戲,為什麼你不讓我買!!!!

p.s.
JC大神在iphone rage開發後有寫過一篇文章,喜歡low level programming的人應該會發現一些有趣的資訊吧。

Tuesday, November 16, 2010

OpenCL FFT & ocean water pt.3


終於得到正確結果,一個畫面執行了三次256*256的2D FFT,一次用來產生高度,兩次用來產生normal的x與y值,風向是+x方向,顯示的是normal的x component。雖然模擬的是海,不過看起來有點像terrain。
顯像完全是暴力法,一個normal值對應一個vertex,雖然我想說我喜歡暴力顯示:),不過這其實是OpenCL FFT lib的限制,不讓我用OpenGL的貼圖,只能用vertex buffer當作output memory。
效能還沒仔細量測,不過看起來FFT的確是GPU的強項。

Sunday, November 14, 2010

House&Home

又到了換房子的時節,今天去了新莊,首先沒看房子而是去輔大偷看女學生(我這樣寫會不會很像變態阿,不過一個阿宅還能做甚麼呢,至少我很誠實...),很可惜大概是禮拜天所以學生不多,不過有看到啦啦隊和跳舞的學生在練習。

走了輔大一圈,感覺上是個不錯的小學校,然後不知道為什麼,有很多的銅像,好像很多都是傳教士吧。

看了輔大附近一間套房,舊的透天屋改建的,裡面還算不錯,空間很寬敞,可是外面環境很差,到了晚上應該是個恐怖的小巷子,這樣也要9000。

下午看了一間中港路的獨立套房,老實說還滿喜歡的,裝潢得很漂亮,原木地板,空間也很大,唯一的缺點可能是沒有停車位。房租加管理費要一萬大洋,雖然已經有點衝動想租了,不過當時理智戰勝了衝動。回家有點後悔,不過看網頁那間房子好像已經租掉了。

一萬大洋租個不錯的套房到底值不值得勒,雖然說看起來不錯,空間很大,不過大概也只有老家書房大小。然後一整棟的大樓都是這種套房,一個大樓不知道塞了多少人,這樣的房子好像還非常搶手,台北阿...




Rants

選項
1. 省一點住便宜套房可是生活品質低落,可是可以買書和遊戲。
2. 少買一點書和遊戲,花多點錢住好一點的套房,不過生活品質事實上也只是普通而已。

媽的都是要住套房,我他媽的厭倦了套房阿

Sunday, October 31, 2010

新手套 & 花園夜市


沒甚麼關聯的標題,幸好最近的標題都走混搭風(??),所以還不錯...(???)

今天是暑假第一天,去了康康推薦的kazuma買新手套,一開始去找本店,還滿難找的,在永康的一個小巷子裡,兵仔市場旁邊,最後找到的時候他沒開orz,還被我哥罵笨蛋,所以又跑去新開的成大分店,還好有開。


店裡手套很多,不過不知道該選哪個好,我問店員有沒有推薦的,他就說有常在玩就買硬一點的比較不會變形,沒有就買軟一點的比較不用整形。

之前不見的手套是SSK的,今天有看到一個長得很像,試戴過感覺不錯,跟不見的那個也很像,只是SSK的手套很硬。


我估計了一下以後有可能真的玩傳接球的機率,就乖乖的買了一個比較軟的,Mizuno牌。




手套買拉,可是真的有機會玩嗎,心裡有點存疑阿...真的很懷疑阿...


晚上跟我哥去吃了一家據說也是老字號的日本料理,東京益田,因為餐廳裡面都客滿了,所以就坐在外面的位子,天氣有點涼,所以就一邊吹涼風,一面聽候選人的競選口號一邊吃,感覺很不錯。

他們的握壽司,薑汁燒肉和烤雞腿都不錯吃,不過我點了一個有點奇怪的東西,生鮪魚拌山藥,我覺得應該是拿來做成蓋飯上面的料拉,不過沒有點白飯,只好加了一堆醬油把它唏哩呼嚕的吞下去...味道的話就沒有太詳細去品嘗了,不過魚應該有新鮮...


我因為家裡離花園夜市徒步距離十分鐘可是卻從來沒有去過而遭到同事恥笑,所以吃完晚餐就決定來雪恥,逛花園夜市,最後在夜市吃了有點普通的烤雞串(還要等二三十分鐘)和哈密瓜牛奶,然後突然想起來,這不就跟去花蓮自強夜市吃的東西差不多嗎(過程也差不多)。


我哥還跟我說如果想吃燒烤可以帶我去好一點的店,我只好跟他說其實我並不是想吃燒烤...好難解釋...。所以我內心os的結論是,夜市果然都是拿來騙觀光客的東西拉!!!



不過為了迎合大家愛逛夜市的奇特習性,我會對外宣稱花園夜市真的很棒。


最後,跟我哥去了一家夜市旁邊的咖啡店,他們的敗筆是居然沒開冷氣,雖然今天天氣有點涼了,不過店裡面還是很熱,點了英式奶茶,沒特別好喝,不過上面的圖案...花紋...(這有個專有名詞的嗎)很漂亮。

感覺跟這個部落格的主題完全不搭,不過暑假很棒,回家也很棒,只是太少回家感覺在家裡的空間越來越少了。

Wednesday, October 27, 2010

OpenCL FFT & Ocean Wave pt. 2

稍微正確的結果,之前的錯誤並不是高頻波,而是虛數的部分,因為Apple 的OpenCL FFT沒有complex to real這種轉換,所以inverse FFT出來的結果其實是複數,忽略掉虛數部分是上圖結果。

CUFFT有提供complex to real FFT這種轉換,只要在frequency domain符合一些對稱的條件,可以保證output會是實數,input size可以從N減為(N/2) + 1,在Cuda的ocean wave demo中,他們用這個方法來進一步加速,可惜的是Apple的FFT沒有這個功能。


不過照Tessendorf paper上的公式,我看不出一定會符合對稱的條件(?),那這時候轉換出來虛數的部分代表甚麼呢?感覺上已經到達我數學能力的極限了,數學只要不用,實在是退化的非常快阿...還好工作上都用現成的library,幾乎所有東西都是黑盒子啦,難的東西都交給別人寫就好...

一些相關reference

Wednesday, October 20, 2010

OpenCL & FFT ocean wave

應該是錯的,出現一堆極高頻波,Fourier Transform我從來就沒學好過。

FFT kernel是Apple的library,2D FFT 256 x 256在8600M GT上花費約0.082 ms,已經相當快了,不過聽說CUFFT(Cuda的FFT)速度比OpenCL更快。

Thursday, October 7, 2010

Z prepass & alpha test

我想我終於真正領悟了Z prepass renderer的奧義,我們的場景裡如果有很多alpha test的物件例如樹的話,效能常常會下降很多,這是因為alpha test的物件沒辦法有early Z,所以所有的pixels都會執行pixel shader,但如果在Z prepass架構下:

第一個pass用最簡單的shader,開啟alpha test,把樹的Z值寫到Z buffer。
第二個pass執行真正的複雜的shader,Z function用equal,然後把alpha test關掉,因為Z test已經可以把樹刻出來拉,如此複雜的shader就有了early Z的效果。

今天測試了一下,有些樹的效能可以從0.7ms提升到0.2ms以下。當然,樹如果用了alpha to coverage,這個方法就沒辦法用了,幸好我們的場景沒有這種樹。

Thursday, September 16, 2010

Halo Reach

...is great.

solo campaign is not much different from halo 1,but 30 seconds of fun is still great fun

Tuesday, September 14, 2010

Some OpenCL test. pt2.

繼續紀錄OpenCL的瑣事。

我覺得OpenCL很不錯的地方之一,在於它的一些專有名詞命名都還滿符合直覺,不會像有些想要耍帥的技術取了一堆像是warp啦,thread block啦之類很難一下子就理解的怪東西。

OpenCL的一個device就是一個cpu或一個gpu,一個device就有一個相對應的job queue可以把工作丟進去讓device執行,至於一個device有幾個核心或是一個job如何scheduling,我們不用理會,OpenCL會幫我們處理。

一整個要被執行的job大小叫做global work size,global work會被切分成一些被放在一起執行的單位叫做work group,work group的大小叫做local work size,work group裡面包含了很多的單一工作叫做work item,我們要寫的kernel,就是一個單一work item要作的工作。

個人是覺得相當直覺,看一眼就知道在幹嘛,如果有寫過shader,幾乎是一樣的流程,只是OpenCL在memory的存取上,少了一些shader的限制

1.每個work item中可以有自己的private memory,這相當於shader中的一些local register

2. 同樣work group中的work items,可以存取一小塊分享的local memory,據nVidia的文件local memory速度相當快,這有點像shader的uniform變數或constant buffer,不過shader的uniform變數是不能寫的,kernel則無此限制。

3. 所有work item都可以存取global memory,可是速度就比較慢,這可以想成是GPU的texture memory,不過在shader中是不能寫到任意貼圖記憶體位置的,kernel同樣無此限制。

4. 存取global 或local memory,都可以用一些atomic的運算,如atomic_add,來確保運算結果是正確的。

Some OpenCL test. pt1

有很長一段時間沒有在網路上寫任何東西了,主要原因是因為覺得自己寫的東西都非常不成熟,總是夾帶太多個人的不成熟看法,通常過了兩三個月看自己的文章都覺得很羞愧,也不像某些前輩高人的blog有一些真的技術內容可以學習,so,不想浪費時間的人可以直接跳去看我的blog list,那些連結裡面可以學習到真正的智慧。

如果要浪費時間...之前我是有寫了一些OpenCL的code啦...


一些連結:
它的spec寫的真的還不錯,看一看就會寫了
http://www.khronos.org/registry/cl/

AMD的OpenCL convolution tutorial,我測試用的kernel是抄他的code,他測試平台是在CPU上跑的,global work size非常大,8192還多少的,在我的nVidia 8600M上完全是沒辦法跑的,要降到512*512才可以http://developer.amd.com/gpu/ATIStreamSDK/ImageConvolutionOpenCL/Pages/ImageConvolutionUsingOpenCL.aspx


一些簡單的心得
1. stream programming model,寫kernel很簡單,看起來跟c語言幾乎是一樣的,但是目前仍然有些限制,例如pointer dereference不能使用->而一定要用array的形式,然後不能用recursion,這些限制在Cuda是不存在的,但是實用上要寫高效能的kernel可能也不會需要用到這些。

2.使用OpenCL已經可以做出許多超出傳統shader的運算,如scatter operation,atomic/synchronization primitive

3. OpenCL適用於異質多核心,只要硬體廠商有提供OpenCL的driver,同樣的code可以編譯成CPU,GPU,SPU,xxPU的版本,AMD的fusion大業似乎是想要建立在OpenCL上。

4.硬體架構對kernel的效能影響應該非常大,AMD的convolution kernel最佳化在GPU上完全沒有作用,想要寫高效能的kernel,底層的硬體是無法被抽象化的。

4. rant......要在nvidia上的卡運行OpenCL要先去下載Cuda Toolkit,我個人是覺得nVidia想要降低OpenCL的使用率吧,所以把OpenCL也包在Cuda裡面,聽說他們的OpenCL也是架構在Cuda上,所以OpenCL的效能要比直接用Cuda要慢20~30%。他們的OpenCL driver也不是太穩定。我的想法是我們應該不要使用只支援nVidia GPU的Cuda,OpenCL才是正確的道路。

5.測試AMD的convolution kernel,8600M GT大約比single thread Core 2 Duo 2.2 G快3倍左右,不過兩個平台都沒有做任何有意義的最佳化就是了。

6.如果是box filter(也就是average),OpenCL可以做到一些shader做不到的最佳化,之後有時間再寫吧,詳情可以看這個連結http://pixelstoomany.wordpress.com/2007/09/13/why-gpus-are-not-so-good-at-post-processing-images/。其實我原本以為它可以適用於一般的convolution的,不過有個聰明的傢伙一下子就看穿了是不行的,有沒有天分從這裡就看得出來了....

Wednesday, April 21, 2010

drawing single triangle is as easy(as hard) as drawing millions of triangles



Single triangle rendered under Mac OS X using OpenGL and Cg.