作者Jerrynet (我愛Hot_game板)
看板Flash
標題[心得] Pixel Bender 在 Flash 中的運作機制
時間Thu May 22 21:16:23 2008
我也來分享跟Flash比較有關的吧~!
廢話不多說,直接進入主題:
Pixel Bender的濾鏡檔案要給Flash用需要先匯出成Bytecode,而此Bytecode和swf中
,ActionScript的Bytecode形式很像,這樣處理可以加快速度。而且在Flash中,Pixel
Bender Bytecode是用CPU運算的而不是GPU (因為若用GPU運算,有些電腦顯示卡老舊或很
慢,他們設計Flash Player 是希望在大部分99%的電腦中都能順利使用)。
此外,為了處理像素運算,Flash Player會另開一個Thread處理,以避免造成運算量
大時,會有無法回應的情況(如無限迴圈之類的),若使用者的電腦使用多核心CPU,也會分
配各核心一起運算以加快速度,因此這兩年的電腦執行起來應該是沒問題的。
而且,AVM執行JIT (Just In Time) Code (即轉譯過的AS Code)時,限制PixelBender
Kernel 的Buffer只能小於32KB,若是超過(例如複雜大量的運算),則速度會明顯變慢,約
慢10倍左右。
為了在不同電腦上執行,使用C語言編譯Flash Player,但每台電腦的CPU浮點運算和
編譯時的C Library定義以及電腦不同,所以Kernel運算出來的圖形很可能每個人看到的有
些微差異。又在蘋果電腦上,因為C 語言的 Math Library 有特殊的寫法,所以在蘋果作
業系統上執行某些Kernel會稍微快一點哦。
以下是幾點需注意的:
1. 因為在Flash Player 10 中支援Color Space,所以若用Pixel Bender濾鏡處理,會先
將像素進行Color Space 和Alpha處理才進行運算喔
2. 可以將濾鏡用在ByteArray, Vector, Blend Mode 和成為圖形的填充色
3. Pixel Bender裡的outCoord() 或是有牽涉到座標的,範圍在
-4194304 ~ 4194303 之間 (24bit)
4. 為了處理反鋸齒(Anti-Aliasing),每次像素運算會一次算4個像素
5. 在Flash中,Kernel 的判斷式只能用 if-else
6. Kernel不會進行cache , 所以每次執行(如圖形Fill,即generate類濾鏡)的話,都要重
新運算喔
以下是Flash Player 10 部分
1. 目前Flash Player 還在進行開發,但可以enable GPU mode,代價是frame rate =60
因為螢幕更新頻率目前大部分螢幕都是60Hz (這就跟顯示卡有關了,而且各顯示卡顯
示出來的畫面差異很大,而且Pixel Bender也不會在GPU下render,所以這是個沒用的
mode ?? 但是加快顯示速度倒是有些用......)
2. 正式版的Flash Player 10 出來速度會快一些,因為現在還在開發有限制部分功能...
3. 熱騰騰的Language Reference出來囉!!(注意,未來功能可能會改變,僅供參考)
http://0rz.tw/d34aV 按index開啟即可
4. 開啟GPU mode 不代表可以加速喔,需要看你的內容(廢mode?),不過反鋸齒做的比較好
,在Windows使用DirectX 9 (CJ Cat 看起來很需要XD),在Linux和Mac使用OpenGL
5. 其他新特性如讀取檔案和儲存檔案等,會開啟檔案瀏覽視窗,代表你不能在沒有經過使
用者同意進行暗地裡的檔案存取(這樣不太好....不過進步很多了),不過在瀏覽器裡一
樣可以使用喔(這樣就蠻不錯的)
6. ....等我想到orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.70.112.18
推 cjcat2266:呼呼...看來我的AuxGeom還保有它的地位XD 05/23 00:44
→ cjcat2266:...還有為什麼你覺得我需要DX9?我已經安裝了呀 @@?? 05/23 00:45
→ cjcat2266:話說,在Mac上面跑比Windows順很多,有什麼原因嗎? 05/23 02:08
推 BIAN:好文好文....推一個... 05/23 18:24
推 ComicMan:非常非常受用的資訊 05/24 15:24