《封神无双》介绍
《封神无双》是首款基于Flash11 Stage3D技术的3D MMORPG网页游戏。已于今年8月底正式内测,运营商是昆仑万维,研发公司为广州第九艺术网络科技。目前游戏处于调整期并在持续添加游戏玩法,同时进一步改善游戏性能,争取多方位提升游戏可玩性。

公司起源

广州九艺成立于2007年底,核心成员均从业10年以上传统客户端游戏开发,公司成立时产品和定位主要以PC客户端游戏为主,第一款2.5D MMORPG产品《古域》已由畅游代理运营至今。由于2010年后网页游戏势头迅猛,于是我们也于2011年初开始尝试网页游戏,这也就是封神无双项目的契机。

开发过程中5件对的事情

1、选择Flash11作为解决方案

主要因为Stage3D使开发web平台上基于硬件渲染的3D游戏成为可能。在2011年项目调研期,我们还在犹豫开发2D游戏还是3D游戏,虽然2D页游技术门槛低,风险小,但由于我们初涉页游领域,经验不足,在成熟的2D市场上难有竞争力,玩法也很难创新。相反3D虽然技术难度大,风险高,但是一种技术创新,熟悉传统3D开发的我们也有明显优势,而且我个人从技术人员角度更想开发3D游戏,在无插件3D页游方向,我甚至还为此研究过webGL,不过那时也还刚起步,现在都还没成熟(html5)。适逢stage3D第一版本molehill在那时推出,得知此消息后我们立即开始调研, 经过初步分析,有较大风险,但我们主要看中flash的普及率和浏览器集成 以及adobe公司的技术实力,最终还是选择用flash11来开发页游,选用一个还在孵化阶段的技术用于正式商业项目,在当时的确是一个很大胆的做法。不过随着项目基本成型后,并且Adobe有条不紊的跟进和更新最后release,这个风险也基本消除了,验证了我们当初技术选型的正确性,主要抓住了“无插件3D页游“这一先机。

2、 中期抛弃效率不甚理想的Away3D引擎,重写渲染核心,大幅优化效率

初期调研期间,为了快速开发原型已验证可行性,我选用了开源的Away3D作为渲染模块,包含在我们自己新命名的引擎DelatX当中。开源引擎是当时的最优选择,因为flash3D都是大家都是刚刚起跑,都是在尝试,问题也很多,能跟踪源码自己修改问题比使用一个不稳定的黑箱要安心很多。当时只推出了alpha版,bug很多,后来因为改动较大,我们也不再合并away3d更新。本来打算在它基础上继续开发,越来越发现效率实在跟不上,主要是渲染部分,很多基础算法就不是优化算法(比如骨骼动画、材质系统、shader集成),它想做大而全的图形开发包,但架构偏复杂,中间层过多,相对于我们端游的引擎的架构过于笨重过于缓慢。于是我们几乎抛弃了所有away3d的代码,只保留了一些纯粹的辅助包,基于简洁、高效的原则将整个渲染模块重写,摒弃不需要的,只留需要的代码,最后性能有大幅度提升。整块优化和重构工作(包括下面提到的另外3件正确的事情)主要是由我们的CTO柯达招操刀,我协助完成。

3、 采用Stage3D实现界面系统

项目初期,界面系统我是直接采用当时开源的aswing界面库,然后做一定扩展以兼容我们的界面系统(从端游移植而来)。初衷是想减少开发成本,但aswing也是相当庞大和复杂的,这个兼容过程也耗费了相当大的人力。后来由于目前stage3D的内容不能绘制在2D的flash元件之上,导致有些需求基于2D的界面无法实现,比如需要在界面上绘制3D模型和特效,后来考虑再三,决定除了主画面,界面也用stage3D来实现绘制,和3D的绘制统一起来,在项目中后期实施这个改动也是一大手术,整个过程持续接近一个月,但结果证明是正确的,不仅实现了需求,由于绘制转移到了GPU,CPU大幅下降,并且内存也降低了不少。

4、使用自定义ds格式shader解释器,提高shader开发效率

