我的GearVR应用程序(在Unity 5.4上开发)出现了性能问题,所以我决定做一个小实验并设置最简单的场景来研究性能:
在我的电脑上,当我查看剖析器时,我得到以下资料:
关于您的期望:接近4000 FPS。
然而,当我构建完全相同的场景并在我的Galaxy S6上运行它(使用ETC2 GLES 3.0纹理压缩)时,我得到了这个配置文件:
现在已降至约60FPS。 WTF?当我进一步了解细节时,我发现绝大部分CPU使用时间花在了等待GPU上:
然后当我查看GPU使用情况时,我发现它花了99%的时间来应用GUITexture.draw:
问题是......在我非常简单的场景中没有怪异的GUI纹理!我不明白这一点。有人可以向我解释发生了什么以及如何减少PC和移动设备之间的极端性能差异吗?
答案 0 :(得分:2)
我不知道你是否找到了答案(我希望你能找到答案),但不久前我遇到了同样的问题,其他人也可能遇到同样的问题。
1)GUITexture.Draw
GUITexture.Draw应该是“开发构建”模式。它在渲染整个场景后添加了一个dev水印纹理。我们可以在Unity的帧调试中看到它。 Unity frame debug
着色器属性表示它使用名为“UnityWatermark-dev”的纹理作为_MainTex。您可以使用图形调试器进行确认,我使用了Mali Graphics Debugger。
这里的纹理是什么样的:UnityWatermark-dev
我不知道为什么它会在VR模式下产生这样的开销,但是当您禁用VR时它会相当便宜。
2)分析
分析时不要使用您的PC,除非您计划启动rift或vive版本。 Galaxy S6和PC之间的处理能力差异很大(如果您的GPU和处理器不同,甚至可以在PC之间)。
配置文件时始终使用目标设备。这是了解项目中发生的事情的唯一方法。如果您想在您的移动设备中使用GearVR版本配置文件,那么您可以在PC上启动Rift / Vive项目配置文件。