BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Stage 3D:结缘、性能对比及相关开发框架推荐

| 作者 贾国清 关注 0 他的粉丝 发布于 2012年8月28日. 估计阅读时间: 18 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

本次虚拟座谈会邀请到心动游戏Pan、魔方工作室崔波、Adobe Flash Run Time Team廖诚以及上海松果网络负责人吴将,就各自与Stage 3D的结缘、新版Flash Player发布、相关开发框架以及性能问题进行讨论,以下是本次访谈的详细内容: 

InfoQ:请先做下自我介绍。

Pan:我是pan.现在在心动游戏做开发,我们的项目《盛世三国》是一款2D MMORPG网游。

崔波:我叫崔波(popple),06年加入腾讯,现就职于互动娱乐事业群下属的魔方工作室,负责前端技术工作。

廖诚:大家好,我是Adobe Flash Run Time Team的廖诚,热衷于Flash技术的应用,同时我也喜欢在开源社区贡献力量,是Away3D项目的贡献者。

吴将:上海松果网络负责人,国内最早涉足Stage 3D的开发者之一。2000年到2009年,专注于大型网络游戏的开发。2010年,涉足网页游戏的开发,将大型网络游戏的开发经验与Flash 11相结合,擅长次世代渲染技术在Flash 3D游戏中的应用。

InfoQ:谈下与Stage 3D的情结,最近在从事哪方面的工作?

Pan:其实我接触Flash是从Flash 5 就开始了,那时候,AS还局限在gotoandplay和stop等简单脚本来控制影片剪辑的年代;早在还没出Stage 3D之前,Flash Player 10就出现了用CPU绘制3D的API,相信在那个时代搞过3D的人都应该看过动物园这个作品,即使拿到现在来说,都是相当漂亮的。所以当时觉得很神奇,喜欢上了3D的表现方式,开始使用2D模拟3D的方式来做一些东西出来。等到Stage 3D测试版本发布时,第一时间就用上了。在GPU的渲染模式下,基本不在会受模型人面数约束了。之前也有看过Stage 3D的Demo,那是相当漂亮的。觉得Stage 3D,将会是一片新的天地。最近一直在写一个基于Stage 3D的引擎。当然这是一个长期的工作。

崔波:从Molehill刚出来的时候就开始关注它。起初是有些惊慌,因为Stage 3D是Flash领域内全新的技术,我对它却一无所知。在慢慢了解之后就更加迷惑了,因为知道的越多,越觉得什么都不懂。一段时间内非常着迷的学习Stage 3D知识,目前依然在研究Stage 3D在2D方面的价值。个人更看好Stage 3D给2D领域带来的惊喜,至少目前是看得很清晰的,3D方向还需要观望。

廖诚:Stage 3D是Flash运行时的重量级的功能,它极大地增加了Flash在游戏领域的应用,而我曾经又是从事游戏开发的,所以是很早就对这项技术非常感兴趣,并且一直在做着和它相关的工作。目前Flash在3D领域积累的资源不是太多,所以我做了2个开源项目:粒子系统和特效编辑器,这里有一个Demo和一些示例,大家可以关注一下。

吴将:最早得知Stage 3D是在2011年春天,从互联网上看到了一个国外可能是Adobe官方的Stage 3D的范例,就一个彩色的三角形显示在屏幕上,三个角分别是红、绿、蓝颜色。于是就开始尝试将该范例的代码调试到本机能够运行,结果可能是当时对AS3还不大熟悉,而且AGAL的编写方式与传统的代码编写完全不一样,国外又几乎找不到资料。搞了一个礼拜都没运行起来。屏幕漆黑一片的时候真想砸了显示器,还好后来上手之后就比较顺利了,有一天凌晨的时候终于让三角形能够显示了,稍微改了一下代码,让5000个彩色三角形在屏幕上乱飞,特别有成就感。
最近还是在做我们的Stage 3D项目《格斗高手》,这是一个次世代级别的页游,对AGAL的编写有较高的要求,正在努力将端游的渲染技术全部移植到Stage 3D上。http://shipin.youxigu.com/guonei/2012-04-13/24867.html
以上是我们的游戏视频地址,互联网上也有一些该游戏的资料。欢迎百度搜索“格斗高手 页游“。