这个其实也属于渲染引擎重构和优化的一部分。因为我们发现书写AGAL的shader效率很低,调试也困难,而当时尝试过的pixelBender3D也有很多bug,几乎不能使用。汇编的书写主要麻烦在与寄存器的分配,比如mov vt0,v1; mov vt1, v2; 假如去掉了v1属性,那么需要修改所有v2为v1,临时寄存器的修改更是会影响到整段shader代码的调整。能否让我们不关心那些寄存器编号,只关注我们需要的变量和操作呢?比如mov temp, pos; mov anotherTemp, color; 基于这个原则,我们开发了一个轻量的解释器,输入刚才那段有具名变量的伪shader,指令集完全沿用AGAL,输出的则是原生的AGAL代码,寄存器全部由解释器分配好,无需人工干预。这大大简化了shader的开发,写shader不比高级语言麻烦多少,而且直接面对底层指令,反而更容易发现问题,对于复杂的计算,只要旁边附上高级语言的注释就可以了。目前这个解释器已支持基本替换变量、语义绑定以及函数(宏),以后还想添加的特性比如文件的include、寄存器按分量更精确分配等。

5、特效系统核心移植到GPU用shader实现

ActionScript3虽然在脚本语言中效率不算低,但终究还是脚本语言,性能难以和C/C++匹敌,尤其是CPU密集型计算更是差别巨大,导致原本我们在端游的特效系统移植到flash后有很大的性能瓶颈,所以做了很多制作上的限制。在项目后期,外界测试反馈的效率问题比较严重的情况下,我们不得不进行特效系统的优化,主要方案是把性能瓶颈的特效更新代码移植到GPU用shader去实现,as端只传输基本的数据和参数,不做多余的计算。这部分优化也让特效的限制基本解除,效率和效果都有显著提升。

开发过程中的5个问题

1、性能需要进一步优化

虽然我们一直强调性能,并且胜于画面(首先要让玩家能玩),也投入了很多时间在优化上,但似乎已经到了一个瓶颈,受限于flash虚拟机本身,所以还没有完全达到预期的结果。另外我们有一个比较隐晦的内存泄露也还在排查当中,目前并没有发现太好的内存分析的工具,包括能分析flash内部对象如BitmapData、String等对象内存。Monocle是一个很好的性能分析工具,据说新版本会添加内存分析功能,值得一试。

2、逻辑代码的质量审核需要加强

《封神无双》在画面上做出了一定水准,效率也不错,但这只是游戏的基础,游戏的主体功能目前还存在不少bug,影响到用户体验,也会导致玩家流失。我们团队规模较小,很多流程也不太正规,开发节奏比较快,导致代码质量的把关上出现了脱节,这也是日后需要重点改善的地方,我们需要的是更高质量的产品。

3、加强团队内部的培训

这其实和上一条有关联,在新人培训上我们还停留在传帮带和放在一边自己啃的层次,很多东西包括项目的系统讲解、常规开发事项等都应该在前期开始就贯彻执行,降低开发期间的重复工作,提高开发效率。

4、尽可能带动解决flash11的兼容性问题

flash11虽然带来了技术的变革,把3D搬到了网页,但变革的路都是曲折的。比如低端显卡兼容性、旧驱动的兼容性,右键开放后和浏览器自带手势的冲突问题,chrome浏览器安装多个版本flash插件的冲突,这个bug甚至会引起stage3D回退到软件渲染,还有其他一些影响玩家进入的问题。毕竟我们是第一个吃螃蟹的,从用户那里得到了很多关于flash插件的问题,也积极反馈给adobe以求解决,但这是一个漫长的过程,随着这些问题的逐个解决,我们才能真正说flash3D页游普及到90%的PC端以上。

5、处理用户反馈的速度

这方面我们还远远不够,这需要在各方面下功夫,人力问题、个人解决问题能力提升、游戏更新方式的优化等,比如做通过后台入口做游戏的线上修改,迅速地处理问题,这是玩家和运营商都喜闻乐见的。

技术与效率

选择Adobe技术理由是跨平台,开发效率高,容易学习。作为网页游戏的主打平台flash的开发商,没有理由不去选择。

