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

阅读数:4960 2012 年 8 月 27 日 04:38

本次虚拟座谈会邀请到心动游戏 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,而且现在 Unreal Unity3D 都选择在 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 图形渲染技术方面欢迎大家关注《格斗高手》,在渲染效果上已经比较接近次世代的端游。

评论

发布