Scaleform试用报告
本文首发于知乎专栏:MACK的游戏开发笔记,欢迎各位关注。
11年写的一篇Scaleform试用报告,当时尝试的原因是觉的UI系统开发慢,开发效率低,美术觉得UI编辑器比较简单实现不了期望的各种效果。其实我们自己实现的UI编辑器还是很易用的,UI底层的效率也非常高,当然Flash肯定更强大。不过最后在做了这篇测试报告之后,最终还是没有使用,主要原因还是成本太高了美术还得重新学Flash开发,另外还有些更高层的原因。最后我们扩展了UI编辑器,也对UI底层做了深度优化表现也非常好。在开发过程中,相互之间的信任真的非常重要。
XY项目FXStudio试用报告
By mackhan, 2011/8/19
目录
XY目前的需求
目前XY的UI都是通过XY自己编写的UI编辑器产生的,编辑器导出的资源和配置数据最终在客户端解析并实现一些UI逻辑。从美术开发方面来说,相对Scaleform强大的Flash编辑器功能简单使用起来不是很方便,美术编辑好UI之后还需要客户端程序实现相应的UI,不能所见即所得。从客户端开发方面来说,客户端需要实现大量UI逻辑,并且为了达到美术需要的效果需要和美术策划大量交互反复调试,并且通过程序实现的逻辑容易出错效率较低,不如Flash编辑器可视化编辑快捷。从最终效果上来说,现有的UI功能比较简单没有动画编辑等功能,无法满足美术和策划的需求,无法实现高品质的效果表现。
集成Scaleform的必要性及好处
1. 相对于XY自己开发的UI编辑器,Flash无疑更强大成熟和直观高效。美术通过只需要简单的拖拽,配置关键帧就可以快速实现复杂的UI效果。
2. 美术在编辑器中可以时时看到最终效果所见即所得,而使用目前的方式美术无法在编辑器中看到最终效果,必须等程序员整合到客户端并且很多UI逻辑需要通过客户端实现,迭代一次成本非常高。
3. Flash编辑器足够强大,可以实现很多目前UI编辑器实现不了的效果,也不会像现有UI编辑器那样为了增加功能而频繁更新版本,稳定可靠。
4. 减少客户端程序开发周期,使用可视化的编辑方式取代繁重的逻辑代码编写。
5. 实现现有UI所不能实现的效果,例如UI特效,UI动画,矢量缩放等。
Scaleform特性分析
Scaleform 作为一家视频游戏行业领先的用户界面解决方案提供商,产品已应用于600多个游戏产品。Scaleform GFx充分利用了Adobe Flash工具集的强大功能,提供了一种开发方法可以最快速度开发功能强大且身临其境的用户界面环境,并进行工作流程的优化,实现客户价值。使用Scaleform完整的解决方案,用户能够设计、开发和部署各种互动内容,无需花费过多时间、精力和金钱在创建定制工具上面。
Scaleform提供一整套SDK,Scaleform本身没有提供UI编辑器,只提供Flash文件的加载,解析,播放等功能和Flash的一些插件和工具。Scaleform完全依赖Flash编辑器,只要会使用Flash就可以快速高效的开发UI,而Flash本事足够强大相关资料也非常丰富,减少了用户的学习成本。
美术
1. 基于时间轴的操作。
类似AfterEffect和Premiere的基于时间轴的序列编辑界面。
2. 基于组件的编辑数据、参数组织方式。
每个组件可以直接在界面中拖拽长度、位置。可以在属性界面中通过图形化的表现来修改每个参数的值。每个组件占据主视口中的一行,被选中激活的组件的编辑接口在主视口下方,这样的界面设计非常利用编辑。支持直线和曲线参数编辑。
制作:
1. 内容管线
2. 快速集成
3. 快速开发
优势:
1. 成熟的UI界面,学习成本低
2. 快速创建和扩展组件
3. 所见即所得,无缝和我们现有引擎集成
程序
1. 灵活的内存管理。可以使用用户统一的内存管理方式,也可以使用自带的高效内存管理方式。
2. 可以非常方便的实现跨平台和多国语言版本。
3. 功能强大的性能分析工具,可以使用客户端实时远程分析UI系统的CPU,GPU,Memory的性能消耗。
4. 多样性的C++和脚本通信方式,可以通过消息机制,API绑定机制以及灵活的数据格式便捷的实现C++和脚本之间的通信。
5. 原有客户端代码中50%左右的代码都是UI逻辑,使用Scaleform可以借助Flsh的可视化编辑快速实现相应的UI逻辑减少客户端开发周期和难度,并且可以实现更好的效果。
Scaleform整合
目前已经和美术制定了一些基本的规范,在客户端整合了Scaleform4.09版本。实现了加载并渲染FlashUI,C++和Flash脚本以及Flash脚本和C++之间的交互等基本功能,完全替换了创角景UI。
开发方式
客户端目前实现了基于Scaleform的GFxUIPanel类,类似原有UI的GeUIPanel类。移植现在的客户端只需要将原本继承GeUIPanel类的改为继承GFxUIPanel,并移植原有的回调功能到GFxUIPanel的回调函数CallbackImp就可以了。
播放FlashUI只需要实现一下两步就可以播放:
m_pUIPanel = NiNew GFxUIPanelCreateCharacter(gPanelInfo);
m_pUIPanel->Load();
内存和性能测试
1. 测试Scaleform的MMORPG的UI Demo的性能参数和DP数,使用GFx的内部性能分析工具进行性能分析:
分析结果如下:
| 内存 | 面数 | DP数 |
开启边缘抗锯齿 | 7m | 1w-1.5w | 109 |
关闭边缘抗锯齿 | 7m | 0.8w | 109 |
实际使用中当我们打开Flah播放器时windows任务管理器中显示占用了26M内存,播放Demo时增长到52M左右。
2. 测试轩辕中创角景的性能参数和DP数,使用AMP和GPA进行性能分析:
无UI:
现在的UI:
使用Scaleform(192个DrawCall,1743次StageChange):
| AMP内存(Scaleform专用的内存分析工具) | 任务管理器内存 | 状态切换次数 | 整个场景DP数 |
无UI | 0m | 395m | 1656 | 179 |
现在的UI | / | 412m | 1834 | 215 |
ScaleformUI | 4m | 402m | 1743 | 192 |
可见,使用Scaleform的UI使用了13个DP,现在客户端的UI使用了36个DP。但是因为Scaleform的UI还非常不全,功能很不完整,这里的测试仅供参考,需要等待后期完整的UI进行测试。
需要开发的工作
1、 整合Scaleform到轩辕客户端;建立好C++和脚本的通信机制,建立起FlashUI的管理机制,可以加载显示FlashUI;与现有客户端框架整合,在方便的取代原有的UI。目前已经完成。
2、 Flash和Scaleform插件的安装和学习,AS3.0脚本的掌握;使用Flash开发UI的框架和流程的建立;在AS脚本中和C++实现互动。目前已经完成。
3、 更多UI的替换和功能实现, 例如动态调整分辨率和UI缩放,不同面板之间控件拖曳和交互,UI层级顺序,新老UI兼容等,这些还需要在今后的工作中继续完成。
结论
Scaleform是一套非常强大和高效的UI框架系统,使用Scaleform我们可以减少UI的开发周期和实现更好的效果,值得使用。