Unity中的静态批处理和动态批处理操作_第1页
Unity中的静态批处理和动态批处理操作_第2页
Unity中的静态批处理和动态批处理操作_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Unity中的静态批处理和动态批处理操作Unity在运行时可以将一些物体进行合并,从而用一个绘制调用来渲染他们。这一操作,我们称之为批处理”能得到越好的渲染性能。Unity中内建的批处理机制所达到的效果要明显强于使用几何建模工具的批处理效果,因为,Unity引擎的批处理操作是在物体的可视裁剪操作之后进行的,处理的几何信息少很多。材质只有拥有相同材质的物体才可以进行批处理,因此,你需在程序中尽可能多地复用材质。如果你的两个材质仅仅是纹理不同,那么你可通过纹理拼合来将这两张纹理拼合成一张大的纹理,这样,你就可以使用这个单一材质来替代之前的两个材质了。如果你要通过脚本来访问复用材质属性,那么值得注意

2、:改变n将会造成一份材质的拷贝,因此,你应该使用n来保证材质的共享状态。动态批处理如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理,动态批处理操作是自动完成的,并不需要你进行额外的操作。yni启用h寸nUnity将尝试自动批量移动物体到一个中。要使物体可以被动态批处理,它们应该共享相同的材质,但是还有一些其他约束条件:批处理动态物体需要在每个顶点上进行一定的开销,所以动态批处理仅支持小于顶点的网格物体;如果你的着色器使用顶点位置,法线和U值三种属性,那么你只能批处理顶点以下的物体;如果你的着色器需要使用顶点位置,法线,U,U和切向量,那你只能批处理顶点以下的物体。尽量不要

3、使用缩放尺度()l分别拥有缩放尺度和的两个物体将不会进行批处理;统一缩放尺度的物体不会与非统一缩放尺度的物体进行批处理。使用缩放尺度和的两个物体将不会进行批处理,但是使用缩放尺度和(1,的3两个1物)体将可以进行批处理。拥有光照贴图的物体有其他渲染器参数,例如光照贴图索引或光照贴图的偏移与缩放。一般来说,动态光照贴图的游戏对象应该指向完全相同的光照贴图的位置。多通道的会妨碍批处理操作。比如,几乎nit中所有的着色器在前向渲染中都支持多个光源,并为它们有效地开辟多个通道,这就会要求额外的渲染次数,所以绘制额外的每像素灯时不会被批处理。静态批处理为了更好地使用静态批处理,你需要明确指出哪些物体是静

4、止的,并且在游戏中永远不会移动、旋转和缩放。想完成这一步,你只需要在检测器(ne中将t复选框打勾即可。只要这些物体不移动,并且拥有相同的材质。因此,静态批处理比动态批处理更加有效,你应该尽量低使用它,因为它需要更少的开销。使用静态批处理操作需要额外的内存开销来储存合并后的几何数据。在静态批处理之前,如果一些物体共用了同样的几何数据,那么引擎会在编辑以及运行状态对每个物体创建一个几何数据的备份。这并不总是一个好的想法,因为有时候,将不得不牺牲一点渲染性能来防止一些物体的静态批处理,从而保持较少的内存开销。比如,将浓密森里中树设为tti会导致严重的内存开销。这就是空间和时间上的相爱相杀。最后,如果

5、场景自带静态物体,会合并批次,这个大家都知道;如果静态物体是场景加载后再读取预制体动态加载进去的,就不会自动合并批次,需要你加载完后调一下手动合并批次的接口,ttitinUtiity合并。in补充:在Unity中的渲染优化批处理技术在Unity中,常用的减少的优化技术就是批处理技术。批处理的原理是减少每一帧需要的数目。为了把一个对象渲染到屏幕上,需要检查哪些光源影响了该物体,绑定并设置它的参数,再把渲染命令发送给U当场景中包含了大量的对象时,这些操作就会非常耗时。例如,如果我们需要渲染一千个三角形,把它们按一千个单独的网格进行渲染所花费的时间要远远大于渲染一个包含一千个三角形的网格。在这两种情

6、况下,的性能消耗其实并没有多大的区别,但的数目就会成为性能瓶颈。因此,批处理的思想很简单,就是在每次调用时尽可能多地处理多个物体。使用同一材质的物体可以进行批处理,因为对于使用同一材质的物体,它们之间的不同仅仅在于顶点数据的差别。我们可以把这些顶点数据合并在一起,再一起发送给U这样就可以完成一次批处理。在Unity中支持两种类型的批处理,一种是动态批处理,另一种是静态批处理。对于动态批处理来说,优点是一切处理Jnityg动完成的,不需要我们做任何操作,而且物体可以是移动的,缺点是限制有很多,可能一不小心就会破坏了这种机制,导致Unit述法动态批处理一些使用了相同材质的物体。而对于静态批处理来说

7、,它的优点是自由度很高,限制很少;但缺点是可能会占用更多的内存,而经过静态批处理后的所有物体都不可以再移动了(即便在脚本中尝试改变物体的位置也是无效的)。Unity3D中的动态批处理技术动态批处理的原理是,每一帧把可以进行批处理的模型网格进行合并,再把合并后的模型数据传递给u然后使用同一个材质对其渲染。除了实现方便,动态批处理的另一个好处就是,经过批处理的物体仍然可以移动,这是由于在处理每帧时Unity都会重新合并一次网格。虽然Unity的动态批处理不需要我们进行任何额外工作,但只有满足条件的模型和材质才可以被动态批处理。(需要注意的是,随着Unity反本的变化,这些条件也有一些改变)这些条件

8、限制是:能够进行动态批处理的网格的顶点属性规模要小于例如,如果中需要使用顶点位置,法线和纹理坐标这三个顶点属性,那么要想让模型能够被动态批处理,它的顶点数目不能超过3需要注意的是,这个数字在未来有可能会发生变化,因此不要依赖这个数据。2一.般来说,所有对象都需要使用同一缩放尺度(可以是(1,1,1),(1,2,3),(1.,51.,41.)3等,但必须都一样)。一个例外情况是,如果所有的物体都是用了不同的非统一缩放,那么他们也是可以被动态批处理的。但在Jnity中,这种对模型缩放的限制已经不存在了。3.对于使用光照贴图纹理的物体需要小心处理。这些物体需要额外的渲染参数,例如,在光照贴图纹理上的

9、索引和偏移量以及缩放信息等因此,为了让这些物体可以被动态批处理,我们需要保证它们指向光照贴图纹理中的同一个位置。有多个通道的会中断批处理。在前向渲染中,我们有时需要使用额外的来为模型添加更多的光照效果,但这样一来模型就不会被动态批处理了。Unity3D中的静态批处理技术静态批处理的实现原理是,只在运行的开始阶段,把需要进行静态批处理的模型合并到一个新的网格结构中,这意味着这些模型不可以在运行时刻被移动。但由于它只需要进行一次合并操作,因此比动态批处理更加高效。但静态批处理的缺点是需要占用更多的内存来存储合并后的几何结构。这时因为,如果在静态批处理前一些物体共享了相同的网格,那么在内存中每一个物

10、体都会对应一个该网格的复制品,即一个网格会变成多个网格再发送给u如果这类使用相同网格的对象很多,那么这就会成为一种性能瓶颈了。例如,如果在一个使用了100个0相同树模型的森林中使用静态批处理,那么就会多使用100倍0的内存,这会造成严重的内存影响。这时的解决方法就是要么忍受这种牺牲内存换取性能的方法,要么不要使用静态批处理,而使用动态批处理技术(但要小心控制模型的顶点属性数目),或者自己编写批处理方法。在Unity中使用静态批处理的方法是,在场景中选中需要静态批处理的物体,在其n面板的右上角勾选上tintti静态属性。在内部实现上,Unit疸先把这些静态物体变换到世界空间下,然后为它们构建一个

11、更大的顶点和索引缓存,对于使用同一材质的物体。Unity只需要调用一个就可以绘制全部物体。而对于使用不同材质的物体,静态批处理同样可以提升渲染性能。尽管这些物体仍然需要调用多个,但静态批处理可以减少这些之间的状态切换,而这些切换往往是费时的操作。我们可以在Unity的分析器中观察到应用静态批处理前后tOttf顶点缓存对象)的变化。在一些物体共享了相同的网格的情况下,我们可以看到这些物体在使用了静态批处理技术后,t的数目变大了,这正是因为静态批处理会占用更多内存的缘故。正如上面所讲,静态批处理需要占用更多的内存来存储合并后的几何结构,如果一些物体共享了相同的网格,那么在内存中每个物体都会对应一个

