[英]Adding multiple nodes to SceneKit SCNScene without blocking main thread
我正在構建一個ARKit
+ SceneKit
應用程序,它需要在現實世界中顯示模型。 每次用戶選擇一個按鈕時,模型都會發生變化。
我嘗試將新模型 apon button press 加載到節點中,然后將其添加到場景的根節點,但這會導致相機凍結幾秒鍾,直到將其添加到場景中。
然后我讀到最好在開始時加載所有節點( viewDidLoad
或其他東西),調用場景的prepare
方法,然后將節點添加到場景中,但這會導致應用程序凍結幾次幾秒鍾直到過程完成。 這就是我目前正在做的事情,但效果不佳! 有任何想法嗎?
請記住,模型文件非常重(每個約 15MB)
func addNodesToScene() {
for menuItem in self.menuItems {
let tempScene = SCNScene(named: menuItem.modelPath)!
let node = tempScene.rootNode
node.scale = SCNVector3Make(0.1, 0.1, 0.1)
node.isHidden = true
self.foodNodes[menuItem] = node
print("\(menuItem.title) node loaded")
}
print("done loading nodes - adding to scene")
self.sceneView.prepare(Array(self.foodNodes.values), completionHandler: { (success) in
for nNode in self.foodNodes.values {
self.sceneView.scene.rootNode.addChildNode(nNode)
}
})
}
prepare 方法准備將模型(和紋理)快速加載到 GPU 上。 您的函數基本上將兩個函數合二為一,從 .SCN 文件加載節點並為 GPU 准備它們。 prepare 方法可以防止在高幀率游戲中卡頓,例如,它不會解決加載 15 mb 模型的問題。
如果您要加載 15MB 的模型,您肯定會在某處出現延遲。 15MB 的模型應該提供如此多的細節,以至於延遲(啟動應用程序時)是可以接受的。 如果您需要多個,那么這里真正的問題可能是模型的大小。 你能發個例子嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.