↑ 返回顶部

简介 链接到标题

Unity3D 场景优化学习

0,通过 Profiler 和 Frame Debugger 来分析如何优化 链接到标题

1, Static 链接到标题

场景中物体的 Inspector 面板中会有一个 Static 选项,它用来标记当前游戏对象是静态的还是动态的,这个选项中还细分了一些选项:

Unity Static 选项

Contribute GI (贡献 GI) 链接到标题

勾选后可以让该物体的 Mesh Renderer 参与全局光照的烘培计算,通常只有场景启用了 Baked Global Illumination 或者 Realtime Global Illumination 的设置才会起作用

Occluder Static (静态遮挡器) 链接到标题

遮挡剔除效果的一部分,标记后该物体能够遮挡其他的物体

Occludee Static (静态遮蔽物) 链接到标题

遮挡剔除效果的一部分,标记后该物体能被其他物体所遮挡

Batching Static (静态合批) 链接到标题

可以自动合并静态游戏对象的 mesh,通常适用于场景内完全静止的物体

勾选之前需要注意:如果当前物体自身有对应的动画,而且这个动画会改变物体本身的 Transform 的话,就不能勾选静态合批了,否则会和动画冲突导致报错,如果动画没有修改 Transform 的话似乎能正常使用

另外,带有透明度的材质(Transparent)本身的渲染顺序和其他的材质(比如 Standard,一般都是从近处开始渲染,但是透明材质是从远处开始渲染的)不同,所以不建议给透明材质勾选静态合批,不然显示效果可能达不到理想状态

在预计算导航数据时包含游戏对象

这个选项与Nav导航系统相关,但是新版 Unity 中似乎不再有这个选项(这里是由于用新版本打开了旧项目,所以 Nav 导航系统相关的选项都被保留下来了)

链接到标题

2,LOD Group 组件和 Unity Mesh Simplier 插件辅助实现 LOD 效果 链接到标题

LOD(Levels of Detail) 效果,简单来说就是在不同距离下显示不同精度的模型以减轻 GPU 渲染压力

Unity 本身就自带 LOD Group 组件用来实现 LOD 效果,只要准备好对应游戏对象的高中低模,就可以实时根据摄像头和物体的距离来切换模型(距离越远精度越低)

Unity LOD Group 组件

因为这个组件很容易上手就暂时不展开细讲了

在没有提前准备好对应的高中低模的时候,我们也可以使用一个非常方便的插件来直接在场景内生成 LOD 模型: Unity Mesh Simplier (Github 链接,上面有对应使用文档教程)

简单使用方法省流:首先给要处理(而且根物体上面要有MeshRenderer)的物体添加 LOD Generator Helper 组件,调整各项参数后点击生成 LODS

LOD Generator Helper 组件

使用时要注意:如果生成了 LODS 之后觉得不满意想要重新修改的话,最好先 Destory LODS 再重新在 LOD Generator Helper 中调整参数,如果这时直接在生成的 LODS 里面修改的话似乎会让生成的 LOD 模型和原本的模型重合(?)

3,GPU 实例化 链接到标题