【性能优化】DrawCall优化v1.0 序言

     一、背景

      手里的项目已经在线上运营一段时间了,最近在整理项目工程,发现项目中有很多Material,其中很多都使用了相同的Shader,整体看了一下总共的Material的数量是接近5k,实际使用到的Shader数量是50个左右;这样的比例是1:100左右了吧,所以冗余的东西太多了,重复出现的简直是无法接受;当然出现这些情况和当初立项及项目的相关约定是大有关系的,如果在项目开始的时候没有明确的项目规划,随着时间的推移项目会很难接受的,我现在手里的项目的情况就无法接受;另外这种情况带来了另外一个问题:DrawCall的问题,所以决定花点时间整理出几个系列版本,写出一个完整的优化DrawCall的工程。

二、目的

      1.1、减少内存

       如背景所说,5k多的Material大概会有20m左右,从单一的来看这个量没有多少,但是对一个项目来说,通过各方面的优化,也是可以从量变到质变的一个问题。【当然,如果合并不合理,反而增加内存,后续会说到】

      1.2、减少DrawCall

       游戏中在每次进行渲染之前,也就是GPU进行对数据进行处理的时,这里的数据是需要通过CPU传递过来的,CPU每次传递相关的数据给GPU的这一过程【该过程CPU对对需要渲染的数据系列处理】是需要耗时,也会占据CPU的使用,虽然现在的手机较好,但是游戏处理方式不合理,DrawCall数量达到一个瓶颈,那么会非常游戏的体验的;所以为了CPU少干点活,能够批次性做的就不让它单次性、重复性的做,所以减少DrawCall是很有必要的【如果只是减少几个或者10几个这种,个人认为就没有必要了,当然这里的前提是你本身DrawCall的数量也不多的情况】。

 

三、优化DrawCall

     1、需要进行DrawCall的条件满足以下几部分:

        1.1、使用相同的Materail;

         相同的的Materail是指使用了相同的Shader,即使你创建了10个或者更多的Material,但是它们使用了相同的Shader,它们也是属于同一个Materail;如下图:

         【性能优化】DrawCall优化v1.0 序言_第1张图片      

         上图中创建的3个Material使用都是相同的Shader,所以它们本质是同一个Material,在看下图:

         【性能优化】DrawCall优化v1.0 序言_第2张图片

        从图B可以看出这3个Material使用了3个不同的Material,所以这是3个不同的Material;

      1.2、相同Material的Texture不一样

      相同的Material在多个对象中使用,如果它们的区别只是贴图不一样,那么这些Texture是可以通过合并来处理;比如我们在编写某些函数的时候,发现几个函数功能只是内部的某些参数不一样,所以就需要把这几个函数合并为一个,通过函数的传参来进行相同功能的实现,也就得到了一个某些功能的公用函数;这样就减少了代码的冗余, 同理当多个相同的Material 只是Texture不 一样,我们就需要把Texture进行合并即可;

      简要说明一下DrawCall优化的背景、目的、条件,下篇文章讲述DrawCall优化V1.0的具体内容

 

         

 

 

 

 

你可能感兴趣的:(游戏开发语言之Unity3D,DrawCall,Unity,DrawCall,Unity性能优化,Unity,网格合并,Unity,Textrue合并)