0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

进行移动端Unity开发,针对引擎PowerVR性能建议

Dbwd_Imgtec 来源:互联网 作者:佚名 2018-05-03 08:58 次阅读

如果你正在进行移动端Unity开发,那么这篇博客你绝对不能错过!最近,我们为广大用户提供了面向虚幻4游戏引擎的PowerVR性能建议,如果你更多时候使用的是Unity游戏引擎,那么我们现在就将与你分享PowerVR性能建议文档中关于提升Unity性能的一些方法。

大部分优化操作都适用于移动平台,但是也有一些是专门面向PowerVR平台的。也就是说,无论你的目标应用平台是什么,几乎所有的情况下都能够带来性能的提升,采用这些建议通常是很好的做法。

编译设置

纹理压缩

首先一定要确保使用了纹理压缩,这不仅能压缩存储空间,同时也会节省运行时的带宽,这是提升性能且节约电池寿命最好的方法之一。纹理压缩的优点是它们会一直处于压缩状态直到它们要被用于某个片段处理操作的时候。

Unity支持各种各样的纹理压缩方法,默认方法是ETC,当然你也可以选择其他方法,如下图所示:

压缩格式选项介绍如下:

  • ETC作为一种纹理压缩格式支持所有的设备,但是在压缩质量和大小方面被ETC2所取代,尽管ETC很简单并且有广泛的支持,但是它不支持阿尔法(Alpha)通道而且压缩率也不是很理想。

  • PVRTC这种纹理压缩格式仅支持PowerVR硬件平台,支持Alpha通道,具有最好的压缩比率和压缩质量,通过高度灵活的配置一定能够满足质量/大小的要求。

  • ASTC是一个开源的压缩格式,支持大部分平台,它支持Alpha通道,具有与PVRTC相似的压缩率和可配置性。

  • DXT作为一种压缩格式广泛的被桌面应用所支持,在移动领域由于授权问题,目前只有Nvidia Tegra平台支持

  • ATC则只有高通Adreno平台支持

尽管纹理格式设置是全局的,但是每一帧的纹理压缩质量都可以调节,如下图所示:

质量设置

最普遍的优化方法之一就是降低每个像素点的光数量,允许的光数量将直接影响GPU的负载,因为场景内的每个对象都需要在不同的光情况下进行渲染。这意味着每个网格都需要通过一个光照,在像素光数量选项设置中光数量的最大值将影响网格的效果。如果影响网格的光数量超过了上限,那么只有最重要的光将会被用于渲染每个网格,如果光线是均匀分布的且不重叠,那么在任何给定的时间内你都可以增加有效的光数量。

如何改变每个像素允许的光数量如下图所示:

确保阴影地图分辨率是“刚刚好”,使用最低的设置仍然看起来效果会很好,如果阴影地图分辨率太高,这不仅会浪费内存和带宽而且也会影响缓存的效率。

如下图所示阴影分辨率也可以根据每个光来设置,各自的光阴影分辨率总是优先于全局的质量设置,除非选择使用“Use Quality Setting”选项。

如果相机角度允许并且级联设置不会覆盖很多区域的话,适当调整阴影级联的数量也是一个很好的主意。这种情况下,你可以降低级联的数量,从4降到2或者没有级联。

当然也可以通过改变阴影级联设置从“close”到“stable”来增加有效的阴影地图分辨率,虽然能够增加有效的阴影地图分辨率但是代价是会出现不定的闪烁。

  • Close fit意味着阴影渲染算法将会尽可能高效的使用设置好的阴影地图分辨率,结果是更高质量的阴影效果,然而这也会导致一些闪烁问题,尤其是当相机或者光移动的时候,我们使用“软阴影”选项可以把这些闪烁隐藏掉。

  • Stable fit表示阴影渲染将尽可能的使阴影边缘稳定,这意味着当相机或者光移动时阴影不会再有闪烁的现象,当然这也会使得阴影质量降低。

