Unity优化大全(六)之GPU-几何体和显存宽带

发表于2017-12-22
评论0 2.4k浏览
在前面讲了下GPU的动态阴影和Shader方面的优化,这里在谈谈几何体和显存带宽的优化吧!

几何体优化:   
      首先讲下几何体的优化方法吧,这里的几何体优化主要是讲下几何体的顶点优化!如下:
尽可能减少模型中三角形的数目,一些对于模型没有影响、或是肉眼非常难察觉到区别的顶点都要尽可能去掉。
尽可能重用顶点。在很多三维建模软件中,如3DMax,Maya都有相应的优化选项,可以自动优化网格结构。
使用LOD(Level of Detail),好处就是对那些离得远,看不清的物体的细节可以忽略。
遮挡剔除(Occlusion culling)。
尽可能使用灯光映射(LightMapping)来代替实时灯光(在质量设置中调整像素灯光的数量。只有平行光应该是逐像素(Important)的,其他所有都应该是逐顶点的。当然,这取决于游戏)当然5.0的新版本的很好的可以实现全局的实时光照哦!
   ......
   
      在这里笔者会着重讲下LOD(细节等级)和遮挡剔除(Occlusion culling),主要目的都是为了减少绘制调用的数目,LOD技术有点类似于Mipmap技术,不同的是,LOD是对模型建立了一个模型金字塔,根据摄像机距离对象的远近,选择使用不同精度的模型。它的好处是可以在适当的时候大量减少需要绘制的顶点数目。它的缺点同样是需要占用更多的内存,而且如果没有调整好距离的话,可能会造成模拟的突变,具体做法如下图所示:
       
         
    





你可以通过滚动鼠标来观察定点数和面数的变化

遮挡剔除(Occlusion culling)
       充填率、像素以及几何体的复杂度(顶点数量)绑定了图形性能。如果你可以找到一个方法来剔除更多的渲染,那么这三点就可以被降低。遮挡剔除就可以做到这一点。Unity会自动剔除视见平截头体之外的对象。那么你还要注意一点:每当相机在遮挡区域之外,遮挡剔除将不应用。重要的是这种遮挡区域覆盖的地方要有相机,但做遮挡区域太大,会导致烘焙更多开销。如图所示:

启动Occlusion culling前

启动Occlusion culling后,如下图:

       看到没,顶点数和面数明显下降!DC也减少了1!不仅优化了GPU,还有优化了CPU,那它是不是很完美了??错!几乎不存在完美的解决方案!看到左下角那个遮挡数据的大小就知道了,做遮挡区域太大,遮挡的数据也会相应的变大,虽然变化和细微,但是会导致烘焙更多的开销去烘培!而且使用的Memory也略微的变大!如下图:

具体的Occlusion culling的属性请见链接地址:http://game.ceeger.com/Manual/OcclusionCulling.html,

LightMapping:
    这个实验起来很简单,我这里直接给出实验后的图片哦,如图所示:
开启前:
开启后:

显存带宽优化:
    在这里主要使用压缩图片来减小显存带宽的压力,相应的优化措施如下:
OpenGL ES 2.0使用ETC1格式压缩等,在打包设置那里都有,图片宽高最好是2的整数幂。
使用MipMaps。
利用缩放。
  ......

         先说说MipMaps,效果图如下所示:

上面是一个mipmap 如何储存的例子,左边的主图伴有一系列逐层缩小的备份小图(为了更好让大家理解,在网上摘取了一张图片)

    Mipmap中每一个层级的小图都是主图的一个特定比例的缩小细节的复制品。因为存了主图和它的那些缩小的复制品,所以内存占用会比之前大,具体是约增加了33%。但是为何又优化了显存带宽呢?因为可以根据实际情况,选择适合的小图来渲染。所以,虽然会消耗一些内存,但是为了图片渲染的质量(比压缩要好),这种方式也是推荐的。

       再说说利用缩放来减少显存带宽吧。

      很多时候分辨率也是造成性能下降的原因,尤其是现在很多国内山寨机,除了分辨率高其他硬件简直一塌糊涂,而这恰恰中了游戏性能的两个瓶颈:过大的屏幕分辨率+糟糕的GPU。因此,我们可能需要对于特定机器进行分辨率的放缩。当然,这样会造成游戏效果的下降,但性能和画面之间永远是个需要权衡的话题。
来自:http://blog.csdn.net/m0_37283423/article/details/72639293

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引