在刚刚过去的Unite北京年度盛会上,安谋科技中国(Arm China)有幸能与广大开发者一起管窥最新的图形技术,并现场把玩趣味横生的XR技术演示,共有300多位热心观众亲临了我们的技术专场,加上不计其数的展台访客 ,不仅带来了超越预期的人气,也留下了许多宝贵见解。
近些年来,中国的移动游戏市场,史无前例地高速发展,在这里,我们看到一个又一个奇迹地诞生,而其中多半,都离不开Unity引擎和它背后充满活力的开发者社区,每年的Unite的大会,更是一个真正的焦点时刻,将五湖四海的业界豪杰,聚于一堂,碰撞出技术和商务的火花,Arm也都非常有幸,在过去的这么多年里,能同Unity一起不断见证并助力于移动游戏产业的茁壮成长。
时至今日,从市场规模和用户数量来看,移动游戏已远超包括PC和主机平台在内的任何其他游戏形式,而在此其中,具备高度拟真图形效果的游戏,慢慢凭借着自己的品质优势脱引而出。在亚太地区,大约90%以上的移动设备都是采用Arm架构,并且其中大多数又同时配备了Arm的Mali GPU,辅以Arm出色的硬件基础,调试工具,以及开发技巧,绚丽的图像效果不再只是高端机型的专利,开发者可以把自己卓越的创意,毫无障碍地带给几乎所有的玩家,从而获得过去难以想象的成功机会。
主流(中端)移动平台上的极速后处理特效
仔细观察,不难发现,上面4幅实时渲染画面在视觉效果上的差异,上排两张是没有加入Bloom效果的原始画面,人物盔甲以及地面金属材质的表现力差强人意,而下面两幅经过优化的画面,不仅在关键元素上光芒四射,而且还能在绝大多数移动平台上稳定运行于60 FPS高帧率之下。
这几张画面截取自Arm重要的游戏生态战略合作伙伴: Nordeus开发的3A级移动大作Spellsouls(目前还在内测阶段,尚无正式的中文名,坊间有爱好者称之为 “魔法战魂” ),Nordeus是一家来自塞尔维亚首都贝尔格莱德的独立游戏工作室,而Spellsouls是其代表性的作品之一,在近年来的GDC和UNITE大会上,他们都不时与开发者无私分享自己的宝贵经验。Nordeus与Arm常年保持在移动游戏优化方面,深入而紧密的协作,我们也期望在中国孵化更多这样的生态合作典范。
定制化Forward+渲染路径:
为了能在最多的设备上,以最高渲染质量,流畅运行于60帧,Nordeus在Spellsouls里创新性地使用了Forward+的渲染方式,从而最大地发挥移动GPU的Tiled Based架构优势(而Mali GPU就是典型的TB架构),出于众所周知的原因,将PC和主机平台上成熟高效的Deferred Rendering技术直接应用于移动平台,仍然是不太现实的选项。而传统的Forward渲染也存在着一定局限性,其运算复杂度会随着光源数量与场景复杂度,急速上升而几乎无法处理4个甚至更少的动态光源,而在这个游戏里,暗黑真实系的基调,以及大量高反射材质急需出色的光照效果来烘托气氛,幸运的是开发者能开拓性地实现Forward+渲染路径,辅以合适的光源属性,数量,与范围设置,从而圆满解决了这个大问题。关于Forward+在移动端的实现,特性,实现技巧,Arm正计划在不久的将来,推出一系列的深入的主题,结合生动的实例加以探讨,敬请各位期待。
效果和性能间的精妙平衡
现场的听众一定还记得,整个演讲是以一种倒叙的手法,把整个游戏的优化过程娓娓道来,在此我们就不再卖关子了,在整个游戏的性能优化过程中, 选择合适的贴图分辨率,包括地形,光照贴图等,虽然都是些不大起眼,也不高深的举措,却也收效显著,为整体的FPS提升出力不少,即使在打开了PBR的前提之下,仍能让开发者在最终阶段,有足够的渲染算力预算,用于能做到很高效但也不会完全免费的后处理上。这里需要特别指出的是,很多开发者可能误认为,PBR就是高端旗舰平台的专属,殊不知只要实现得当,千元机也一样可以有。
高度优化的Blur实现方法
Spellsouls采用了上图可比标准高斯模糊提速14倍的超高效Blur方法,由Arm在2015年发表。简单来说这个技巧就是,通过先期不断缩小目标图像,后期再次放大,并与此同时交替进行水平或垂直方向的快速像素混合操作,来大大减少整体所需的像素操作运算量,性能比起经典算法有了质的提升。
欢迎大家读过之后,也能在自己的项目里大胆采用,有任何问题或发现都请随时与我们取得联系!(Nathan.Li@arm.com)
灵活使用预烘培与广告牌
// Vertex shader
float lightObjCameraAlignment = dot(objToCam, reftLightDir);
half alignmentFactor = clamp(lightObjCameraAlignment, 0.0, 1.0);
// Fragment shader
half bloom = rawGlossMap.a;
finalColor += finalColor * bloom * i.alignmentFactor * _BloomStrength;
在Spellsouls里,采用了在游戏制作阶段,就把Bloom map相关的信息提前生成并巧妙地存储于相应纹理的Alpha通道里,在游戏运行的时刻,把混合后的像素贴在一个永远朝向摄像头,并悬浮于角色与视窗之间的公告牌上,用上面两个简洁高效的shader就做出了栩栩如生的高光效果,多么巧妙!这样做,可以既避免角色高光效果被轮廓线所局限的问题,又保证整个处理过程只要不到1毫秒!
移动游戏优化的思路与相关工具
关于效率与效益的思考
长话短说,无数的项目已经证明,如果要想收获最大的效益,那么我们在一开始跳入细节之前,应该最大限度从更高的层面上,整体把握好优化的重点与方向,切不可做舍本逐末的亏本生意,避免把宝贵的时间与精力,过早过多地耗费于一些旁支细节的改善之上,如上图所示请向左看。在Spellsouls这个游戏项目里,基础渲染优化后花了约16毫秒,加上超高速的后处理(<1毫秒),最后能稳定运行在60帧。
Arm的开发者工具套件
上图是Arm的(主要)开发者工具全家福与我们推荐给的大家的使用顺序图,原则上讲我们通常都是先通过DS-5 Streamline来确定性能瓶颈所在,然后用Mali Graphics Debugger来分析应用的行为,在最后的细节优化阶段,用Mali Offline Compiler来一步步提高Shader效率。
DS-5 Streamline本身有完全免费的Community社区版供下载使用,同时对于希望深耕的开发者,专业版的购买请直接与我们联系。Streamline社区版在GPU分析方面可以说和专业版(可免费试用3个月)无二,只是对于一部分CPU的HW Counter(硬件计数器)有所限制。而Mali Graphics Debugger(MGD)本身就是一款免费的工具,只有Trace/Replay(录制回放)等个别高级功能需要DS-5专业版授权来解锁。值得一提的是,MGD目前已经可以在绝大多数设备上,直接运行而无需root,当然前提是开发者拥有项目源代码,并在对应的引擎(Unity和Unreal Engine)里打开相应调试选项重新构建后才能使用,如果需要调试没有代码的应用APK,还是需要使用root过的设备噢。而DS-5Streamline过去是需要root并且重新编译设备的内核代码,才能做有效分析的,这一限制会在不久的将来,在更多设备上被解除,从而极大地方便开发者,细节请与我们沟通。