目前在使用Adobe的解决方案有:

i. Flash Player 11.4, Stage3D
ii. Flash Builder 4.5
iii. Monocle

如何实施Adobe解决方案

游戏的实施和传统网络游戏开发没有区别,策划定好世界观,做系统的设计,提出明确的需求交给美术和程序去实施。美术部分主要是用3dsmax、Photoshop/Coraldraw/painter等传统艺术工具进行基本素材编辑,然后导入自研的美术工具集加工处理成支持我们游戏引擎的资源格式,最后由程序调用并呈现在游戏当中。游戏区别于其他页游主要还是在基于flash硬件加速的3D游戏这一技术创新点上。

Adobe解决方案(AIR, Flash, Stage 3D等)本身的独特优势

Stage3D 高性能的跨平台3D图形API 极大的提升异于传统页游的表现力,接近客户端游戏效果,借助flash本身的高占有率,这一优势会让其他跨平台3D技术短期很难超越,flash平台也被Unity、Unreal等游戏引擎商看中,flash导出也成一趋势,因为潜在的用户是非常可观的。

Adobe解决方案带来的项目收益

开发效率相对传统端游C++开发有大幅提升,主要体现在编译时间的大幅降低,以及语言和平台本身的易用性。Monocle的使用也大大减少查效率问题的时间,因为它能非常快并准确的定位到效率瓶颈之处。

分享该游戏的制作经验
由于初次接触页游开发,遇到许多flash传统开发的常见问题,也适逢flash11的各种变革,一方面我们要虚心向传统flash开发人请教学习开发心得,一方面在要积极跟进adobe,及时反馈,及时采用新的方案和工具(比如monocle),减少弯路。

性能永远优于画面。页游用户对画面要求并不如端游高,所以对画面的追求要有个度,玩家的体验主要还是看性能和流畅度。第一是下载效率和加载效率, 最快的让玩家进入游戏,资源量和资源大小的控制要达到极致才行,我们已经做过很多努力,贴图的jpegXR压缩,文件的swf压缩,并行的下载队列等等。第二是游戏运行效率,包括渲染效率和操作流畅度,因为CPU方面是瓶颈,GPU方面性能并不是优化重头,提高as代码执行效率,降低CPU占用是关键,借助性能分析工具也能达到一定高度。

要明确区分页游和端游的开发。要认清他们的本质区别,而不仅仅是把端游或者主机游戏移植到网页端,除了减少下载外并无太多意义。页游注重休闲和零碎时间的利用,注重用户体验,并尽可能的降低用户操作,所以如果你是要移植已有的端游,在游戏系统得做大量调整,UI/UE也要做很多优化。

团队目前进行的工作以及未来的项目

目前我们着眼于性能的进一步提升,以及游戏玩法的丰富和游戏bug的修复。另外公司正着手进行基于ActionScript3和C++结合的游戏微端开发,基于avm2开源虚拟机和底层C++ DirectX图形引擎,以充分利用ActionScript的高开发效率以及C++的运行效率。未来可能会尝试移动平台的游戏研发。

