当前位置:首页 >教程首页 > 游戏程序 > Unity3D游戏开发工程师班 >游戏图形批量渲染及优化:Unity动态合批技术

游戏图形批量渲染及优化:Unity动态合批技术

发布时间:2020-11-10 13:37:10

上回 游戏图形批量渲染及优化:Unity静态合批技术简单总结了一下静态合批,这次我们继续说说动态合批技术。

| 动态合批

试想一个场景:一场激烈的战斗中,双方射出的箭矢飞行在空中,数量很多,材质也相同;但因为都在运动状态,所以无法进行静态合批;倘若一个一个的绘制这些箭矢,则会产生非常多次绘制命令的调用。

1.webp.jpg

让人热血沸腾的一场激战

对于这些模型简单、材质相同、但处在运动状态下的物体,有没有适合的批处理策略呢?有吧,动态合批就是为了解决这样的问题。

动态合批没有像静态合批打包时的预处理阶段,它只会在程序运行时发生。动态合批会在每次绘制前,先将可以合批的对象“整理”在一起,然后将这些单位的网格信息进行“合并”,接着仅向GPU发送一次绘制命令,就可以完成它们整体的绘制。

动态合批比较简单,但有两点仍然需要注意:

1、合批并非是在绘制前“合并网格“

动态合批不会在绘制前创建新的网格,它只是将可以参与合批单位的顶点属性,连续填充到一块顶点和索引缓冲区中,让GPU认为它们是一个整体。

在Unity中,引擎已自动为每种可以动态合批的渲染器分配了其类型公用的顶点和索引缓冲区,所以动态合批不会频繁的创建顶点和索引缓冲区。

2.webp.jpg

MeshRenderer、SpriteRenderer动态合批时使用了公用的顶点、索引缓冲区

3.webp.jpg

ParticleSystemRenderer动态合批时使用了与MeshRenderer不同的公用顶点、索引缓冲区

2、合批前会先处理每个顶点的顶点属性

在向顶点和索引缓冲区内填充数据前,引擎会处理被合批网格的每个顶点信息,将其空间变换到世界坐标系下。

这是因为这些对象可能都不属于相同的父节点,因此无法对其进行统一的空间转换(本地到世界),需要在送进渲染管线前将每个顶点的坐标转换为世界坐标系下的坐标(所以Unity中,合并后对象的顶点着色器内被传入的M矩阵,都是单位矩阵)。

| Unity动态合批的条件

相对于上述看起来有点厉害但是本质上无用的知识而言,了解动态合批规则其实更为重要。比如:

●材质球相同;

●Mesh顶点数量不能超过300以及顶点属性不能超过900;

●缩放不能为负值(x、y、z向量的乘积不能为负)等。

但我个人认为你不需要记住每一个条件,除了上述相对重要些的条件外,其余的可以通过FrameDebugger中提示的合批失败原因,来反向了解合批条件。

| 与静态合批的差别

动态合批与静态合批最大的差别在于:

1、动态合批不会创建常驻内存的“合并后网格”,也就是说它不会在运行时造成内存的显著增长,也不会影响打包时的包体大小;

2、动态合批在绘制前会先将顶点转换到世界坐标系下,然后再填充进顶点、索引缓冲区;静态合批后子网格不接受任何变换操作,仅手动合批后的Root节点可被操作,因此静态合批的顶点、索引缓冲区中的信息不会被修改(Root的变换信息则会通过Constant Buffer传入);

3、因为2的原因,动态合批的主要开销在于遍历顶点进行空间变换时的对CPU性能的开销;静态合批没有这个操作,所以也没有这个开销;

4、动态合批使用根据渲染器类型分配的公共缓冲区,而静态合批使用自己专用的缓冲区。

虽然在Unity中,存在多种可以被动态合批的渲染器类型,而且其合批规则可能也略有不同;但我个人认为其原理应该是相似的,因此这里就不针对每种渲染器做单独的测试和说明了,后面有必要、有机会、有缘分的话,再仔细了解吧,嘿嘿。

|  写在最后

不出意外的话,下次更新的内容应该是实例化渲染。

作者:枸杞忧天

来源:公众号偶尔学学Unity

学员作品赏析
  • 2014期学员黄雨婷作品

    2014期学员黄雨婷作品

  • 2103期学员沈继龙作品

    2103期学员沈继龙作品

  • 2105期学员秦洋洋作品

    2105期学员秦洋洋作品

  • 2108期学员陆昶存作品

    2108期学员陆昶存作品

  • 2107期学员赵锦威作品

    2107期学员赵锦威作品

  • 2104期学员胡婷婷作品

    2104期学员胡婷婷作品

  • 2107期学员何亮作品

    2107期学员何亮作品

  • 2103期学员张子安作品

    2103期学员张子安作品

专业问题咨询

你担心的问题,火星帮你解答
  • 画动漫人物的技巧与方法

    有很多同学想让我分享一下刻画动漫人物的技巧与方法。今天,就来教大家几个人物画法的小方法,希望能从中学到画动漫人物的技巧与方法。

  • 初学动漫人物画法步骤

    初学动漫人物画法步骤是怎么样的?今天小编就来具体说一说,作为一个初学者,在绘制动漫人物所使用到的步骤。

  • 昆明北市区素描培训机构费用

    如果你想进入美术行业、设计行业,学素描会对你的工作很有帮助!学素描可以提高的绘画能力和设计能力,进而提升你的专业水平。素描不是......

  • 自学动漫绘画应该先学什么

    自学动漫绘画应该先学什么? 所有与绘画相关的,最应该先学的是美术基础。而美术基础中最先接触到的就是透视,这是学习绘画过程中必不......

  • 南宁建筑手绘设计培训班有哪些

    如果你想成为建筑设计师,那么你需要学习建筑手绘设计。学好建筑手绘设计,会助你在建筑行业里有更好的发展。一些小伙伴问小编南宁建筑......

  • 学动漫绘画有前途吗

    学动漫绘画当然有前途了,随着我国动漫产业迅猛发展,无论是动漫还是漫画都比以往有了更大的需求,而,不论是动漫还是漫画都离不开动漫......

×