SCNView第一次渲染场景很慢

Posted

技术标签:

【中文标题】SCNView第一次渲染场景很慢【英文标题】:The first time SCNView renders a scene is very slow 【发布时间】:2016-06-06 06:41:42 【问题描述】:

我想在运行时在 SceneKit 中动态加载 Collada 文件。我已使用 copySceneKitAssetst 生成 .DAE 文件并将其放在我的服务器上。应用可以从服务器下载并使用这个文件来初始化一个SCNScene(参考http://www.the-nerd.be/2014/11/07/dynamically-load-collada-files-in-scenekit-at-runtime/)。

执行“./copySceneKitAssets”没有错误,模型可以正常渲染。在将 gameScene 设置为 scnView.scene 之前,我已经调用了[scnView prepareObject:gameScene shouldAbortBlock:NULL]

问题是 scnView 第一次渲染 gameScene,速度很慢(几秒钟)。在此期间甚至主线程都被阻塞,这意味着 UI 无法刷新,h 有时应用程序被 ios 杀死。从第二次渲染场景开始,它非常快,主线程运行良好。但是如果我们删除应用程序并重新安装,问题又来了。

感谢任何帮助。

【问题讨论】:

哪一部分慢?从您的服务器下载(您应该在后台线程中执行此操作)?下载后处理?实例化场景?从您对所尝试的内容的描述来看,听起来您正在传输压缩的 SCN 文件而不是 DAE 文件(这很好!)。为什么需要让它们在线而不是将它们作为资源嵌入到您的应用中? 场景已经实例化。慢的部分是场景实例化后第一次出现。不管是SCN还是DAE都一样。我们这样做是因为资源要更新在不同的时间。 您找到解决方案了吗?我有相同的问题大小的轻质材料等没关系。第一次加载场景时,我从 .scn 加载节点并将其添加到场景视图中的场景中,似乎此代码立即发生。机器人模型没有显示,几秒钟后它显示。 addNode -> 在场景中显示节点 【参考方案1】:

我认为prepareObjects(_:withCompletionHandler)(在 SCNSceneRenderer 上定义)值得一看。它在后台线程上加载资源。

【讨论】:

如前所述,我调用了这个函数。仍然很慢。 是的,我在后台线程调用。这个问题只是在第一次渲染新的dae文件时出现。无论我们重新进入场景还是重新打开应用程序,它都会消失。但是如果我们删除App重新安装,问题又出现了。我猜有没有什么像在沙箱中创建一些文件,SceneKit在第一次渲染模型时需要做的?

以上是关于SCNView第一次渲染场景很慢的主要内容,如果未能解决你的问题,请参考以下文章

ARMeshAnchor – SceneKit SCNView 渲染器 EXC_BAD_ACCESS

SceneKit:在 SCNView 上渲染 SpriteKit 粒子系统时应用程序崩溃,当所有代码似乎都是系统代码的一部分时如何调试

asp.net core中的Razor很慢

尝试转换场景时无法将 UIView 的值转换为 SCNView [重复]

GSP 渲染很慢

SceneKit开发教程02 SCNScene和SCNView