Flash11 Stage3D游戏《封神无双》制作团队专访相关推荐

  1. 游戏封网卡mac地址后修改网卡mac地址

    MAC地址,也就是网卡,对于单网卡来说是唯一的(64位)十六进值的物理地址,它是在出前厂就已经分配好了的. 每一个物理设备都有一个唯一对应的MAC地址,MAC地址绑定IP地址,是网络管理常用的一种方式 ...

  2. 双截龙java游戏下载_双截龙合集游戏

    双截龙合集是已中国已故明星为样本而设计的一款游戏,双截龙合集由TECHNOS推出的街机动作游戏,目前已经有4部问世,并成为卷轴式格斗游戏的始祖.由于<双截龙>的团队是李小龙的影迷,所以在设 ...

  3. Clannad游戏中日双字幕补丁

    Clannad游戏中日双字幕补丁 一.补丁内容: 将原来的中文字幕,替换为中日双语字幕. 总有志同道合者,热爱游戏又想学点日语吧? 让我们在游戏中学习日语(虽然我自己都不信--) 妈妈再也不用担心我的 ...

  4. STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车

    STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车 文章目录 STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车 前言 一.实现的功能? 二.主要代码及模块讲解 ...

  5. 《灵飞经》3·印神无双 第十一章 力挽狂澜

    花眠见势不妙,忙问:"丢了什么?"施南庭沉默一下,徐徐说道:"别的丢没丢我不知道,可是不见了<天机神工图>!"花眠应声一抖,张口结舌.杨风来急道:& ...

  6. 灵飞经3 印神无双 第十四章 印神古墓 3

    冲大师瞥他一眼,笑道"明尊主哪儿话?人若无信,不知其可.人,我当然会放,但有一个请求."席应真道"什么? " 冲大师笑道"还请真人赐还<天机神工 ...

  7. 双路服务器 游戏性能,AMD双路128核EPYC跑分无敌 服务器CPU核多才是王道

    根据AMD的数据,服务器CPU已经是他们第二大收入来源,市场份额也从之前的不到1%增长到了3.2%,,预计2020年底将达到双位数份额,而这就要依靠他们的EPYC二代处理器了. AMD今年推出的EPY ...

  8. 适合手游党的低延迟游戏蓝牙耳机,双12高人气平价蓝牙耳机推荐

    随着EDC(日常携带)理念的深入人心,越来越多的游戏外设产品开始采用无线连接搭配轻量化的设计,让其具备更出色的便携性.而这之中最具EDC特性的无疑是耳机产品,特别是这两年涌现出越来越多的真无线耳机之后 ...

  9. 神舟电脑装linux双系统,个人windows10和Ubuntu18.04游戏笔记本uefi双磁盘双系统安装过程...

    此文章为记录自己的Ubuntu的安装和使用过程 本人电脑是128G固态+500G机械.固态中装的是windows10,这次决定在机械中安装Ubuntu.虽然网上教程很多,但是我仍然是在参考了多个教程后 ...

最新文章

  1. 知乎大牛网友推荐几个靠谱老师及课程
  2. 用C++/CLI搭建C++和C#之间的桥梁(三)—— 基本类型
  3. python判断操作系统类型
  4. 猜数字游戏python程序_python实现的简单猜数字游戏
  5. 面试系列12 redis和memcached有什么区别
  6. 中文乱码解决方案(Qt4.8.3 + Qt Creator)
  7. 繁华模拟赛 ljw分雕塑
  8. 移动站应该尝试百度MIP的五个原因
  9. pytorch一天速成第一部分——基础入门Tensor和cuda
  10. Qt 防止程序二次运行 实现应用单例
  11. 畅聊“云时代下的芯片设计”,Fabless IT走进嘉楠科技!
  12. 【游戏开发题库】使用Unity制作Unity题库,支持题目录入和刷题(面试 | 笔试 | 自制题库 | 从基础到高级)
  13. 交换机和路由器的区别计算机网络,交换机和路由器的区别,教您交换机和路由器的区别...
  14. numpy ndarry根据条件筛选数据
  15. 初学者之路——————对抗神经网络
  16. 大数据分析应用的九大领域
  17. 计算机的垃圾站是在硬盘,电脑垃圾回收站在哪里
  18. pycharm运行python程序没有解释器怎么办
  19. 梦在远方,而你在心上
  20. Gitlab调优-备份及恢复

热门文章

  1. 从Palantir上市看智能决策平台发展前景
  2. 计算机管理档案有什么好处,档案管理系统有什么特点?与传统手法相比,这几点真的很好用...
  3. 顺通订单及客户档案资料管理系统
  4. 【收藏】最靠谱的笔记本电脑购买指南,让你少走弯路!
  5. 关于 pd.Series 排序后用索引和行号取值要注意的问题
  6. 两个整数相乘的java实现
  7. 一文读懂WiFi网络摄像机参数设置的含义
  8. [附源码]java毕业设计本科毕业设计过程管理系统
  9. Shell输入特殊字符的方法
  10. 图灵奖大佬 Yan Lecun推荐的一本 PyTorch 权威教程书