欢迎大家继续学习 《Unity 游戏编程进阶》 本节我们继续介绍
Unity 渲染优化的方法 Unity
所有的渲染 工作均通过 Shader 来完成,因此
Shader 的性能决定了渲染的效率 专为移动平台优化的 Shader
简单高效,效果尚可 我们可以使用移动平台的 Shader 来优化 PC
端游戏的渲染效率 [空白_录音]
我们在第二单元的课程中介绍过,移动平台的 Shader 也各有优劣
大家可以根据平台计算能力和游戏画面效果的实际需求,选择不同的 Shader
一般情况下,我们建议大家尽量使用 Diffuse 着色器和 Vertex Light
着色器 这两种着色器的性能相对较高
Unity 中,引擎准备渲染数据,通知 GPU 进行渲染的过程我们称为一次
Draw Call 一个 Draw Call 通常只绘制一个物体,每次 Draw Call
都需要准备 Shader 和材质,比较耗时 因此每帧的 Draw Call 数量是一项非常重要的性能指标
[空白_录音] Draw Call
合并技术是把具有相同材质的多个物体合并为一个物体 在一次 Draw Call 中完成绘制,从而提高性能。
Unity 有两种 Draw Call 合并技术 分别是动态合并和静态合并
动态合并允许物体自由移动移动和旋转
且不需要我们做额外的配置,但是动态合并对物体的顶点数和缩放情况等有所要求 静态合并能够以最大化的方式实现
Drawcall 合并 但只对静态物体有效,需要在编辑阶段进行一些配置
在项目构建窗口中,点击 Player Settings 按钮,打开
Player Settings 视图 在 Player Settings 视图的 Other Settings
标签下,勾选 Static Batching 和 Dynamic Batching 启用静态合并和动态合并。
需要注意的是,不同平台 Draw Call 合并需要分别设置 本页 PPT 的图片展示
Android 平台的 Draw Call 的合并设置 对于要开启 Draw Call
合并的静态物体 我们需要在其 Inspector 检视视图中,勾选
Static 下的 Batching Static Unity 对设置 Batching Static
的物体启用静态合并 [空白_录音]
我们可以在游戏预览过程中,打开 Game 视图的 Statistics 窗口
查看当前场景的 Draw Call 数量以及 Draw Call 合并技术节省的 Draw Call
数量 本页 PPT 展示了一个预览状态下的游戏 当前帧使用
Draw Call 数量为 51 通过 Draw Call 合并技术节省的 Draw Call 数量为
164 如果光源采用逐像素渲染模式
渲染性能是比较低的,我们应该减少使用逐像素模式的 Pixel Light
把光源的 Render Mode 属性设置为 Not Important,光源不会进行逐像素渲染 Unity
建议: 最多只让一个光源采用逐像素渲染模式
该光源的类型最好是方向光。
Unity 中 实时局部光照的计算开销非常大
我们可以使用"全局光照 + 光照探头"的组合,代替实时局部光照 为场景提供照明。
全局光照能够提供更好的光影效果,以及更高的渲染效率 在
Unity 中
实现实时阴影,需要对场景进行多次渲染,开销非常巨大 我们应该尽量避免使用实时阴影。
Projector 投影组件 能够为游戏对象模拟阴影效果,Projector
模拟术的阴影效果虽然不及实时阴影 但是性能开销比较小,感兴趣的同学可以访问本页
PPT 底部的链接 在 Unity 文档中查看 Projector 的使用方法
如果必须使用实时阴影 我们可以在
Quality 质量设置中,选择合适的阴影质量,在画面效果和渲染效率之间找到平衡点
关于 Quality 质量设置的更多内容,我们会在后面的课程中详细讲述
对于体积较小,或者不重要的物体,我们应该设置它们的 Mesh Renderer
组件的 Cast Shadows 和 Receive Shadows 属性,使它们不产生阴影,也不接收阴影
我们应该为纹理启用 Mip Maps 技术 Mip Maps
技术为原始纹理图片,生成一组按比例缩小后的纹理图片 这样虽然会消耗额外的存储空间,但是
渲染系统可以根据实际情况,选择合适尺寸的纹理进行渲染 减少了对大纹理的重新采样。
Mip Maps 技术能够提高纹理的渲染速度和渲染效果 为纹理启用
Mip Maps 技术的方法,如本页
PPT 所示 首先在项目视图中选中纹理资源
检视视图中,把纹理的 Texture Type 属性设置为 Advanced 然后勾选
Generate Mip Maps,最后点击 Apply 按钮 就完成了
Mip Maps 的启用 下一节我们介绍 Unity
内存优化的方法 下面是演示环节
我们演示遮挡剔除技术和 Drawcall 合并技术的使用方法 优化游戏的渲染效率