Unity3D 项目优化-CPU方面

2021-01-11  本文已影响0人  _灯下影子

DrawCall是什么?简单来讲其实就是对底层图形程序(比如:OpenGL ES)接口的调用,以在屏幕上画出东西。所以,是谁去调用这些接口呢?CPU。
Fragment是什么?经常有人说vf这样的术语,其中的v代表了vertex即我们都知道是顶点。那f所代表的fragment是什么呢?说它之前需要先说一下像素。通俗的说,像素是构成数码影像的基本单元。那fragment呢?是有可能成为像素的东西。为什么叫有可能呢?就是最终会不会被画出来不一定,是潜在的像素。所以这会涉及到谁呢?GPU。
Batching是什么?同样,我相信各位读者应该都知道批处理的作用是什么。没错,将批处理之前需要很多次调用(DrawCall)的物体合并,之后只需要调用一次底层图形程序的接口就行。听上去这简直就是优化的终极方案啊!但是,理想是美好的,世界是残酷的,一些不足之后我们再细聊。
内存的分配。记住,除了Unity 3D自己的内存损耗。我们可是还带着Mono呢,还有托管的那一套东西。更别说又引入自己的几个dll文件了。这些都是内存开销上需要考虑到的。

优化注意的三个方面:
(1)CPU方面。
(2)GPU方面。
(3)内存方面。

影响CPU的效率:
(1)DrawCalls。
(2)物理组件(Physics)。
(3)GC(用来处理内存的,但是是谁使用GC去处理内存的呢?)。
(4)脚本中的代码质量。

  1. 使用Draw Call Batching,也就是描绘调用批处理。Unity 3D在运行时可以将一些物体进行合并,从而用一个描绘调用来渲染他们。
  2. 通过把纹理打包成图集尽量减少材质的使用。
  3. 尽量少的使用反光、阴影之类的效果,因为那会使物体多次渲染。

首先要理解为什么两个没有使用相同材质的物体即使使用批处理,也无法实现Draw Call数量的下降和性能的提升。
因为被“批处理”的两个物体的网格模型需要使用相同材质的目的,在于其纹理是相同的,这样才可以实现同时渲染的目的。因此保证材质相同,是为了保证被渲染的纹理相同。

Draw Call Batching本身,也还会细分为两种,即Static Batching 静态批处理和Dynamic Batching 动态批处理。

上一篇 下一篇

猜你喜欢

热点阅读