要绘制一个gameobject到屏幕上,unity需要调用图像api(dx,opengl)。
图像api对每一个绘制请求都需要做大量的工作,例如输入资源校验,顶点空间信息转换。
特别是在切换不同材质球的时候,图形api要做的工作更多,因为要
切换状态(透明,不透明,贴图输入,渲染方式,加载shader,调用gpu驱动api前,获取/组织/封装输入参数)。
而图形api(dx,opengl)是在cpu上运行的,所以draw call的调用会增加cpu负载,消耗cpu时间
(unity--draw call-->dx/opengl || CPU || -->显卡驱动|| GPU ||);
优化思路:
减少draw call 数量,减少状态切换
每个mesh,每个材质,每个pass 都会产生一个draw call调用。
所以,最有效的方法是合并mesh来减少draw call数量。
unity有内置(好处:引擎代码层面可以独立控制每个物体)的两种合并mesh技术:
<