“Close fit”和“Stable fit”两者之间的平衡需要仔细的考虑,“close fit”需要较低分辨率的阴影看起来质量更高一些,但是需要更多的过滤(软阴影)来隐藏闪烁,另一方面“stable fit”则需要更高分辨率阴影看起来质量也高一些,但是它不需要太多的过滤,因为它没有闪烁问题。

网格设置

LOD(细节等级)是管理几何图形复杂度非常好的一个工具,当相机远离某个给定的对象时你可以使用它们来对几何图形的详细程度,这种方式不会使屏幕上的几何图形超过一定的数量,而且质量也是足够的。

注意LOD是移动端优化几何内容非常好的一种方式,设置更高的LOD这样较低分辨率的网格就可以被使用了。

下面的截图展示了如何在质量设置中设置LOD偏差:

注意减少几何图形负载会帮助减少计算量,使得器件不至于严重发热同时具有更长的电池寿命。

图形设置

如果你需要HDR渲染,使用FP16来取代RG11B10会更好,因为它会提供更好的精度和质量。

延迟渲染 vs 前向渲染

对于光设置Unity提供延迟渲染和前向渲染两个选项,对于使用很多重叠光源的场景,延迟渲染通常会提供更好的性能,然而在移动端前向渲染则会提供更好的性能,因为一些加速延迟渲染的高级功能比如PLS(像素本地存储)在移动端是不被Unity支持的,对于少量光的场景,前向渲染具有更好的性能因为它的开销更少,下面的截图展示了如何在延迟渲染和前向渲染之间进行选择:

播放器设置

最新的安卓设备(包括PowerVR)都能够支持Vulkan API,Vulkan真的很好,它能够让你减少CPU的负载,并且更好的控制同步操作。它更适合多核CPU,因为它支持向GPU提交多线程命令。

当选择要使用的API时,Unity会尝试使用最先进的。然而如果硬件平台不支持你选择的API,Unity则会尝试其他API,从而获得最广泛的支持。

如果你选择使用OpenGL,那么使用多线程渲染可能是个好主意,这个选择会确保渲染和其他操作在各自独立的线程下运行,这意味着不同操作会被更好的分配到不同的内核来执行,虽然这不会像Vulkan的多线程命令提交特性那样好,但是这仍然会大大提升CPU的性能。

着色器

在着色器中对于透明表面可以使用alpha blending取代alpha test/clip()方法,注意alpha test与之前使用的深度测试方法一样会损坏整体架构。在PowerVR平台上,底层原语会在片段处理流水线阶段之前执行深度写入操作,这使得PowerVR设备不会覆盖底层原语的操作,从而节省了大量的计算时间和带宽。

然而PowerVR的alpha tested/discard原语只有在片段着色器执行完成之后才能够进行数据写入缓存操作,这种延迟深度写入会影响性能,因为直到alpha tested原语完成更新深度缓冲区操作后,后续的原语操作才能够执行。

在所有的移动架构平台上,不使用部分色彩遮盖是有好处的,最好设置为RGBA或者0,如果你使用部分色彩遮盖,那么之前的数据帧不得不重新读取,这是由全屏原语操作来执行的,会将它作为纹理来处理,而且这个纹理需要被部分清除,通过提交另一个全屏原语命令来完成。

尽管所有的移动架构平台都非常擅长于半精度计算,但是PowerVR却非常的适合,因此一定要尽可能的利用这个特性,相比高精度(FP32),在着色器中使用半精度(FP16)会带来显著的性能提升,这主要归功于专用的FP16积之和(SOP)计算流水线,在每个周期内能够并行处理两个SOP操作,理论上使浮点操作的吞吐量增加了一倍,FP16 SOP流水线在大部分PowerVR Rougue图形内核上都有采用,当然这取决于具体的型号。

清除标志

