填充率,画布和输入
版本检查:2017.3
-
难度:高级
本章讨论构建Unity UI的更广泛问题。
修复填充率问题
可以采取两种措施来减轻GPU片段管道的压力:
- 降低片段着色器的复杂性。有关详细信息,请参阅“UI着色器和低规格设备”部分。
- 减少必须采样的像素数。
由于UI着色器通常是标准化的,因此最常见的问题是过度使用填充率过高。这通常是由于大量重叠的UI元素和/或具有占据屏幕的重要部分的多个UI元素。这两个问题都可能导致极高的透支度。
为了减少填充率过度使用并减少过度抽取,请考虑以下可能的补救措施。
消除不可见的UI
需要最少重新设计现有UI元素的方法是简单地禁用播放器不可见的元素。最常见的情况是打开具有不透明背景的全屏UI。在这种情况下,可以禁用放置在全屏UI下方的任何UI元素。
最简单的方法是禁用包含不可见UI元素的根GameObject或GameObjects。有关其他解决方案,请参阅“ 禁用画布”部分。
最后,通过将其alpha设置为0来确保没有隐藏UI元素,因为该元素仍将被发送到GPU并且可能需要宝贵的渲染时间。如果UI元素不需要Graphic组件,您只需删除它,光线投射仍然可以工作。
简化UI结构
为了减少重建和呈现UI所需的时间,保持UI对象的数量尽可能低是很重要的。尝试尽可能多地烘焙食物。例如,不要仅使用混合GameObject将色调更改为元素,而是通过材质属性来执行此操作。此外,不要创建像文件夹那样的游戏对象,除了组织场景之外没有其他目的。
禁用隐形摄像头输出
如果打开具有不透明背景的全屏UI,则世界空间相机仍将在UI后面呈现标准3D场景。渲染器不知道全屏Unity UI会遮挡整个3D场景。
因此,如果打开一个完全全屏的UI,禁用任何和所有模糊的世界空间相机将通过简单地消除渲染3D世界的无用工作来帮助减少GPU压力。
如果UI未覆盖整个3D场景,您可能希望将场景渲染到纹理一次并使用它而不是连续渲染它。您将无法在3D场景中看到动画内容,但这在大多数情况下都是可以接受的。
注意:如果将画布设置为“屏幕空间 - 叠加”,则无论场景中活动的摄像机数量如何,都将绘制它。
多数模糊的相机
许多“全屏”用户界面实际上并不掩盖整个3D世界,但却让世界的一小部分可见。在这些情况下,捕获渲染纹理中可见的世界部分可能更为理想。如果世界的可见部分在渲染纹理中“缓存”,则可以禁用实际的世界空间相机,并且可以在UI屏幕后面绘制缓存的渲染纹理以提供3D世界的冒名顶替版本。