问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

管理PC和控制台游戏的GPU使用情况

创作时间:
2025-01-21 20:08:30
作者:
@小白创作中心

管理PC和控制台游戏的GPU使用情况

这是为您的Unity项目介绍优化技巧的系列文章的第三篇。将它们作为指南,以更少的资源运行更高的帧速率。尝试过这些最佳实践后,请务必查看本系列的其他页面:

了解目标硬件的限制,以及如何配置GPU以优化图形渲染。试试这些技巧和最佳实践,以减少GPU的工作量。

在免费电子书中还能找到更多最佳实践、优化游戏机和PC的游戏性能.

使用绘制调用批处理

要在屏幕上绘制游戏对象,Unity会向图形API(如OpenGLVulkanDirect3D)发出绘制调用。每次绘制调用都需要耗费大量资源。

绘制调用之间的状态变化(如切换材料)会对CPU端造成性能开销。PC和控制台硬件可以进行多次绘制调用,但每次调用的开销仍然很高,因此需要尽量减少调用次数。在移动设备上,拔号呼叫优化至关重要。您可以通过批处理绘制调用来实现这一点。

批处理绘制调用可最大限度地减少这些状态变化,并降低渲染对象的CPU成本。Unity可以通过高清渲染管道 (HDRP) 或通用渲染管道 (URP) 使用多种技术将多个对象合并成较少的批次:

  • SRP Batcher:在"高级"下的"管道资产"中启用SRP Batcher。使用兼容着色器时,SRP Batcher可减少绘制调用之间的GPU设置,并使材质数据持久存在于GPU内存中。这还能大大加快CPU的渲染速度。使用更少的着色器变体和最少的关键字来改进SRP批处理。请查阅SRP文档,了解您的项目如何利用这一渲染工作流程。
  • GPU实例化:如果有大量具有相同网格和材质的相同对象,可使用GPU实例化功能通过图形硬件批量处理这些对象。要启用GPU实例化,请在"检查器"的"项目"窗口中选择材质,然后选中"启用实例化"。
  • 静态批处理:对于非移动几何体,Unity可以减少对共享相同材质的网格的绘制调用。这比动态批处理更有效,但会占用更多内存。在"检查器"中将所有从不移动的网格标记为"批处理静态"。Unity会在构建时将所有静态网格合并为一个大网格。StaticBatchingUtility类还允许您在运行时创建这些静态批次(例如,在生成非移动部件的程序级后创建)。
  • 动态批处理:对于小型网格,Unity可以在CPU上对顶点进行分组和变换,然后一次性绘制完成。但请注意,除非您有足够的低多边形网格(每个网格的顶点不超过300个,顶点属性总数不超过900个),否则不应使用此方法。否则,启用它将浪费CPU时间来查找要批处理的小网格。

您可以通过几种简单的方法将批处理功能最大化:

  • 在场景中尽量少用纹理。较少的纹理需要较少的独特材料,因此更容易批量生产。此外,尽可能使用纹理图集
  • 始终以尽可能大的图集尺寸烘焙光贴图。较少的光贴图需要较少的材质状态变化,但要注意内存占用。
  • 小心不要无意中将材料实例化。访问渲染器.材质脚本会复制素材,并返回对新副本的引用。这将破坏任何已包含该材料的现有批次。如果您想访问批处理对象的材质,请使用Renderer.sharedMaterial来代替。
  • 在优化过程中,使用Profiler或渲染统计,留意静态和动态批处理次数与总绘制调用次数的对比。

更多信息请参阅绘制调用批处理文档

检查框架调试器

使用"帧调试器"将播放定格在单帧上,并逐步了解Unity如何构建场景。这样,您就能发现优化机会。查找不必要的渲染游戏对象,并禁用它们以减少每帧的绘制调用。

帧调试器的一个主要优势是可以将绘制调用与场景中的特定GameObject关联起来。这使得调查某些问题变得更容易,而外部框架调试器可能无法做到这一点。

注意:框架调试器不会显示单个绘制调用或状态变化。虽然只有原生GPU分析器才能提供详细的绘制调用和时序信息,但帧调试器对于调试流水线问题或批处理问题仍然很有帮助。

详情请阅读框架调试器文档

优化填充率,减少透支

填充率是指GPU每秒能呈现到屏幕上的像素数量。如果您的游戏受到填充率的限制,这意味着它试图在每帧绘制的像素数超过了GPU的处理能力。

在同一像素上多次绘制称为过度绘制。过度绘制会降低填充率,并耗费额外的内存带宽。最常见的透支原因是

  • 重叠的不透明或透明几何体
  • 复杂着色器,通常需要多次渲染传递
  • 未优化的粒子
  • 重叠的用户界面元素

虽然应尽量减少超支的影响,但解决超支问题没有放之四海而皆准的方法。尝试使用以下技术来减少其影响。

减少批次数量

与其他平台一样,在游戏机上进行优化通常意味着减少抽签调用批次。以下是一些可能会有所帮助的技巧:

  • 使用遮挡剔除移除隐藏在前景物体后的物体,减少过度绘制。请注意,这需要额外的CPU处理,因此请使用Profiler来验证将工作从GPU转移到CPU是否真的有益。
  • 如果有许多对象共享相同的网格和材质,GPU实例化还可以减少批次。限制场景中的模型数量可以提高性能。如果做得巧妙,就可以构建一个复杂的场景,而不会让它看起来重复。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号