对于每一帧确保屏幕被清除是非常有必要的,这样GPU就不需要再从之前的帧缓存中加载图像内容,使用“solid color”或者“天空盒”清除模式来确保GPU不再从内存中加载之前用过的纹理数据。

在PowerVR平台上,深度准备操作是一件非常反效率的事情,因为GPU不得不进行两次深度测试操作来将深度缓存保存到内存中,从而完成清除冗余操作。你可以通过将相机的清除标志设置为“depth only”或者“don’t clear”来确保Unity不会这样做,我们强烈建议你不要使用这两种模式。

Mipmaps(纹理映射)

与网格(LOD组)的距离等级(LOD)解决方案类似,纹理的LOD解决方案称为mipmapping(纹理映射),随着相机距离的增加mipmapping可以自动降低显示纹理的分辨率,这会显著提升缓存效率,提高性能,降低带宽等,按照下面的截图来设置mipmaps:

使用mipmaps需要记住的一点是它们只能用于场景内的3D元素,对于2D元素比如UI是1比1映射到屏幕上,因此是不需要的,但是如果它们被缩放那么你可能仍然需要使用mipmaps。

为了确保不同mipmap等级之间的无缝转换,一定要确保在mipmapped对象上使用三线性过滤,如下图所示:

网格优化

首先确定你启用了网格优化选项,这个设置会重新排列顶点和索引从而更好的利用GPU缓存空间,如下面截图所示:

移动端的内容优化

移动设备本身就有一些特殊的约束限制,它们要确保电池的电量至少能够使用一天,并且在用户的手上不会出现严重发热等问题,这意味着将电脑上的游戏移植到移动端时,我们必须要进行内容优化。

首先最重要的几何复杂度需要优化,现在电脑屏幕上几何图形的数量通常在2百万到3百万都是可见的,在移动设备上,这个数量一般是20万到30万个多边形,多边形的数量优化完之后,开发者还需要配置文件并且验证顶点着色器是否过于的复杂。

其次是纹理分辨率和带宽的使用,举个例子,后期处理效果需要进行调整来适应移动端设备,在电脑上GPU内存带宽是200B/s到300GB/s,在移动设备上可用的内存带宽是CPU和GPU共享的,大约在20GB/s到30GB/s,尽管这意味着纹理分辨率需要降低一半,但是你也需要考虑到移动屏幕要小的多(电脑屏幕大约20+英寸,移动设备屏幕大约5英寸),所以较小的纹理通常还是足够的,调整之后还需要进行概要分析从而验证结果。

总结

正如上文我们所看到的,Unity提供了一系列选项来优化移动端的内容和游戏,这些都可以在PowerVR上得到很好的应用,尽管不会带来即时的性能提升,但是至少会有效的降低GPU负载,从而节省了电池的电量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4417

    浏览量

    126668
  • powervr
    +关注

    关注

    0

    文章

    98

    浏览量

    30946
  • Unity
    +关注

    关注

    0

    文章

    126

    浏览量

    21525

