我们有一个使用Metal
进行渲染的应用。这个应用程式可在执行iOS11的装置上正常运作。在运行iOS12的设备上使用同一应用程序时,我们开始出现故障,有时会挂在渲染中。我们还尝试了针对iOS12的重新编译,并且得到了同样的不良行为。在控制台上,我们收到以下不同消息:
2018-09-22 09:22:29.508576-0500 OurApp [1286:84481]由于执行期间发生错误,命令缓冲区的执行被中止。丢弃(GPU错误/恢复的受害者)(IOAF代码5)
2018-09-22 09:29:55.654426-0500 OurApp [1286:84625]由于执行期间发生错误,命令缓冲区的执行被中止。导致GPU挂起错误(IOAF代码3)
2018-09-22 09:34:37.718054-0500 OurApp [1286:87354]由于执行期间发生错误,命令缓冲区的执行被中止。被忽略(导致先前/过多的GPU错误)(IOAF代码4)
在出现前两个消息时,渲染似乎出现故障,出现空白屏幕,然后最终在屏幕上进行渲染。对于最后一条消息,实际上不会进行渲染,并且消息会继续显示,直到我们移至其他视图为止。
此应用使用SceneKit
,实例化SCNView
并使用默认的CIContext
。它还使用基于物理的照明模型,该模型强制使用Metal
渲染器。该应用程序具有简单的SCNNode
几何形状,即圆柱体。圆柱体的每个几何对象都有一个正常的纹理(总共3个)。相同的漫反射,金属度和粗糙度值将应用于圆柱体的所有几何对象。
有人遇到过这个问题吗?如果是这样,您是如何解决的?
谢谢
更新:问题似乎是在将图像用作场景的照明环境时引起的:
let scene = SCNScene()
scene.lightingEnvironment.contents = UIImage(named: "ourLightingEnvironmentImage")
当不使用照明环境时,问题就消失了。这开始看起来像是苹果的bug,我们将提交一个。我们之所以陷入困境,是因为我们需要光照环境才能为应用程序中的模型生成逼真的反射。
答案 0 :(得分:1)
我刚刚收到了我向Apple提交的错误的更新:
Apple开发人员关系
我们认为此问题已在最新的iOS 12.2 beta中得到解决。请测试最新的iOS Beta。如果仍有问题,请使用任何相关日志或信息来更新错误报告,以帮助我们进行调查。 iOS测试版https://developer.apple.com/download/“
答案 1 :(得分:0)
答案 2 :(得分:0)
我似乎遇到了完全相同的问题。同样使用ARKit和默认的sceneKit编辑器,当屏幕冻结时,我一直不断收到IOAF代码4错误。
我通过将环境从“ Procedural Sky”更改为“ None”来解决了我的问题。不再滞后或冻结,但这几乎不是解决方案,因为我的AR对象现在没有光照或环境。我相信iOS 12.2 Beta中有一个修复程序,但尚未更新。
希望我的解决方案可以帮助其他人。
答案 3 :(得分:0)
这是由高分辨率的环境闪电图像引起的错误。
解决方案是调整这些图像的大小,我们现在正在使用1000x500。完美运行。