原教程地址(涵盖Unity官方的示例demo) 该课程专为技美和内容创作者制作(特为程序员写此篇,哈哈)
一、为什么要进行优化?
对游戏性能分析和优化可以给玩家带来更好的体验。 优化过程步骤: 1.性能分析;工具:Unity内置的Profiler、Frame Debugger。教程推荐的Arm Streamline。 2.分析数据; 3.应用优化; 4.验证优化; 5.重复上述步骤。
二、针对几何体进行优化
几何体(多边形网格)是构成3D对象点(vertices)、线(edges)、面(triangles)的集合。 Unity中网格索引缓冲区的格式决定3D对象可以使用的最大顶点数: 1.16位最多支持65535个; 2.32位最多支持40亿个。
- 尽可能在实际发布设备上查看或测试应用程序。移动设备屏幕小于计算机的屏幕,因此看不到大量三角形的使用细节(模型制作时,针对移动端适当减少模型面数和顶点数)。
- 根据与摄像机的距离,制作不同精度的模型,较远端的模型甚至可以使用烘培贴图替代。
- 重要部位的细节处理可以使用更多的三角形,不常显示的区域则使用较少的三角形。
- 使用纹理和发现贴图实现精细的细节,而不是用高密度三角形网格建模。
三、使用LOD进行优化
Level of Detail,可以根据对象与摄像机的距离控制场景中3D对象渲染的顶点数量。 使用建议: 1.减少三角形数量时,要衡量细节与性能; 2.Mipmap可与模型配合使用; 3.在平坦区域移除更多多边形; 4.不仅网格,也可作用于优化纹理和着色器; 5.静态对象或较少多边形对象不应使用LOD。
创建LOD网格,有3ds Max的ProOptimizer、Maya的Generate LOD Meshes;Unity自带的LOD Group;插件AutoLOD。
官方教程demo可详细查看with LOD和 no LOD两种情况下的各种数据情况。
四、针对网格进行优化
- 使用平滑组或自定义顶点法线定义边缘的硬度和改变模型的外观。
- 使用网格拓扑创建3D资源。
- 适度夸大对象某些部位提高其可见性。
- 使用Mesh.CombineMeshes()将多个网格合并成一个,减少渲染绘制次数。相同材质则设置mergeSubMeshes为true。
- 导入不包含动画数据的fbx网格时,将Animation Type设置为None,确保不会生成Animator组件。
- 未在运行时修改的模型,不要打开Read/Write Enabled,以免在内存中保留网格数据副本。
- 静态/动态批处理。
五、针对纹理进行优化
纹理是3D模型表面的图像,赋予模型细节和真实性。
- 推荐使用包含许多网格共享的多个纹理的大型纹理图集。
- 较粗糙的可以适当减小纹理大小。
- 纹理不作为颜色信息使用就不要使用sRGB颜色空间,会导致材质出现错误视觉效果。
- 针对Android的纹理压缩多个选项:ASTC(自适应可伸缩纹理压缩)、ETC1/ETC2(Ericsson纹理压缩),推荐使用Arm开发的ASTC,必须要快速部署游戏则使用ETC。
- 合理的选用纹理过滤组合。
- UV展开保持笔直,可以获得更好的质量。
- 将UV接缝放在可遮挡住的地方。
- 创建纹理只包含可以看到的细节。
- 将多个纹理打包成一个纹理可以节省内存。
- 使用闲置通道存储Alpha遮罩可将漫反射纹理保持为16位,减小文件大小。
- ASTC压缩可减少内存,降低GPU带宽需求。
六、针对着色器进行优化
创建着色器时,你可以决定材质将如何对光做出反应。大多数着色器可归类位光照着色器和五光照着色器。
- 光照不影响无光照着色模型。渲染成本更低,或者渲染更快。
- 卡通风美术设计可与五光照着色良好配合。
- 光照着色器可能是当今移动游戏中最常用的着色模型。
- 尽可能使用最简单的着色器,避免使用不必要的功能。
- 使用转为粒子设计的Unity内置着色器。
- 减少游戏中粒子数量/大小,减少过度绘制。
- 尽量减少速度较慢的数学运算。
- 使用urp的SRP Batcher。
七、针对材质进行优化
渲染具有透明度的对象总是会使用更多的GPU资源,在移动平台上,尽可能使用不透明材质。
Alpha测试和Alpha混合时最常用的在着色器中实现透明度的方法。 Alpha测试使材质完全不透明或完全透明,它会禁用GPU中某些优化功能,因此不必要时尽量避免使用Alpha测试。 Alpha混合使材质具有一定范围的透明度。对于移动平台,Unity推荐使用Alpha混合。
八、针对光照进行优化
1)烘培光照(baked) 运行游戏前将光照数据存储在纹理贴图中的过程就是烘培。
- 光照和阴影被烘培到光照贴图,因此在运行时无法修改。但此处理在创建光照时完成,不影响运行时性能。
- 如果游戏中有动态或移动对象,阴影可能会显得很奇怪。
- 烘培光照模式是这三种中计算成本最低的方法。
2)混合光照(mixed) 混合光照模式可以视为烘培光照和实时光照的混合体。
- 提供动态的直接光照和阴影。
- 混合光照类型的光源可以参与静态物体的光照贴图烘培过程。
- 光源会影响动态物体,包括为其生成阴影。
- 可在运行时更改强度,并且仅更新直接光照。
- 混合光照模式是一种代价高昂的计算方法。
3)实时光照(real-time)
- 实时光照模式提供动态或可移动的光照,可在运行时修改。
- 实时光照模式是这三种中计算成本最高的方式。
|