简单来讲其实就是对底层图形程序(比如: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)脚本中的代码质量。
首先要理解为什么两个没有使用相同材质的物体即使使用批处理,也无法实现Draw Call数量的下降和性能的提升。
因为被“批处理”的两个物体的网格模型需要使用相同材质的目的,在于其纹理是相同的,这样才可以实现同时渲染的目的。因此保证材质相同,是为了保证被渲染的纹理相同。
Draw Call Batching本身,也还会细分为两种,即Static Batching 静态批处理和Dynamic Batching 动态批处理。
image.png
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。