更新:對於任何絆倒這一點的人來說,SceneKit似乎具有它可呈現的最大對象數閾值。使用[SCNNode flattenedClone]
是幫助增加可以處理的對象數量的好方法。正如@Hal所建議的那樣,我將向Apple提交一份錯誤報告,描述下面討論的性能問題。SceneKit崩潰而沒有詳細的崩潰信息
我對iOS有點新,我目前正在爲我的第一個OS X項目開發一個類。我本質上是創建隨機幾何圖形(如果它們之間的距離≤給定半徑,則彼此連接的空間中的隨機點),並使用SceneKit顯示結果。我已經知道我正在將SceneKit推向極限,但如果我試圖繪製的對象數量過大,整個事件就會崩潰,我不知道如何解釋結果。
我SceneKit場景由默認攝像機,2個照明節點,大約5000 SCNSphere
s各自的SCNNode
(該圖上的節點)內,然後約50,0000連接它們SCNPrimitiveSCNGeometryPrimitiveTypeLine
類型的其也是內SCNNode
秒。所有這些節點然後被添加到添加到我的場景中的一個大節點。
該代碼適用於較小數量的球體和連接。
當我跑我的這些規範的應用程序,一切似乎都在執行以下行後工作正常,然後5-10秒:
dispatch_async(dispatch_get_main_queue(), ^{ [self.graphSceneView.scene.rootNode addChildNode:graphNodes]; });
鑑於我對Xcode有所瞭解,並在崩潰時習慣了更詳細的輸出,所以我有點頭痛。我能做些什麼來獲得關於這次事故的更多信息?
感謝您的詳細回覆!好,那麼(1)_首先,你有沒有在屏幕上看到任何東西?_是的!該應用程序完美適用於較少數量的節點和邊緣。如果我做了5,000個10度(50,000個SCN節點),它可以正常工作。 (2)關於主隊列,將該調用移動到塊外的'addChildNode'似乎不會影響任何內容;我只是這樣做,因爲我總是被教導將影響用戶界面的東西放在主隊列中。我會根據您的建議將其刪除。 (3)_如果刪除這些連接線會發生什麼?_我可以處理更多的SCNNodes ... – Spencer
[續]我沒有使用另一個SCNGeometry子類的原因是它似乎具有相同的效果,但它可以處理的門檻要低得多。我用了圓柱體,但是SceneKit無法處理那麼多的物體。確保圓柱體的位置和旋轉也很困難,但我保存了這些代碼,這樣我可以切換回來,如果這看起來更好。最後,我會確保查看該鏈接,聽起來像是一個很棒的資源。再次感謝您的幫助,請讓我知道我的回答是否有幫助! – Spencer
這一切聽起來像是你正在達到極限,然後,並且你的實現代碼是正確的。我建議SCNBox/SCNCylinder只是爲了排除菜鳥的錯誤 - 所以要抓住這個想法。我認爲你最好的選擇是將圖形添加到場景中之前,將其展開爲「flattenedClone」。請務必在bugreport.apple.com上提交您的項目的性能報告。 –