寫在前面
從黑暗之光,佛本是道,大戰神的有插件3D頁游。再到如今的魔龍之戒。 足以證明,3D無插件正在引領頁游技術的潮流。
目前,要做到3D引擎,有以下幾個選擇。
說到這里,我們發現。這些都不重要。 因為本文目的就是從頭到尾分析一下Adobe Flash平臺目前對3D游戲的支持情況。
言歸正轉
本來是想寫一些關于Stage3D、FlasCC以及基于Flash的3D頁游引擎方面的文章。 也做了幾天的準備工作,希望把這些事情能夠給大家(主要是公司項目組內的成員)分享,并理清頭緒。
然而就在周末準備資料的時候,我發現我需要解決的是平日里開始過程中經常問的一些問題。比如:
“我們用哪個版本的Flash Player比較好”
“在項目中使用了worker和mutex,不知道會不會提高對flash player版本的要求“
“AGAL 1.0,2.0,3.0的差異以及對應的FP版本是什么”
諸如此類的問題在項目開發過程中屢見不鮮。那要能準確回答這些問題,則需要對FP各版本的特性有一個充分的了解。就像下面這樣的一個二維表
在網上搜索flash player特性與版本號的對應關系無果后,我最后決定自己來。 從各個版本的release notes中提取想要的這個信息。
而要。我打算從Flash Player第一個支持3D加速的版本開始。通過各個Flash Player版本的特性更新,以及周邊支持來分析出Adobe Flash目前對3D支持的情況 。
Adobe Flash Player各版本中與3D游戲相關的特性進化史
Flash Player 11 and Adobe AIR 3 (October 4, 2011)
Release Notes: https://release-notes-flash-player-11.html
• Stage 3D Accelerated Graphics Rendering (Player & AIR desktop + AIR for TV)
這是第一個支持3D加速的FP版本。FP通過Stage3D提供了GPU的3D加速支持,但是這個版本還不支持移動版本。
Flash Player 11.1 and Adobe AIR 3.1
Release Notes: https://developer-releases-notes-11_1.html
這個版本并沒有什么值得關注的特性,主要是修復BUG和提升對Android的支持力度
Flash Player 11.2 and Adobe AIR 3.2 (March 28, 2012)
Release Notes: https://release-notes-developer-flash-player.html
• Stage3D for Adobe AIR (mobile)
• Mouse Lock
此版本提供了mobile版本的GPU加速支持。
另外,還增加了一個鼠標鎖的特性。可以讓我們無限制地滑動鼠標,但是這個只在全屏模式下有效。 在實現CS這種FPS游戲的時候非常有用。
與此同時,發布了游戲開發者頁面 http://gaming.adobe.com
Adobe Flash Player 11.3 and AIR 3.3 (June 8,2012)
Release Notes: https://developer-release-notes-11_3.html
• Full screen keyboard input
全屏模式下的鍵盤輸入。 在此版本之前,全屏模式下是不能進行鍵盤交互的。 這個特性是我們做3D全屏游戲不可缺少的東西。
這個版本沒有任何3D相關的新特性,只是增加了WIN8的支持。
Adobe Flash Player 11.4 and AIR 3.4 (August 21,2012)
Release Notes: https://fp_114_air_34_release_notes.html
•ActionScript Workers (Flash Player)
•Licensing support: Flash Player Premium Features for Gaming (Flash Player)
•Stage3D "constrained" profile for increased GPU reach (Flash Player and AIR)
•LZMA support for ByteArray (Flash Player and AIR)
•StageVideo attachCamera/Camera improvements (Flash Player and AIR)
•Compressed texture with alpha support for Stage3D (Flash Player and AIR)
•DXT Encoding(Flash Player and AIR)
這是一個相當重要的版本,可以說是自Flash Player 11.0發布后,第一次對3D相關的內容進行補充和完善。如上所示
一、它提供了多線程支持。對于大型文件的解壓和解析,不會使游戲造成卡頓了。
二、給Stage3D添加了一個‘受限’模式。 在受限模式下,Stage3D可用的資源相對而言會變少,但是可以兼容更老的顯卡。
三、FLASH也提供了原生的LZMA支持。 這樣一來,我們只需要將配置文件使用LZMA壓縮。然后ByteArray讀取后,采用LZMA解壓即可。 無需再集成第三方的解壓庫。
四、ATF支持ALPHA通道的壓縮格式。 同時,也添加了上傳紋理時,使用DXT壓縮的支持。
五、除開Stage3D本身,Adobe又引入了一項新技術 Flash Player Premium Features for Gaming 從鏈接指向的網頁介紹和FAQ中可以看出。 這個所謂的Premium Features,就是Adobe提供給開發者的,將C++等其它語言編譯為Flash Player的基礎API集合。 XC APIs 。 而其后推出的FlasCC,則是XC APIs的 C++綁定。 當年Unity發布FLASH平臺的時候,應該是直接使用的XC APIs。 目前在官網上已找不到XC APIs的東西了。 官方提供的鏈接也已經重定向到了游戲開發者頁面。 我猜是被FlasCC取代了。
Adobe Flash Player 11.5 and AIR 3.5 (November 6,2012)
Release Notes: https://fp_115_air_35_release_note.html
•Shared ByteArray
•Debug stack trace in release builds of flash player
shaderd bytes array用于減少workers通信時的內存拷貝
RELEASE下的TRACE,則讓我們在RELEASE的情況下更容易查錯
這個版本沒有任何3D相關的新特性,添加了Invoke事件支持。 即AIR EXE啟動的時候,可以傳遞參數。
Adobe Flash Player 11.6 and AIR 3.6 (February 2,2013)
Release Notes: https://fp_116_air_36_release_notes.html
• Separate sampler state for Stage3D
在此之前,我們只能用 tex ft0,v0,fs0<2d,linear,repeat>方式來決定一個紋理的采樣方式。 11.6提供了一個Context3D.setSamplerStateAt方法,使我們可以動態改變一個紋理的采樣規則而不用重建AGAL。
這個版本沒有任何3D相關的新特性,添加了一些iOS需要的特性。
Adobe Flash Player 11.7 and AIR 3.7 (April 9,2013)
Release Notes: https://fp_117_air_37_release_notes.html
•added Context3DTextureFormat.BGR_PACKED
•addedContext3DTextureFormat.BGRA_PACKED
新增了Context3DTextureFormat.BGR_PACKED和Context3DTextureFormat.BGRA_PACKED紋理格式。 注:BGR_PACKED = bgr565, BGRA_PACKED = bgra4444
添加了一些iOS需要的特性。
Adobe Flash Player 11.8 (July 9,2013) and AIR 3.8 (July 24,2013)
Release Notes: https://fp_118_air_38_release_notes.html
•Context3DProfile.BASELINE_EXTENDED
•Context3D.createRectangleTexture
新增了Context3DProfile.BASELINE_EXTENDED模式,在這個模式下,貼圖和RT的大小最多可以為4096*4096。
Context3D.createRectangleTexture創建一個用于RT的紋理
添加了一些移動端需要的特性。
Adobe Flash Player 11.9 and AIR (October 8,2013)
Release Notes: https://fp_119_air_39_release_notes.html
這個版本沒有任何3D相關的新特性,添加了一些移動端需要的特性和WIN8支持
不過,伴隨11.9,ADOBE提供了ASC 2.0 compiler。 據說可以提升編譯后的AS3代碼執行效率。
Adobe Flash Player 12 and AIR 4 (January 14,2014)
Release Notes: https://fp_12_air_4_release_notes.html
•Graphics: Buffer Usage flag for Stage3D
•Stage3D Creation of Context3D with Profile Array
如上
這個版本提供了Buffer使用標記。用于告訴顯卡,Buffer提交的數據是永久有效,還是臨時數據(一般用在動態填充的情況,比如粒子系統)。 能夠顯著的提升渲染效率。
同時,這個版本使我們在創建一個設備時,給一串profile,Stage3D會幫我們選擇最適合的那一個。這個一般是拿來做兼容性測試。 用于檢查設備支持哪一個檔位的profile。 而材質LOD,還是得自己做。
Adobe Flash Player 13 and AIR 13 (April 8,2014)
Release Notes: https://fp_13_air_13_release_notes.html
•New Stage3D Texture Wrapping Modes
•Stage3D Anti-Aliasing for Texture Rendering
這個版本使提供了更多的紋理環繞模式。之前只能是是否要repeat。 現在添加了clamp,并且可以分別決定U,V的wrapping方式。
為RT添加了MSAA抗鋸齒功能。
Adobe Flash Player 14 and AIR 14 (June 10,2014)
Release Notes: https://fp_14_air_14_release_notes.html
•Anisotropic Filtering
•New Stage3D "Standard" Profile
•AGAL v2.0
•MRT up to 4
•Context3DTextureFormat.RGBA_HALF_FLOAT
提供了各異向性紋理采樣方式,這種方式比雙線性采樣開銷大,但是效果會更好。
添加了新的 "Standard" Profile。 在這個Profile下。 AGAL v2.0可用。 MRT(4) 可用。 浮點紋理 HALF_FLOAT (FMT_F16)可用。 至于AGAL 2.0和1.0的區別。如下圖所示
Adobe Flash Player 15 and AIR 15 (Sept. 9,2014)
Release Notes: https://fp_15_air_15_release_notes.html
•Relaxing Stage3D Render Target Clear
•Stage3D “Standard” profile support for iOS and Android
之前的版本中,要求present必須配套使用clear操作。 現在不用了。 這樣就可以讓多個RT共享深度信息。
將上一個版本的 "Standard" Profile上到移動平臺上。
Adobe Flash Player 16 (November 9,2014) and AIR 16 (January 13,2015)
Release Notes: https://fp_16_air_16_release_notes.html
•Stage3D Wireframe Mode Support
•Stage3D - Standard Constrained Profile
支持線框模式,不過僅限于AIR版本的桌面環境
支持受限的Standard Profile
各Profile特性差異比較如下圖
Adobe Flash Player 17 and AIR 17 (March 12,2015)
Release Notes: https://fp_17_air_17_release_notes.html
•Stage3D - Standard Extended Profile for AIR Mobile
支持 Standard Extended Profile。 也就是傳說中的AGAL v3.0。 但是這個版本只對移動端有效。 是的,你沒有看錯,這個版本中,移動端先有。 PC還要等一下。
AGAL v3的東西,可以參考上面Flash Player 14的那張圖。同時,下面附帶了一張小圖
Adobe Flash Player 18 and AIR 18 (June 9,2015)
Release Notes: https://fp_18_air_18_release_notes.html
• Stage3D - Standard Extended Profile for Desktop
• ETC2 Support for ATF
嗯。17版本的承諾,在這里兌現了。 PC也可以用AGAL 3.0了
ETC2就是帶透明通道的ETC,不過是ANDROID用的。
Adobe Flash Player 19 and AIR 19 (Sept. 9,2015)
Release Notes: https://fp_19_air_19_release_notes.html
• Improved Stage3D Error Messages
加強化Stage3D的錯誤信息機制。 就是說,如果實在不好查錯,不妨試試高版本的FP編譯。 看看能不能快速定位錯誤。
Alchemy --> FlasCC --> CrossBridge
Flash Player暫時放一邊,我們來說說Adobe游戲技術中,另一個主要成員 FlasCC。
之所以本文還叫它FlasCC,是因為這是Adobe給它的正式的名字。它的主要功能就是將C++代碼編譯為SWC和SWF,以供在FLASH平臺上使用。
它的前身叫Alchemy,是一個試驗性的東西。 網上很多AS3嵌入LUA的教程,用的就是這個版本。
后來Adobe在2012年12月4日正式發布了 FlasCC 1.0.0。試圖讓一些端游公司能夠借用這個技術,快速地將游戲移植到頁游平臺。 試想,這是一個多么棒的策略啊。 似乎所有的端游CP,在一夜之間,就成了ADOBE的人。 可惜此版本因為編譯出來的包巨大,以及很多端游采用的其實是D3D,并非OPENGL。 FlasCC并未得到太多團隊的認可。
FlasCC在2013年2月7日發布了1.0.1版本。 做了許多優化。 而團隊博客上最后一篇文章是 2013年3月18日。 說了一些關于編譯和優化的建議。 此后,再無消息。
此后在Github出現了CrossBridge。 其更新也停止在了2014年。
Away3D
Away3D,Flare3D,Alternativa3D等引擎在Adobe發布FP 11的時候,都不約而同地發布了第一個3D加速版本。 此后的一年里,更是窮追猛打。一口氣更新了許多個版本。 首當其沖的應該要算Away3D。 拉到了Adobe的投資,建立了Away Fundation。 同時,被收入到了 Adobe Gaming SDK中。
然而,這個引擎在2014年1月24日,發布了4.1.6后,再也沒有發布過新版本。 團隊博客最后一篇文章是2014年7月26日。
結束語
本意是想寫一篇描述Adobe對3D技術的支持情況和未來可能的發力程度。 不想挖出了這么多黑歷史。 而最關鍵的因素就是時間。
我們可以看出。Flash Player 11.6是一個穩定且可用的版本。 在這個版本中,我們可以使用Adobe的Stage3D加速功能,可以使用多線程,可以使用FlasCC做復雜的數學運算。可以在全屏下無限制地移動鼠標和做鍵盤操作。 可以使用ATF進行紋理格式壓縮。
同時,也有像Away3D一樣的開源或者商業引擎使用。
然而,2013年底到2014年初。 Adobe似乎停止了Stage3D和FlasCC方面的開發工作。 從后面的FP版本更新內容看來,僅是對Stage3D做了一些小的特性支持。 并且加強對移動平臺的支持力度。
同時,FlasCC以CrossBridge的方式在Github上出現,到2014年初也停止了更新。
Away3D亦是如此,Away3D的Github也停止在了2014年。
緊接著,Adobe將Flex SDK交給了Apache,以及關閉大中華區研發部門。
我想這可能是Adobe的資金出現了問題。導致了一些工作重心的轉移。 Adobe畢竟最賺錢的還是它的PS,AE,FLASH IDE工具。
最近也有很多朋友問我,用Flash做3D頁游靠譜么? 為什么不直接用WEBGL。
在寫這篇文章之前,我想我無法說服他。
但是有了這篇文章,我可以明確地告訴他。
1、Flash Player 11.6 就足夠我做出畫質很NB的游戲
2、Away3D 4.1.0 就已經是一個穩定版本。
3、FlasC 1.0.1 就俱備了實用性
4、電信寬帶已經20MB普及了
更何況,Flash Player 17已經把Stage3D推到了Opengl ES 3.0的高度。 還有什么實現不了呢!
這篇文章確實沒有對Stage3D,FlasCC,Away3D做詳細的分析。 待我有空,再向大家尾尾道來! 謝謝捧場!!
參考資料:
Flash Player Release Notes:
https://helpx.adobe.com/flash-player/flash-player-releasenotes.html
FP & AIR Feature List:
http://www.adobe.com/devnet/articles/flashplayer-air-feature-list.html
AGAL Binary Format:
http://help.adobe.com/en_US/as3/dev/WSd6a006f2eb1dc31e-310b95831324724ec56-8000.html
Adobe Gaming Website:
FlasCC Reference :
http://www.adobe.com/devnet-docs/flascc/docs/Reference.html
FlasCC Blog:
文章列表