InfoQ:Adobe官方网站labs.adobe.com放出了Flash Player 11.4和AIR3.4的第一个公开测试版本,对于这个版本对Stage3D的应用和实践将会产生何种影响,请谈下您的理解?

Pan:很高兴看到Adobe对Flash和AIR平台的持续更新,这对于开发者来说是个好消息,越来越多的特性的加入,意味着可发挥的空间和可利用的资源就更多。

崔波:11.4的版本在驱动支持这块推进到06年,虽然看起来是一件非常有利好的事情,但是,可能经不起数据推敲。因为现在的游戏在设置性能基线的时候可能都没法考虑到06年的配置了,而且越往后推,这个支持越无意义。除此之外,其他的新增特特性多少会让Stage 3D更完整,或者间接有帮助。其实现在CPU已经成为瓶颈了,期望后面的版本能多影响一下CPU端的效率。

廖诚: Flash Player 11.4和AIR3.4 提供了一个重量级的功能——Workers,是大家期盼已久的“多线程”功能,这里打上引号是因为它并不是传统意义上的多线程功能,而是出于安全性的考虑做了内存隔离的一种近似的多进程。现在大家借助这个功能可以让自己的程序充分利用现代计算机多核心的特性,极大提高程序的性能。

吴将:我觉得Flash Player最近的更新速度很快,许多研发游戏迫切需要的功能都在逐步更新,Adobe还是很了解游戏研发者需要的功能的,比如ATF贴图,可以节约大量的显存,提高可以申请贴图的数量。从而可以做出更大更精致的场景。还有就是多线程Workers也是很需要的,现在的CPU基本都是多核的了,有了这个东西可以解决资源读取时的卡顿问题。当然应该还有更广泛的应用,我们才刚刚开始学习和摸索中。相信随着FlashPlayer的升级,过不了多久页游的画面会非常逼近端游。

InfoQ:Stage3D和WebGL都是在浏览器中创建交互3D内容的优秀技术,在技术选型方面,您对开发者有哪些建议,在应用场景选择上,如何来取舍?

Pan:一直都从事Flash方面的开发,没有机会了解过WebGL的底层。 就个人感觉,Stage 3D会让Flash Player的表现能力更加完美。最近关于Flash和HTML5的争论很多,从运行环境来说,在国内浏览器市场,能支持HTML5运行的浏览器份额少之又少,而且IE6一直占据浏览器份额的大头,这将极大程度限制WebGL的发展,从开发环境来看,3D不仅仅是展示3D的画面,更多是和用户的交互、游戏的应用,经过网页游戏这几年的发展,Flash对于游戏以及应用的处理(包含资源管理,网络通信等),已经有了一套完整的解决方案,WebGL对此则属于刚刚起步阶段,总之在PC端Stage 3D相对WebGL的优势还是相当大的。

崔波:WebGL的问题远比Stage 3D大的多,太多的不确定性。如果只是技术show,那么无关紧要,实际项目是没有理由选择WebGL的,因为每次我向别人推荐一个WebGL的demo时都要告诉他一定要使用什么浏览器。WebGL的问题跟HTML5有的一拼,甚至更大。在国内市场,很大程度取决于微软。

廖诚:个人觉得在游戏领域还是用Stage3D比较好,跨平台支持好,在桌面可以用浏览器,在移动上可以打包成AIR,而且现在UnrealUnity3D都选择在Flash平台移植他们的引擎,而不是在WebGl上移植。我想做广告之类的应用可以考虑WebGL,量级轻一些,移动设备的浏览器也能支持。

