基於Adobe Flash平臺的3D頁遊技術剖析

寫在前面html


從黑暗之光,佛本是道,大戰神的有插件3D頁遊。再到現在的魔龍之戒。 足以證實,3D無插件正在引領頁遊技術的潮流。多線程

目前,要作到3D引擎,有如下幾個選擇。app

Image[1]

說到這裏,咱們發現。這些都不重要。 由於本文目的就是從頭至尾分析一下Adobe Flash平臺目前對3D遊戲的支持狀況。ide

 

言歸正轉工具


原本是想寫一些關於Stage3D、FlasCC以及基於Flash的3D頁遊引擎方面的文章。 也作了幾天的準備工做,但願把這些事情可以給你們(主要是公司項目組內的成員)分享,並理清頭緒。測試

然而就在週末準備資料的時候,我發現我須要解決的是平日裏開始過程當中常常問的一些問題。好比:優化

「咱們用哪一個版本的Flash Player比較好」ui

「在項目中使用了worker和mutex,不知道會不會提升對flash player版本的要求「spa

「AGAL 1.0,2.0,3.0的差別以及對應的FP版本是什麼」插件

諸如此類的問題在項目開發過程當中家常便飯。那要能準確回答這些問題,則須要對FP各版本的特性有一個充分的瞭解。就像下面這樣的一個二維表

Image(1)

在網上搜索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相關的內容進行補充和完善。如上所示

1、它提供了多線程支持。對於大型文件的解壓和解析,不會使遊戲形成卡頓了。

2、給Stage3D添加了一個‘受限’模式。 在受限模式下,Stage3D可用的資源相對而言會變少,可是能夠兼容更老的顯卡。

3、FLASH也提供了原生的LZMA支持。 這樣一來,咱們只須要將配置文件使用LZMA壓縮。而後ByteArray讀取後,採用LZMA解壓便可。 無需再集成第三方的解壓庫。

4、ATF支持ALPHA通道的壓縮格式。 同時,也添加了上傳紋理時,使用DXT壓縮的支持。

5、除開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的區別。以下圖所示

Image(5)

 

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特性差別比較以下圖

Image(6)

 

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的那張圖。同時,下面附帶了一張小圖

Image(7)

 

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。

在寫這篇文章以前,我想我沒法說服他。

可是有了這篇文章,我能夠明確地告訴他。

一、Flash Player 11.6 就足夠我作出畫質很NB的遊戲

二、Away3D 4.1.0 就已是一個穩定版本。

三、FlasC 1.0.1 就俱備了實用性

四、電信寬帶已經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:

http://gaming.adobe.com

FlasCC Reference :

http://www.adobe.com/devnet-docs/flascc/docs/Reference.html

FlasCC Blog:

http://blogs.adobe.com/flascc/

相關文章
相關標籤/搜索