zoukankan      html  css  js  c++  java
  • U3d 手游优化概述

    移动平台瓶颈

    体积小 芯片要求改

    功耗小 影响计算系能

    带宽小 传输方面受限

    性能优化

    资源方面

        美术方面

            自带地形(地形是非常占用资源的)

                a.控制地形的分辨率

                b.地形高度图尺寸小于257

                c.地形纹理中尽量使用少的混合纹理数目,尽量不要超过4个

            纹理数据

                a.纹理格式 尽量采取压缩格式

                b.纹理尺寸 长宽小于1024 同时应该尽量小够用就好

                c.尽量使用Mipmap 虽然Mipmap 有可能会增加程序的大小,但会提高渲染效率。 

        动态物体

            a.控制面片数量 300-2000面片

            b.控制Skinned Mesh Render 为1个

            c.控制材质数量为1-3个

            d.控制骨骼数量 小于30根

        静态物体

            a.控制网格顶点数量 小于500个

            b.标记为Static

            c.Static Batching

            d.Animation组件:如果不需要,尽量不要附加

        音频数据

            a.播放时间长的音乐如背景音乐 可以使用.Ogg 或.MP3格式的压缩文件格式

            b.播放时间段的音乐 可以使用.WAV或.aif格式的未压缩格式

    引擎方面优化

        光源设置:

            a.在满足效果的前提下,控制场景中,光源的个数,尽量不要添加冗余光源。

            b.控制Important光源的数目,尽量1个或干脆没有,个数越多,drawcall越多。

            c.Pixed Light Count 1-2个

        相机设置

            a.设置合理的剪切平面,可根据不同的场景进行修改

        粒子特效

            a.频幕上的粒子总数,建议小于200个粒子, 

            b. 每个粒子发射器所发射的粒子总数,建议不超过50个

            c.粒子大小 如果可以的话,粒子的size应该尽量小,对于非常小的粒子,在其粒子纹理中可以去除alpha通道

        物理引擎优化

            a.碰撞题控制 尽可能的使用Sphere Collider 和Box Collider,尽量避免使用Mesh Collider

        渲染优化

            a.尽可能避免使用Alpha Test和Alpha Blend。Alpha Test的性价比比较低,可能的话,使用​Alpha Blend来代替​Alpha Test

            b.将使用Alpha Test和Alpha Blend的像素数降至最低​​

            c.DrawCall Batching:unity 在渲染时,可以将一些物体合并,从而可以只用一个DrawCall来渲染他们,这称为DrawCall Batching。理论上讲unity Batching的物体越多,则会得到更好的渲染性能。​

            d.StaticBatching:静态合并。针对静态物体进行Batching,对几何数据的大小没有限制。原理:静态VertexBuffer+动态IndexBuffer,将同种材质的物体合并在一个大的VertexBuffer中,在运行时,通过视锥剪切来动态的改变IndexBuffer。

    注意:使用StaticBatching后会额外的增加内存开销来存储Batch后的数据    

            e.Dynamic Batching:动态合并。对于相同的材质的动态物体,unity会自动对其进行Batching。

    原理:动态VertexBuffer+动态IndexBuffer

    注意:目前仅支持小于900顶点的网格物体

              缩放物体无法与非缩放物体进行Batch

            f.纹理合并 Texture Batching

        遮挡剔除(Occlusion Culling)

    代码方面优化

        通过编程的方式,来提高代码的运行性能

            a.对于有的函数,则可以每个几帧 执行一次

            b.通过使用InvokeRepeating函数实现定时重复调用,比如,启动0.5s后每隔1s执行一次DoSomeThing

            c.尽量少使用临时变量,特别是在Update() OnGUI()等实时调用的函数中

            d.定时进行垃圾回收

            e.优化数学运算,尽量避免使用float,而用

    int,特别是在手机游戏中,尽量少用复杂的数学函数,比如sin,cos等函数。改除法为乘法,比如0.5f*a而不是a/2.0f

  • 相关阅读:
    高质量动漫实时画质增强器Anime4K在mpv上的配置
    grep中正则表达式使用尖括号表示一个单词
    虚拟机复制的linux无法联网,解决Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
    Linux将动态IP改为静态IP
    回车、换行的区别
    栈的链接存储
    栈的顺序存储
    冒泡排序
    插入排序
    双向循环链表
  • 原文地址:https://www.cnblogs.com/hewencong/p/4228091.html
Copyright © 2011-2022 走看看