原文标题:面向Unity游戏引擎:PowerVR性能建议

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    开放原子开源大赛—基于OpenHarmony的团结引擎应用开发赛正式启动!

    “基于OpenHarmony的团结引擎应用开发赛”是开放原子全球开源大赛下开设的新兴及应用赛的赛题之一,本次赛题旨在鼓励更多开发者基于OpenHarmony 4.x版本,使用Unity
    发表于 03-13 10:45

    基于Android平台怎么为多种移动客户提供即时通信服务?

    Android 是Google 推出的一个基于Linux 操作系统, 包含底层框架, 中间件和开发环境的一套平台系统。它支持流行的组件式程序设计, 具有针对移动设备的Dalvik 虚拟机。浏览器
    发表于 03-18 07:17

    如何使用PVRTexTool提升移动图形的效果

    本文作者Ben Anuworakarn 是PowerVR 开发技术团队的技术作者,具有计算科学工程知识背景。文中,他针对移动游戏画面的优化
    发表于 01-28 07:02

    Unity3D浅谈&Unity5游戏及交互设计

    Unity3D是由丹麦Unity公司开发的游戏开发工具,作为一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品。支持包括IOS,AN
    发表于 07-02 06:25

    Unity关键项目范围设置指南

    本指南解释了Unity提供的关键选项,以便您能够平衡应用程序的图像质量和性能Unity有几个选项会影响游戏的图像质量。其中一些选项的计算成本很高,可能会对游戏的性能产生负面影响。其
    发表于 08-02 13:25

    ARM Unity开发者优化指南

    Unity是一个软件平台,使您能够创建和分发2D游戏、3D游戏和其他应用程序。 本书旨在帮助您创建应用程序和内容,最大限度地利用Unity移动平台,尤其是与马里的移动平台™ GPU。它
    发表于 08-08 06:37

    Unity中国、Cocos为OpenHarmony游戏生态插上腾飞的翅膀

    研发基础,并基于对国内科技市场的深度观察,在Unity引擎的能力之上,针对小游戏和智能汽车领域提供了更深度的技术赋能与效率提速,以期赋予本土用户更强劲的创作动能。团结引擎致力于满足中国
    发表于 10-23 16:15

    专家建议:如何灵活进行软硬件协同开发

    本文是专家建议:如何灵活进行软硬件协同开发,给出了针对目标不断变化的情况如何灵活进行应用开发的三
    发表于 11-22 10:45 852次阅读

    Imagination 与 Unity 合作推出光照贴图工具

    性能。通过这一新的工具,美术设计师能够在方便、易于使用的工作流程中快速设计并实现先进光线效果的可视化。 PowerVR 光线追踪技术有助于在 Unity 游戏引擎中创作出
    发表于 02-10 10:19 219次阅读

    实例分析使用Unity3D开发VR游戏

    等头戴式显示设备都是可供选择的对象。但Cardboard的价格低廉,市场占有率更高,用它来作为移动进行开发更为划算一些。当然,选择其一并不代表我们舍弃了其它开发平台的优点,同时
    发表于 10-10 10:38 1次下载

    Unity 2018.2是沉浸式内容开发最流行的引擎

    新增加的Unity 2018.2包括优化了轻量级渲染管道(LWRP)和一个增强的高定义渲染管道(HDRP)。LWRP尤其引人注目,因为它有助于为低端硬件提供高性能,这对于在移动平台上追求性能
    发表于 07-12 17:44 2478次阅读

    怎样安装Unity

    Unity是最广泛使用的游戏引擎之一,它是用于开发适用于所有平台的游戏,也适用于AR& VR开发。市场上还有其他游戏引擎,例如Unr
    的头像 发表于 08-01 14:12 2745次阅读

    PowerVR GPU架构的性能优化建议

    最近在看移动GPU优化的时候对TiledBased GPU有一些疑惑,特别是常说的Alpha-Blend比Alpha-Test在移动GPU上快的奇特性质,于是找了powerVR相关的文档来阅读,也做个记录。
    的头像 发表于 03-15 17:24 3207次阅读
    <b class='flag-5'>PowerVR</b> GPU架构的<b class='flag-5'>性能</b>优化<b class='flag-5'>建议</b>

    Unity 3D引擎制作的愤怒的小鸟游戏

    Unity 3D引擎制作的愤怒的小鸟游戏
    发表于 05-12 09:37 2次下载

    Unity游戏引擎有什么用?《糖豆人》PC版劲销超12亿, 难怪这么多人想学!

    手游市场过半游戏都采用Unity引擎开发密不可分,更与开发人员对游戏引擎Unity更多的期许有关
    发表于 06-10 11:50 983次阅读
    <b class='flag-5'>Unity</b>游戏<b class='flag-5'>引擎</b>有什么用?《糖豆人》PC版劲销超12亿, 难怪这么多人想学!