吴将:Stage 3D我们使用的较多,而WebGL几乎没有使用过,比较难做出评价。但是目前从我看过的互联网上的演示范例来看,Stage 3D的范例明显比WebGl渲染效果要好很多,我们目前自己已经选择了Stage 3D。WebGL我们会保持关注,但暂时不会投入精力做尝试。

InfoQ:网上一直存在着Stage 3D和WebGL的性能对比,对此您怎么看?

Pan:我相信单从性能上来说,取决于用户的电脑配置。那么用那种技术来实现你产品。就看你用那个工具实现所要的效果的时间了。当然开发人员更重要。

崔波:Stage 3D跟WebGl的性能对比了解的很少。同样作为底层渲染接口,即便有性能差距,应该也很快被拉平。我的意思是说这种原始接口不该有很大的差异。

廖诚:Stage 3D和WebGl调用的都是底层硬件的接口,性能应该主要取决于机器的显卡,在这两种机制下实现的性能理论上应该差不多。

吴将:个人感觉,这就像武侠世界里争论内功厉害还是外功厉害,其实使用什么功夫并不重要,而是使用功夫的人对功夫的理解与应用才关键。这两个都是很厉害的功夫,练到极致的话应该都可以打赢东方不败的。

InfoQ:您接触较多的第三方框架有哪些,请谈下主要的使用感受(比如 Proscenium、 Away3D、 Alternativa3D、 Flare3D、 Yogurt3D、Starling2D等)?

Pan:在这里,我极力推荐开发者使用Away3D。因为它开源的态度一直都没变。还有就是它的demo足够多,可以很好的找到学习资料。不会像Proscenium那样底层,也不会像Flare3D那样的会约束太多。当然,也要看你的开发项目的内容来决定。一般的展示,那就要选择针对性的引擎。总之没有哪个引擎可以又快,功能又强大,制作又简单的。总的来说我还是推荐Away3D。

崔波:第三方的Flash3D框架谈不上有什么接触,大概是因为我觉得我需要的是一个3D集成开发环境,而不是一个框架。 2D框架关注的比较多,比如国产ARE2D,他的Batch处理是很高效的。

廖诚:现在开源引擎里面最值得推崇的当然就是Away3D和Starling了,毕竟Adobe官方在支持,而且本身都是优秀的开源框架,社区热度很高,更新频率也高。Alternativa3D现在也开源了,但是热度要低一些。总的来说开源引擎是比较适合大家来学习研究的。Flare3D是商业引擎,给钱的话应该可以获得一定的技术支持,想用来做商业项目的可以考虑它。Proscenium是Adobe的试验性项目,我不太清楚它的下一步计划。

吴将:真是不好意思,我们主要使用自己全新开发的引擎,上述框架几乎没有深入的接触。

InfoQ:有网友反映学习Flash的前沿技术具有一定的挑战,无论是Stage3D、 Alchemy还是ANE等,从您的亲身经验上来讲,请对现在的开发者谈下您对学习相应的技术和实践都有哪些建议?

崔波:前沿技术的学习,个人觉得先要搞清楚新技术是为了解决什么样的问题而出现的。就Stage 3D来说,我们了解他的本质是引入3D接口。那么其实你要了解的是DX9,以及3D渲染流程,它是一套系统知识,而不是一个知识点。Alchemy的目的是为了移植大量的优秀的C/C++源码到Flash平台,ANE是为了扩展终端功能。学习这些知识难度不在于本身,而是要去了解另一个领域。

廖诚:Stage 3D是非常底层的调用接口,大家一般不会直接来操作它,大部分都是使用基于它的引擎。而引擎提供的接口就容易理解得多了。所以建议大家先熟悉一个引擎,如果有兴趣往深走的话,再研究Stage 3D的技术,其实也就是shader language的技术。这是计算机图形学的领域,如果之前没有这方面的知识积累的话,需要去补充一下图形学的知识,不然很难理解Stage 3D的技术。至于Alchemy和ANE,基本上还是应用级的开发运用,感兴趣的朋友可以先熟悉一下技术流程,然后不懂的再去查阅一定的资料,应该就可以掌握了。