12、该网格的复制品。如果场景中包含了除了平行光以外的其他光源,并且在中定义了额外的来处理它们,这些额外的部分是不会被批处理的,但是处理平行光的部分仍然会被静态批处理。Unity3D中使用共享材质无论是动态批处理还是静态批处理,都要求模型之间需要共享同一个材质。但不同的模型之间总会需要有不同的渲染属性,例如,使用不同的纹理,颜色等。这时我们需要一些策略来尽可能的合并材质。如果两个材质之间只有使用的纹理不同,我们可以把这些纹理合并到一张更大的纹理中,这张更大纹理被称为是一张图集to一旦使用了同一纹理,我们就可以使用同一材质,再使用不同的釆样坐标对纹理釆样即可。但有时除了纹理不同外,不同的物体在材质上还

13、有一些微小的参数变化,例如,颜色不同,某些浮点属性不同。但是,不管是动态批处理还是静态批处理,它们的前提都是使用同一个材质。是同一个,而不是使用了同一的材质,也就是说它们指向的材质必须是同一个实体。这意味着,只要我们调整了参数,就会影响到所欲使用这个材质的对象。那么想要微小的调整怎么办呢?一种常用的方法就是使用网格的顶点数据来存储这些参数(最常见的就是顶点颜色数据)。经过批处理后的物体会被处理成更大的发送给U中的数据可以作为输入传递给顶点着色器,因此,我们可以巧妙地对中的数据进行控制,从而达到不同效果的目的。一个例子就是,森林场景中的所有树使用了同一材质,我们希望它们可以通过批处理来减少,但不

14、同树的颜色可能不同。这时,我们可以利用网格顶点的颜色数据来调整。需要注意的是,如果我们需要在脚本中访问共享材质,应该使用n来保证修改的是和i其他物体共享的材质,但这意味着修改会应用到所有使用该材质的物体上。另一个类似的是n.如果使用in来修改材质iUnity会创建一个该材质的复制品,从而破坏批处理在该物体上的应用。关于在unid中使用批处理的注意事项:尽可能的使用静态批处理,但要时刻小心对内存的消耗,并且记住经过静态批处理的物体不可以再被移动。如果无法进行静态批处理,而要使用动态批处理的话,那么尽可能减少物体的数目并且让这些物体包含少量的顶点属性和顶点数目。3对于游戏中的小道具,例如可以捡拾的金币等,可以使用动态批处理。对于动画的这类物体,我们无法全部使用静态批处理,但其中如果有不动的部分,可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论