Unity 技术之对集成显卡进行优化
多边形数量问题
对于现今的大部分图形卡而言,多边形数量通常并非关键问题,一般认为对象数量和填充率更为重要。然而,大部分较老的集成芯片(如 Intel 945 / GMA 950 及其类似型号)则不然。在这些集成显卡中,多边形数量的重要性取决于顶点着色器或灯光的复杂度以及 CPU 的速度(实际上,大部分集成显卡依靠 CPU 来转换并照亮顶点)。
Big Bang Brain Games 游戏在使用 1 - 2 逐顶点灯且无像素灯(特别是采用顶点光照 (VertexLit) 渲染路径)的场景中,从不使用超过 2.5 万个三角面。当帧速率下降时,会通过质量设置 (Quality Settings) 自动提升性能。在高端机器中,启用像素灯时可设置较高的质量。
造成速度下降的原因主要有多次绘制物体、使用复杂的顶点着色器以及过多的多边形。基于此,可采取以下优化策略:
- 采用合适的渲染路径:可行时使用顶点光照 (VertexLit) 渲染路径。该路径能确保无论场景中有多少灯光,每个对象都仅绘制一次。
- 合理使用灯光:尽量减少灯光的使用,包括顶点灯。只有当几何图形或灯光移动时,灯光才发挥作用。否则,可使用光照贴图 (Lightmapper) 进行烘烤照明,这样不仅运行速度更快,而且外观也更美观。
- 优化几何体:具体优化方法将在后续部分详细介绍。
- 利用工具辅助优化:使用渲染统计资料 (Rendering Statistics) 窗口和分析器 (Profiler) 来辅助分析和优化。
优化模型几何体
优化模型几何体时,需遵循两条基本原则:
- 控制面的数量:若非必要,不要使用过多的面。
- 减少 UV 贴图接缝和硬边:使 UV 贴图接缝和硬边的数量尽可能少。
需要注意的是,图形硬件处理的实际顶点数通常与三维应用程序中显示的不同。建模应用程序一般显示的是几何顶点数,即构成模型的顶点数。但对于显卡而言,当顶点有多条法线(在“硬边”上)、多个 UV 坐标或多种顶点颜色时,这些顶点必须分割成单独的点。因此,在 Unity 中看到的顶点数通常与三维应用程序中显示的不同。
烘培灯光
将灯光烘培至光照贴图或顶点颜色中。Unity 内置了出色的光照贴图 (Lightmapper),同时也可在许多三维建模包中进行光照贴图的烘培。
生成光照贴图环境的过程仅比在 Unity 的场景中直接放置灯光多花费一点时间,但其具有显著优势:
- 运行速度更快:特别是在场景中有多盏灯的情况下,烘培后的光照贴图能大幅提升运行速度。
- 外观更美观:由于可以烘培全局照明,场景的外观会好看许多。
在下一代游戏中,光照贴图依然是非常重要的技术。通常,游戏会使用光照贴图环境,并仅搭配一两盏实时动态灯。