吴将:技术都是互通的,传统端游的技术开发思想移到Stage 3D里也很适用,推荐大家一个系列的丛书《GPU精粹》。当然如果有条件的话直接加入一个Stage 3D的研发团队,在团队中学习可以避免走前人走过的很多弯路。

InfoQ:Adobe Alchemy技术可以让C/C++程序转换为Flash,许多开发者也在期待着Alchemy 2的发布,您对此有何期盼?

Pan:Stage 3D只是对Flash Player来说才刚开始,就显卡渲染来说并不是前沿的技术,都已经几十年了。 能做成什么都是知道的。 那么去慢慢学习适应它就可以了。从我个人学习来说。 在于积累,不需要说等Stage 3D各个方面很成熟,才去学习。通过现有的工具和前人的经验就能做出不错的产品。在3D方面,Flash相对于C++还是新兵,Alchemy 2的发布可以吸引更多的C/C++开发者参与到Stage 3D的开发中来,那么利用他们在端游开发中多年的经验,可以更快的推进Stage 3D的成熟。

崔波:对于Alchemy2,个人也非常期待。更多的是期待能有力证明其价值的项目分享出现。

廖诚:近期我正在研究Alchemy2,这又是一项和Stage 3D一样重量级的功能,它在Alchemy1的基础上做了很多提升,具体的技术细节我在这里不便于透露,还请大家多多关注Adobe Labs的消息,非常值得大家期待。

吴将:我本人对Alchemy目前是又爱又恨的,爱的是她的确是非常好的技术,可以使Flash的性能再次大幅提升,恨得是她太贵了,20%的分成目前真不是我们能承受的。目前我们观望中,如果她能降价就好了……

InfoQ:Starling, CopyPixel 和 Nd2D 同是显示框架,但在某些情况下CopyPixel的性能却好好于Starling,作为同样适用Stage3D进行硬件加速的Starling和Nd2D,效率或速度也会有明显差距,请分析下原因并能否给出建议?

崔波:有段时间也很喜欢做这种比较,但是要提醒开发者,这种性能比较的结果营养很低,反而会误导大家。学习加速引擎要掌握的是引擎设计的优点以及缺点,掌握引擎其实是掌握扬长避短的技能。
3D渲染的优势在于大量,并发的图形运算,CopyPixel只能算图形拷贝。所以,CopyPixel在特定情况下比Stage 3D更高效只能说明需求本身并不需要Stage 3D来完成。引擎之间也有各自的优缺点,通常考虑批处理的引擎会在图形渲染数量上占很大优势,也就是说使用者必须遵守批处理规则。

廖诚:估计是Starling没有最大限度的Batch绘制对象导致的吧,然后这个测试刚好抓住了这一点,这种用例在实际使用中应该是很少的。对于Stage 3D这部分的优化,原则上就是尽可能的减少显卡状态的切换,尽可能少的切换Program3D,Texture和Stream,简单的说就是减少Stage3D API的调用。建议大家具体问题具体分析,对于自己的项目先找出性能瓶颈,然后再针对性的优化,不要一开始就希望把所有代码都做到毫无性能冗余消耗。

吴将:这三个框架我没有深入研究,不敢提出建议,但个人感觉用Stage 3D做的模拟2D的显示框架,渲染性能足以应付2D游戏的需要了,估计千人国战都不卡,渲染性能应该都不是瓶颈了。

InfoQ:请推荐一个您认为比较成功的案例,并说明下理由或技术背景?

崔波:暂时没有接触到很深的案例给大家分享,相信业内有很多公司或者个人都在积极准备自己的Stage 3D项目,还得拭目以待。

吴将:很多国内厂商的Stage 3D项目非常优秀的,《深渊》《封神无双》《梦幻奇缘》等都代表了Stage 3D的最新技术。
如果是3D图形渲染技术方面欢迎大家关注《格斗高手》,在渲染效果上已经比较接近次世代的端游。

 

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT