Unity性能优化相关前提 ?
一.Unity游戏安装包大/运行卡的原因?
原因:
Mono虚拟机(可跨平台的依赖)的存在造成的unity开发的游戏包普遍的大,而且运行速度较慢。
流程:
我们开发的游戏->Mono虚拟机进行运行->操作系统。
优化:
优化必不可少,不然开发出来的unity游戏无法达到商业标准,玩家游戏体验特别差。
二:DrawCall
1. DrawCall,CPU,GPU介绍
DrawCall:
优化相关的属性,就是cpu对图形绘制接口的调用,CPU通过调用图形库(directx/opengl)接口,命令GPU进行渲染操作的过程。(DrawCall数量代表命令次数cpu对gpu的命令次数)
CPU:也叫做中央处理器(Central Processing Unit)
是一台计算机的运算核心(Core)和控制核心( Control Unit)。
CPU的主要组件包括执行算术和逻辑操作的算术逻辑单元(ALU)、向ALU提供操作数并存储ALU操作结果的处理器寄存器和协调提取(从存储器)和执行指令的控制单元。
GPU:图形处理器(Graphics Processing Unit)
又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器
2.CPU和GPU是如何进行并行工作和交互的?
CPU与GPU并行工作,独立而不相互依赖。这是通过命令缓冲区来实现的:命令缓冲区维护一个命令队列,CPU向其中发送命令,GPU从中取出命令并执行。命令有很多种,DrawCall是一种,其他命令还有改变渲染状态、设置渲染数据流等。
这种方式就类似于游戏开发的网络通信:维持一个消息队列,网络线程接收解析消息并将之添加到消息队列,游戏主线程更新时从中取出消息并做派发处理。
3.DrawCall是如何影响性能的?
每一次绘制CPU都要调用DrawCall,而在调动DrawCall前,CPU还要进行很多准备工作:检测渲染状态、提交渲染所需要的数据、提交渲染所需要的状态。
而GPU本身具有很强大的计算能力,可以很快就处理完渲染任务。
当DrawCall过多,CPU就会很多额外开销用于准备工作,CPU本身负载,而这时GPU可能闲置了。
4.DrawCall优化:减少DrawCall
既然,我们已经知道DrawCall导致的性能问题在于DrawCall数量过多,那么我们优化的思路就是减少DrawCall。这里我们只讨论批处理(Batching)。
<