基于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/

时间: 2024-12-18 01:06:08

基于Adobe Flash平台的3D技术剖析的相关文章

WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化

在本篇文章中,我们将讨论WCF四大契约(服务契约.数据契约.消息契约和错误契约)之一的消息契约(Message Contract).服务契约关注于对服务操作的描述,数据契约关注于对于数据结构和格式的描述,而消息契约关注的是类型成员与消息元素的匹配关系. 我们知道只有可序列化的对象才能通过服务调用在客户端和服务端之间进行传递.到目前为止,我们知道的可序列化类型有两种:一种是应用了System.SerializableAttribute特性或者实现了System.Runtime.Serializat

WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿

原文:[原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析.在介绍IIS7.0的时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP的请求监听,在此基础上引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP.Named Pipes和MSMQ的网络监听,图1揭示了IIS7的总体结构. TCPListener|TCP Listener Ada

WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘

原文:WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 通过<再谈IIS与ASP.NET管道>的介绍,相信读者已经对IIS和ASP.NET的请求处理管道有了一个大致的了解,在此基础上去理解基于IIS服务寄宿的实现机制就显得相对容易了.概括地说,基于IIS的服务寄宿依赖于两个重要的对象:System.ServiceModel.Activation.HttpModule和System. ServiceModel.Activation.HttpHandler. 一.通过Htt

WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效

原文:WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效 本篇文章来源于几天前一个朋友向我咨询的问题.问题是这样的,他说他采用ASP.NET应用程序的方式对定义的WCF服务进行寄宿(Hosting),并使用配置的方式对服务的BaseAddress进行了设置,但是在创建ServiceHost的时候却抛出InvalidOperationException,并提示相应Address Scheme的BaseAddress找不到.我意识到这可能和WC

基于HT for Web 3D技术快速搭建设备面板

以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观.今天我们就在HT for Web的3D技术上完成设备面板的搭建. 我们今天模拟的设备是机房设备,先来目睹下最终效果: 我来解释下这个模型,一个带有透明玻璃门的机柜,机柜里装有5台设备,门可以开合,设备可以插拔,那么我么该如何搭建这样的设备呢?方法不难,我们一步一步来. 我们先从设备开始,设备的示意图如下: 看起来有模有样的,其实呢,它就是一个长方体,然后在长方体的正面贴上一张

Flash平台的分析与RIA的趋势

10月3号,Flash Player 11 和 AIR 3.0正式提供下载,一片安静.最近这两年来,关于Flash的新闻一向是以负面为主,先是 Silverlight 的挑战,然后是 iphone和ipad的不支持及html5的良好预期,Flash 看似风雨飘摇,明灭不定.实则不然.我个人观点:Silverlight成不了Flash的竞争对手,主要原因是商业层面的原因.html5还是初生婴儿,需要进一步观察.这些在本文后半部具体分析,本文重心还是Flash.通榆县仲超农化 Flash平台 什么是

Adobe Flash Player - imsoft.cnblogs

Adobe Flash Player是一个跨平台.基于浏览器的应用程序.运行时,它可以跨屏幕和浏览器原汁原味地查看具有表现力的应用程序.内容和视频.Flash Player实现了移动屏幕上的高性能优化,设计为充分利用本机设备能力,从而实现更丰富.更引人入胜的用户体验. Adobe Flash Player 16.0 两大新功能: 1.Windows/Mac PPAPI安装程序 PPAPI也就是Pepper Plugin API,是在原有网景NPAPI(Netscape Plugin API)基础

直播平台的相关技术(转载)

参考文章: http://chenbowen.baijia.baidu.com/article/472127 http://blog.csdn.net/cabbage2008/article/details/50582899 大流量.高并发场景下,大型直播的技术挑战一般体现在如下几个方面: 视频流的处理.分发 播放质量保障 视频可用性监控 超大直播间实时弹幕及聊天互动 高性能消息通道 内容控制,如算法鉴黄.文本过滤 系统可用性.稳定性保障 本文将针对其中的一些技术细节,抽丝剥茧,希望通过些许文字

转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)

转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的技术挑战 作者 陈康贤 发布于 2016年1月28日 | 2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 稍后阅读 我的阅读清单 前言:一直以来双十一都是以交易为重心,今年当然也是如此,但是这并不妨碍万能的淘宝将双十一打造的让用户更欢乐.体验更丰富.玩法更多样.内容更有趣