GDC 2012]Epic Games谈在智能手机上制作和台式游戏机同等级的图形游戏的经验



編集部:aueki
翻译 Trace
校对 千里马肝


Epic Games的主引擎程序员 Niklas Smedberg

「GDC 2012」的第4天的3月8日(当地时间),Epic Games进行了题为「Bringing AAA graphics to mobile platforms」的演讲,会议的内容是在智能手机上实现和台式游戏机类似的图形表现的游戏经验技术,具体的是介绍在开发「Infinity Blade II」的过程中得到的经验。
  
进行演讲的是Epic Games从事Unreal Engine的开发者Niklas Smedberg。虽然内容是如何把GPU的性能发挥出来的专题,不过会议是从智能手机的硬件周边开始讲的,据Niklas Smedberg所称,这是[非常重要]的部分。

智能手机的使用在GPU方面和PC有很大的不同,除了NVIDIA的Tegra系列,大部分采用的是Tile based架构。因为这点要求有和PC的GPU完全不同的优化方法,以Imagination Technologies的SGX GPU为例,进行关于Tile base架构的基本工作要怎样进行的解说,顺便说一下,SGX系列是PowerVR GPU正统的继任者,iOS和PlayStation Vita上也是使用的这款GPU。


所谓的Tile based架构,是把画面分割成小的区域,在这些区域画面单位里进行绘制的方式。也存在有认为这样的处理会导致效率低下的观念,不过,这么考虑未必错了。一旦要说为什么会产生这样的方式的话,那是因为3D图形处理主要是操作大量的数据,而不是仅仅是处理的速度,所以可以预期到内存带宽是瓶颈。即使在当时,显存和主内存是用相同的64bit来连接的,感觉大幅度提高带宽是很困难的。

Tile based架构中,内部有少量的超高速内存,将操作的范围做分割处理,即使处理数据变多也可以维持合理的性能的想法作为根本。因为即便使用便宜的内存也可以维持性能,在显存非常高价和缓慢的时代,作为非常有效率的解决办法而收到了关注。当时,都认为显存的带宽是界限。

然而,NVIDIA等公司在128bit或256bit的总线带宽上进行了cross bar连接,因为持续的保证了带宽,内存的带宽问题就变的不怎么在意,Tile based的优势就不能发挥了,以此确立了连接对于当前GPU的发展趋势。

另一方面,在硬件资源有限的手机(注:这里是指非智能手机)上,效率很好的tile based架构被重新评估。Tile based的特征是,Tile各自独立的运作,在Tile全部处理结束时,再实际的写回到图形显存数据。尽可能的在GPU内部完成处理,成为了提升性能的关键。
个人blog 关注跨平台次世代游戏开发,欢迎讨论
http://www.cnblogs.com/TracePlus/
 
   

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2011-5-21
积分
2884
2#
  发表于 2012-3-22 17:56:47  | 只看该作者
本帖最后由 trace 于 2012-3-22 18:28 编辑

再回到演讲的内容,Niklas Smedberg把在Tile based上的3D处理流程逐一的进行了解说,下图列出的就是处理流程和内容。好不容易排着队才刊登了,顺便说一下,橙色的部分是GPU内部,使用外部内存的部分是灰色。














Tile Based 架构必须要注意的是,主要是Pixel Shader的部分,每个Tile需要一个shader unit来负责,共通制定的是在哪里处理,要是处理不了怎么办等,必须要相当的注意。

例如,如果要处理Alpha Blend,但因为没有专用的单元,所以处理最后是用shader进行的。 shader代码挤满program buffer时,就是patch处理的性能大幅下降的主要原因。但是,因为Alpha Blend是在tile内完成,优点是使用成本非常低。



另外关于render target,有着可以输出画面的功能,虽然SGX支持该特性,不过使用的话也要注意。一旦切换这个RT,处理的方式就是让现在显存的内容全部暂时放入到主内存里改变输出端,一旦结束就要从主存储器里再次读取的。Smedberg说,最终的结论是[没法使用]。推荐处理中使用的计算结果等都用普通画像输出,再作为texture来读取处理。同样,还是不使用Frame buffer object比较好。






除此之外,关于texture lookup,并没有在Pixel Shader阶段进行,而是必须在Pre Shader的阶段进行,从多个Tile的reference的数据也是在Pre-Shader里被预先Setup的。

在Unreal Engine 3上经常用到的复杂材质(material),在这里实际上是不能使用的,所以用离线的方式提前生成纹理的方法很有效。但是,一旦让设计师来做这个,因为会很辛苦,所以要重新做出某种程度的自动化工具,那就是Mobile Material System。





个人blog 关注跨平台次世代游戏开发,欢迎讨论
http://www.cnblogs.com/TracePlus/
 
   

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2011-5-21
积分
2884
3#
  发表于 2012-3-22 17:59:18  | 只看该作者
本帖最后由 trace 于 2012-3-22 18:52 编辑

除了上述需要注意的之外,Smedberg还介绍了在Infinity Blade II上的关于[God Ray]和[阴影处理]的实现过程。 



God Ray是在宗教画里比较多见的,从光源初延伸出来的光溢出的表现


Smedberg最初是什么都不考虑,就像把Xbox 360的程序拿到PS Vita上那样,以为可以很好的运行,但结果是被可怕的延迟打击到了。同样是SGX系的GPU,PS Vita版的似乎是因为有性能上的强化,而智能手机上无论如何也很困难,不过据说,通过把材质降低的手法,可以一定程度上缓解。

方法中最重要的部分,要尽可能的限制Texture lookup,为了表现出从光源延长出来的光,有必要把漏光进行多次处理,要做32次的lookup,而原来是256次的lookup。此外,运算处理全部在Vertex Shader进行相对粗略的计算,使用插值来获取中间数据,Pixel Shader中尽可能的做轻量的计算。
   




原来的shader code


最优化的shader code
           








个人blog 关注跨平台次世代游戏开发,欢迎讨论
http://www.cnblogs.com/TracePlus/
 
   

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2011-5-21
积分
2884
4#
  发表于 2012-3-22 18:00:26  | 只看该作者
本帖最后由 trace 于 2012-3-22 19:09 编辑



在阴影处理上,因为把所谓Stencil Shadow作为通常的实现,虽然只想使用depth buffer,不过在OpenGL ES的手段上也加上了color buffer,从光源到阴影的映射上不能使用render target。虽然用一次输出到Cubemap就可以了,但因为texture的依赖关系很麻烦,应该分成4次输出,这点要提醒注意。










虽然有很多的麻烦和注意点,但完成的图像质量相当高,最后Smedberg先生提到了关于次世代的SGX系列(Rogue:PowerVR SGX Series6)[性能是现在的20倍,可以使用DirectX 10,还有各种改善],给予了在场者和自己对于未来的期盼。

大概,也兼顾了智能手机用的Unreal Engine 3的公开演示,因为要尽可能的以高质量的图形为目标,所以直到最后都要向着远高于一般的游戏程序的程度而努力。

手机(非智能机)用的GPU,为了用很少的资源做各种事情,当资源变得不足时,会把数据暂时自动的释放以腾出空间再继续处理,某种意义上就像智能机上拥有了更大的空间,只是,感觉对于追求性能最优化的人来说,说不定会是相当麻烦的机能。


  
个人blog 关注跨平台次世代游戏开发,欢迎讨论
http://www.cnblogs.com/TracePlus/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值