Unity 优化场景的一些方法

在做一些项目的时候,可能美术模型不标准,加上只关心好看,不关心性能。因此到最后整个场景运行费劲。以下是我在做webgl工程时,积累的一些优化经验,尽量不影响效果。

一、模型检查

首先检查美术的模型,这里检查模型,不是检查顶点三角数量,因为这可能影响效果。主要检查贴图,材质。美术在搭建场景的时候,都习惯用standard shader。然后一些模型只是因为颜色不一样,就用了两个材质球,模型贴图完全没有合并。有的模型还有submesh,但是submesh材质球只是贴图不一样。

解决方法:

我自己写了一个合并材质球的插件。如果两个模型,只有贴图不一样(纹理,法线,自发光),可以将材质合并,自动生成合并贴图,然后生成修改uv后的模型。原理是将材质的贴图合并(叠加颜色属性或者生成一个单色图片),然后根据合并后图片的uv,修改模型的uv。这种方法可以把大多数模型,通用一个材质球。

二、shader检查

对于不重要的物体,可以不要使用standard Shdaer,可以自己写一个有基础属性的shader。

 

三、物体静态

模型Mesh合并渲染可以节省drawcall,因此在使用第一步的步骤后,将材质一致的模型通过StaticBatchingUtility.Combine合并模型。合并的模型顶点数好像有一个上限40000左右。

四、GPU Instance

将材质球勾选上GPU Instance, 主要针对非静态的物体。然后只要材质球一致,就会减少drawCall。

自己写的Shader 要自己写GpuInstance 的实现。

五、DrawMeshInstanced

针对很多重复的相同物体,可以使用DrawMeshInstanced,这个和GPU Instance原理一样。

六、灯光烘焙

如果场景灯光是固定的,物体有部分是static的,可以选择烘焙lightmap。如果有昼夜系统,白天灯光有变化,夜晚灯光主要点光源,其实也可以烘焙一下夜晚的灯光。自己在shader中切换,物体是否使用lightmap。也可以为物体烘焙好几套lightmap,然后动态替换。

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一个流行的游戏引擎,它通常用于创建大型游戏。在Unity中,获取场景中的物体是一个重要任务,因为它涉及到游戏中许多对象的处理和控制。通过优化这个过程,您可以获得更流畅的游戏性能。 下面我将讲解一些商业实践中使用的一些方法: 第一,使用对象池:在游戏中经常会创建和销毁大量的物体,在每次创建新的物体时,Unity都会申请内存和销毁旧的物体,这样会导致游戏的性能下降。通过使用对象池,我们可以重复使用旧的物体,而不是每次都创建新的物体。这样可以减少内存的分配和销毁,提高性能和稳定性。 第二,使用缓存:在Unity中,每次使用Find获取GameObject引用都会访问场景树结构,这会导致性能下降。通过使用缓存,我们可以通过在场景加载时获取对物体的引用,并将它们存储在全局或静态变量中,以便在游戏运行时直接使用,这可以显著提高游戏性能。 第三,使用八叉树:如果您的场景中有很多物体,那么查找和获取这些物体的引用会变得很麻烦。一种解决方案是使用八叉树。八叉树是一种用于快速定位物体的数据结构,可以将场景划分为多个较小的区域。这个技术使得查找特定的物体更加高效,并且可以减少游戏的卡顿现象。 第四,使用裁剪技术:在游戏中,有些物体可能不需要显示出来。通过使用裁剪技术,我们可以检查每个物体是否在摄像机的视野内。这可以减少需要处理的物体数量,并提高性能。 总之,从各种角度来看,Unity优化场景中物体获取是一个非常重要的任务。通过使用适当的技术,我们可以减少CPU时间,提高游戏性能并创造更好的游戏体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值