Unity手游的DrawCall是影响手机CPU的重大参数。

硬件相关的一些概念:

1、显示芯片(GPU):具有图像处理能力,可协助CPU工作,提高整体的运行速度。

2、显存:存储显卡芯片处理过或即将提取的渲染数据。显存是计算机用来存储要处理的图形信息的部件。

3、显卡:显示芯片+显存+相关电路。

渲染相关的一些概念:

1、纹理:即纹路,每个物体表面上不同的样子。譬如说木头的木纹状。泛指物体表面,比如一个浮雕,是由凹凸不平的模型和其上的贴图组成的。

2、贴图:贴到物体的表面,用来表现物体的纹理。

3、材质:表现物体对光的交互(反射、折射)性质的。是一个数据集,主要功能就是给渲染器提供数据和光照算法。

4、图集:分散的小图合并到一张大图。

5、本地坐标系和世界坐标系:在任何3D世界中,都有一个起点,也可称为世界的原点(0,0,0)。世界坐标系,相对于世界原点而言。本地坐标系相对于其父物体而言。

6、相机:每次创建一个新场景,相机是第一个出现的,它就像我们的眼睛。在一些特定场景中,Unity允许有多个相机存在,但是只有一个相机可以渲染出玩家看到的画面。

7、多边形、边、顶点和网格:所有的3D模型都是由相连的多边形构成的。当我们把3D模型导入到Unity中后,Unity会自动把多边形转化成三角形。通过连接多个多边形,我们可以使用3D模型制作软件,创造出丰富的形状,这也被称为网格。游戏中的碰撞检测就是通过知道这些三角形的点的位置进行运算后得到的。所有降低模型的顶点和面数,可以减少计算量,增加游戏性能。

图形引擎渲染画面的流程:

1、可见性测试

引擎首先经过简单的可见性测试,确定摄像机可以看到的物体。

2、准备好物体的数据

可见物体的顶点(包括本地位置、法线、UV等)、变换(物体的位置、旋转、缩放以及摄像机的位置等)、相关光源、纹理、渲染方式(由材质/Shader决定)数据准备好。

3、通知图形API开始绘制

通知图形API或者简单的理解为通知GPU开始绘制,GPU基于这些数据,经过一系列运算,在屏幕上画出成千上万的三角形,最终构成一幅图像。

DrawCall优化

1、批处理

将同样材质和Shader 的物件,可以合并成一个 Batch 送往 GPU。

2、打包图集

多个纹理打包成图集,减少材质。

合并贴图时应该注意选择同时出现在屏幕的对象贴图进行合并。如果不能做到这一点,那么合并图集可能起到反作用,即渲染一个对象需要加载过多无用贴图,造成内存占用率升高。

例如一个UI界面,可以把该界面的UI打包成图集。

3、特效清理

特效播放完后的清理,播放完销毁+播放完设置未激活。

4、LOD(Level of detail)技术

根据物体在游戏画面中所占视图的百分比来调用不同复杂度的模型的。简单而言,就是当一个物体距离摄像机比较远的时候使用低模,当物体距离摄像机比较近的时候使用高模。

5、遮挡剔除、视锥剔除

出视野之后应剔除对象渲染。看不到的对象也可以剔除对象渲染。