(四)unity中的渲染优化技术——————(游戏物体、UI、模型的优化,以及移动平台的一些优化)

一、渲染优化的元素

和渲染优化相关的东西很多,大致可分为网格、着色器材质、光照和阴影。相关的优化技术有相机视椎体剔除、遮挡剔除、基于层的分类剔除与合并绘制调用。LOD降级分为着色器的LOD降级和LodGroup降级。在所有这些方面地形是比较特殊的,假设使用的是unity的地形,可以将这些与性能优化有关的元素整理成下图:

 1.1 小型物体的优化

小型物体不能像一堵墙或桌子那样提供遮蔽,按照功能,小型物体可以分为非功能性的和功能性的。

对于以下非功能性的小型物体的解释:

1.静态物体的图集。如果图集是静态的,处在同一个角落(屋子或营地)的小型物体可以合并贴图到一个图集中,并使用同一种材质。对于unity而言,如果你使用了零散贴图也没关系,可以设置打包的标签,让Sprite Packer帮你打包,这样得到的也是合并的图集。

一个角落有一个图集,这种图集应该是静态小物体贴图的合并。有些小型物体可能会出现在地图上各个角落,如果出现频率不是特别高,只在五六个地方反复出现,可以考虑地图上的冗余,即保持一个角落有一个图集。

如果这个小型物体的出现频率特别高,不合并到图集上,或者合并到一个单独的高频率物体的图集中也行,如子弹。

2.动态物体的图集也应该专门放到动态物体准备的图集中,使用同一种材质来制作。

动态小型物体应该严格限制顶点数量,运行时的合批有一个的CPU计算、空间转换,而且unity合批的上限是900个与顶点相关的通道(目前)。

小型物体应该放置到一个单独的图层上(根据功能性也可以分别放到两个图层上)。小型物体没有遮蔽功能,而且是绘制调用数量的一个主要来源,应该对其使用基于层的、较小的剔除距离。

小型物体的遮挡剔除的优化重点,但也有问题,如烘焙精细度和精确度,对于中型物体,比如汽车,在视觉上和功能上都比较重要,可以考虑LOD Group这种不同细节的模型,保证视觉上的存在和远距离渲染的简化。

对于小型物体,不建议使用LOD Group。对于处于一个闭塞空间(如房子内使用的小物体),可以设定一个更小的剔除距离,比如设为房子大小的3倍距。相对于空旷的空间,从外面观察房间内一般都比较昏暗,因此看不清楚/无法发现房间内的小型物体是正常的,逻辑上讲得通。

如果闭塞空间内的物体可以被使用,比如被玩家带到了室外,那么就应该改变其在层上的剔除距离。闭塞空间内的物体本应该使用遮挡剔除来解决,但是使用遮挡剔除有代价和精度问题。如果可以使用遮挡剔除来解决,我们先在层的这个概念上做好优化。

1.2中型物体的优化

对于建筑这种中型物体或者对于岩石这种网格细节密度比较大的物体,可以根据物体在屏幕上的大小使用LODGroup,动态切换/使用不同细节的网格,从而调节渲染性能的表现效果,这需要在项目规划阶段规划好时间。

但是LOD的这种功能是以冗余(内存为代价的),还会给美术添加额外的建模负担。不过对于建筑这种大方块物体,在较远的距离上,可以使用一个比立方体简单的表达方式。此外这种方式影响的只是“物体”的渲染,与物理碰撞没有关系,也就是说不会影响看不见的运算逻辑。

1.3大型物体的优化

unity的遮挡剔除和相机的剔除功能是并行的,可以在基于View Frustum剔除的基础上进一步剔除那些不会出现在视野内的小物体。遮挡剔除主要靠烘焙静态物体之间的遮挡,将它们存储在一个树状结构中,然后在运行时查询,从而剔除那些被遮挡的、不会出现在视野内的物体。

但是遮挡剔除也有问题,首先遮挡剔除会线下烘焙、生成数据,这个线下处理中的时间不是问题,问题是它所产生的数据。根据场景的大小以及烘焙的细分粒度,会产生10KB到10MB的数据,如果遮挡剔除粒度太粗,可能会剔除失败,比如被墙挡住的方块并未被剔除掉。

如果简单地增加遮挡剔除的粒度,就会使遮挡剔除的数据膨胀,并且增加运行时CPU查询表结构的负担,因此这也是一个效能和开销之间平衡的问题。

另外从遮挡剔除的角度来说,物体被分割成小块,有利于增加遮挡剔除的效率。但把散乱、不同角度的小型物体连成一个大型物体,不利于遮挡剔除。

1.4模型的优化

下面介绍建模的相关概念。

在建模软件(比如Max 和Maya)中几何体的同一位置的点就是一个点。但是在unity中,准确地说,在GPU上,点的意义对应于三角面和相邻的三角面。如果定义它们的顶点的法线不一致,就是不能共享的一个顶点。软边就是指相邻三角面共享同一个顶点,它的法线以及所有和顶点相关的性质(如切线、顶点色)和UV都共享。而硬边则意味着相邻的面具有不同的顶点,对同一个位置顶点的切割意味着更多的数据、内存,

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值