欢迎来到天天文库
浏览记录
ID:8808593
大小:81.66 KB
页数:10页
时间:2018-04-08
《unity3d游戏开发之移动开发优化详解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、优化正如PC一样,iOS和安卓(Android)等移动平台也存在各种性能级别的设备。您可以轻松找到一部渲染效果比其他手机好10倍的手机。缩放方法非常简单:·确保它在基准配置上正常运行·在高性能配置上使用更多特效:·分辨率·后处理·多重采样抗锯齿·各向异性·着色器·特效/粒子密度,打开/关闭注重GPU 图形性能与填充率、分辨率和几何体复杂度(顶点数)息息相关。如果找到方法剔除更多渲染,那么这三个要素的值都会降低。此时,遮挡剔除可起到有效作用。Unity会自动剔除视锥外的对象。在移动平台上,基本上会受到填充率的约束(填充率=屏幕像素*着色器复杂度
2、*透支度),着色器过于复杂是导致问题出现的最常见原因。因此,请使用Unity自带的移动着色器或自己设计,但要尽可能简单。如果可行,请将代码移动到顶点着色器中,简化像素着色器。如果降低质量设置(QualitySettings)中的纹理质量(TextureQuality)后游戏运行速度加快,那么很可能是受内存带宽所限。此时可压缩纹理、使用贴图细化,降低纹理大小等。LOD(细节等级)使对象更简单,或移向远方后完全消除。主要目的为减少绘制调用的次数。--来自狗刨学习网出色实践 移动GPU对于自身产生多少热量、使用的电量以及尺寸大小或噪音大小有严格
3、限制。与台式机部件相比,移动GPU的带宽较小、运算器(ALU)性能和纹理功率也较低。GPU的架构也进行了调整,以尽量使用最小带宽和功率。 Unity针对OpenGLES2.0进行了优化,使用GLSLES(类似于高级着色语言HLSL)着色语言。内置着色器大多使用高级着色器语言(即HLSL,也称之为Cg)编写。针对移动平台,其被交叉编译成GLSLES。如果您想要,也可以直接编写GLSL,但这样会限制您访问OpenGL平台(如移动+Mac),因为目前还没有GLSL->HLSL转换工具。在HLSL中使用浮点/半浮点/固定(float/half/f
4、ixed)类型时,它们在GLSLES中会以highp/mediump/lowp精度限定符结尾。以下列出了一些出色实践:·尽量使材质数目减至最低,便于Unity轻松进行批处理。·使用纹理精灵(大贴图包含多个子贴图),而非许多单个纹理。使加载速度更快,状态转换更少,批处理简单方便。·如果使用纹理精灵和共享材质,请用Renderer.sharedMaterial代替Renderer.material。·向前渲染像素灯比较耗性能。·尽量使用光照贴图代替实时灯光。·在质量设置中调整像素灯数目。基本上只有方向灯为逐像素,其他都为逐顶点。当然,这取决于游戏本身。
5、·在质量设置(QualitySettings)中尝试调整灯光的渲染模式(RenderModeofLights),以获得正确优先级。·避免使用抠图(透明度测试)着色器,除非真正有必要。·将透明(alpha混合)屏幕的覆盖范围保持在最小。·努力避免多个灯光照亮任何给定对象的情况。·努力降低着色器通道(阴影、像素灯、反射)的总数目。·渲染顺序很关键。一般情况下:·从前往后完全不透明的对象。·大致从前往后经alpha测试的对象。·天空盒。·alpha混合对象(若需要,从后往前)。·在移动平台上进行后处理性能消耗大,请谨慎使用。·粒子:减少透支,尽量使用最简
6、单的着色器。·每一帧都要修改的网格使用双缓存:着色器优化检查填充率绑定是否容易:如果降低显示分辨率,游戏运行速度是否加快?若是,即受到了填充率的限制。尝试使用以下方法降低着色器的复杂度:·避免使用alpha测试着色器,而是采用alpha混合版本。·使用简单、已优化的着色器代码(如Unity附带的“移动(Mobile)”着色器)。·避免在着色器代码中使用性能消耗大的数学函数(如指数表达式、指数、对数、余弦、正弦、正切等)。考虑使用预计算的查找纹理代替。·为实现最佳性能,尽可能选择最低数值的精度格式(Cg中的浮点、半浮点和固定(float,half,f
7、ixed))。注重CPU 游戏受到GPU像素处理限制的情况时有发生。导致最终出现CPU未充分使用的情况,多核移动CPU尤其如此。将GPU中的一些工作移出来,放到CPU中处理往往是比较明智的做法(Unity处理所有这些操作):网格蒙皮、小对象的批处理、粒子几何体更新。 慎用,不要盲目地全放到CPU中处理。如果不受绘制调用限制,那么随着剔除效率的降低和更多对象受到灯光影响,批处理的实际性能会变差!出色实践·在移动设备上每帧的绘制调用不要超过数百次。·FindObjectsOfType(以及Unity的一般getter属性)非常慢,慎用。·设
8、置非移动对象的静态(Static)属性,允许静态批处理等内部优化。·消耗大量CPU周期进行遮挡剔除和更好的排序(利用Ear
此文档下载收益归作者所有