如何进行Drawcall优化?
demi 在 周五, 09/03/2021 - 17:01 提交
drawcall,也就是CPU通过调用图形接口,向GPU请求绘制数据的过程。CPU发出的请求会被封装成一个命令,并加入到命令队列。GPU执行完当前命令后,就会从命令队列再取一个命令执行。命令队列中,除了drawcall请求,还有状态切换的请求等。
drawcall,也就是CPU通过调用图形接口,向GPU请求绘制数据的过程。CPU发出的请求会被封装成一个命令,并加入到命令队列。GPU执行完当前命令后,就会从命令队列再取一个命令执行。命令队列中,除了drawcall请求,还有状态切换的请求等。
纹理是GPU编程中最常见的资源类型之一,因此针对纹理,我们可以有很多优化的方式。无论是哪种优化方式,都会基于以下核心思路:(1)显存减少;(2)带宽降低;(3)缓存友好;(4)采样次数减少。
VR应用比非VR应用需要更强的计算,性能优化是一个很重要的任务。若目标平台是像GearVR这样的手机设备,优化就更重要了。
游戏开发中在引擎基本定型的情况下,内容资源的优化对优化游戏起到主要的作用。不论是作为美术、策划、TA,在整个开发的不同阶段都需要有这个意识和执行力,了解自己的每一项内容操作及设置,会对游戏的运行有哪方面的影响(CPU,GPU,内容,包体等),以此指导内容的制作。
作为一个入行不足三年的攻城狮来讲,讲引擎中的优化,经验确实不足,unity3D引擎作为一款侧重移动端游戏开发引擎来讲,优化游戏是确实有必要的,毕竟他要适配所有机型的前提下又要保证游戏画面的清晰度,特效的绚丽多彩,所以国内大部分游戏公司都要喜欢招收既会码代码又会做优化的复合人才。 废话不多说,直接上方案。
和渲染优化相关的东西很多,大致可分为网格、着色器材质、光照和阴影。相关的优化技术有相机视椎体剔除、遮挡剔除、基于层的分类剔除与合并绘制调用。LOD降级分为着色器的LOD降级和LodGroup降级。
建模时尽可能减少模型中三角面片的数目,一些对于模型没有影响、或是肉眼非常难察觉到区别的顶点都要尽可能去掉。美术人员往往需要优化网格结构。很多三维软件都有相应的优化选项,可以自动优化网格结构。
相比于动态批处理来说,静态批处理适用于任何大小的几何模型。它的实现原理是,只在运行开始阶段,把需要进行静态批处理的模型合并到一个新的网格结构中,这意味着这些模型不可以在运行时刻被移动。但由于它只需要进行一次合并操作,因此比动态批处理更加高效。
批处理的实现原理就是为了减少每一帧需要的draw call数目。为了把一个对象渲染到屏幕上,CPU需要检查哪些光源影响了该物体,绑定shader并设置它的参数,再把渲染命令发送给GPU。
游戏优化不仅是程序员的工作,更需要美工人员在游戏的美术上进行一定的权衡,例如避免使用全屏的屏幕特效,避免使用计算复杂的shader,减少透明混合造成的overdraw等。这是由程序和美工人员等各部分人员共同参与的工作。