基于Adobe Flash平台的3D页游技术剖析

写在前面


从黑暗之光,佛本是道,大战神的有插件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:

http://gaming.adobe.com

FlasCC Reference :

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

FlasCC Blog:

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

posted @ 2015-11-09 23:55 麒麟子(Alex) 阅读(...) 评论(...) 编辑 收藏

基于Adobe Flash平台的3D页游技术剖析相关推荐

  1. 青果灵动刘睿:3D页游将有更多机会

    中国游戏市场的变化是如此之快,前两年还被纷纷看好的页游行业,自去年手机游戏崛起之后就一直被人们所唱衰.众多大大小小的游戏研发公司纷纷转型手游,造成了今日手机游戏市场的火爆,而相比之下,页游行业或多或少 ...

  2. 奇虎360支持Unity引擎 将推3D页游无插件安装

    导读:奇虎360与Unity引擎合作,欲在今年9月推出3D画面网页游戏.游戏将实现"即点即用"的无插件体验. 新浪游戏讯 5月30日消息,奇虎360今日召开媒体发布会,宣布与Uni ...

  3. 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 基于结构光测量技术和3D物体识别技术开发的机器 ...

  4. 转:3D游戏引擎技术剖析

     转自 http://blog.csdn.net/jbjwpzyl3611421/article/details/12681047 3D游戏引擎技术剖析 分类: Unity3D2013-10-13 1 ...

  5. 3d页游开发_大翅膀等于页游风?天谕手游扭转印象,阿云嘎同款黑翅膀最有排面...

    很多年前,许多页游都会推出夸张的广告,用五颜六色还镶金的大翅膀吸引玩家的眼球,等玩家打开游戏一看,发现这些翅膀都是些粗糙的贴图,有的甚至不能动.这种粗制滥造的骗局让很多玩家一看到游戏里有翅膀,就以为是 ...

  6. html5 霸刀,基于Html5技术研发3D页游《霸刀》3月28日首测

    今日,亦乐互动正式公布了旗下首款 <霸刀>是一款基于最新Html 5技术,采用Flyloong2引擎制作的全3D大型多人在线网页游戏.与传统Unity 3引擎不同,Flyloong2引擎技 ...

  7. html5 霸刀,基于Html5技术研发3D页游《霸刀》公布

    今日,亦乐互动正式公布了旗下首款网页游戏<霸刀>,并宣布首次技术封测将于3月28日正式开启. <霸刀>是一款基于最新Html 5技术,采用Flyloong2引擎制作的全3D大型 ...

  8. html 3d手机,Egret 3D:国内首款全功能手机页游3D引擎亮相

    由白鹭时代主办的HTML5移动生态大会于12月5日在北京正式召开.会上,由白鹭时代自主研发的国内首款开源免费的全功能手机页游3D引擎--Egret 3D正式亮相,引发多方关注. 随着硬件能力的提升.W ...

  9. 资深开发者告诉你“页游转手游”应注意的五大点

     原文地址:http://www.gameres.com/663528.html 27 分钟前 上传 下载附件 (1.34 MB) 打开App Store,可以发现在畅销排行中前五的位置已经被拥有 ...

最新文章

  1. 量子计算机人类意识云,意识上传-人类距离永生还要多久(大脑的工作原理很有可能与量子计算机一致)...
  2. AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换)
  3. 关于第十五届深度学习组比赛中前三支队伍使用网线问题调查
  4. IDEA 出现 updating indices 卡进度条问题的解决方案并加快索引速度
  5. applicationContext.xml 配置文件的存放位置
  6. mysql存储表情测试_Mysql正确的储存处emoji表情
  7. HTML转存问题测试
  8. spring注入私有字段_Spring字段依赖注入示例
  9. linux创建环境变量有什么用,环境变量和shell变量到底有什么区别呢?
  10. docker使用_Docker的基本使用
  11. 记一次奇怪的debug:Tomcat部署网站每一个页面第一次打开404刷新后才正常显示...
  12. 用VC实现洪水***程序
  13. 开源跨平台GUI库Fltk在Deepin Linux下的使用
  14. 美丽中国 纪录片 高频词 GRE 托福词汇
  15. opencv-python DIS光流
  16. DJ2-1 进程管理
  17. MAC下HFS,HFS+,HFSX文件系统 解析
  18. 文明距离(civil)
  19. 代码回滚,你真的理解吗?
  20. Python数据结构之树形结构——数组存储

热门文章

  1. DDoS攻击介绍及解决方案(阿里云)
  2. window.open 不打开新窗口_关闭四十年的“新窗口”,由谁打开?
  3. 美国互联网影视的盈利模式 ——HuLu模式
  4. Docker快速入门学习笔记-持续更新中
  5. 什么是资产阶级思想?
  6. MindManager带你了解何为网络暴力!
  7. 黄金分割在股票中的应用
  8. LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol
  9. 智能设备带来全新体验,打造未来智能生活
  10. 第六章 气体的压缩过程