簡體   English   中英

在不阻塞主線程的情況下向 SceneKit SCNScene 添加多個節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM