当我从COLLADA
文件显示节点时,CPU使用率上升到100%+
Link to pic
我没有使用模拟器,我使用的是实际手机。该模型由 80k顶点组成。
以下是我加载模型的方法:
// Add Character
func addModel(name:String)
{
// Load COLLADA Model
if let myScene = SCNScene(named: "Assets.scnassets/"+name+"/"+name+".dae")
{
// Recurse through all the child nodes in the model and add to modelNode
for node in myScene.rootNode.childNodes as [SCNNode]
{
modelNode.addChildNode(node)
}
// Add modelNode to scene
self.rootNode.addChildNode(modelNode)
}
else
{
print("Error loading model: "+name)
}
}
该型号为122MB,可在此处找到:
Link to zip
我尝试过不同的型号,但CPU在每一款上都很疯狂。它们都是大约122MB(听起来很大)和大约80k顶点。
更新
试图降低SceneKit中的多边形数量。在搅拌机中,我将顶点从20k降低到5k(see here)。但是当我在SceneKit中加载模型时,多边形计数仍然是相同的(68k)。我也尝试将模型和动画转换为.SCN。这导致文件大小多,但相同多边形数量和CPU使用率。
Pictures of showStatistics
我认为我需要做的是降低多边形数量,而不是减少文件大小(不要认为这样会有害)。
更新2 现在我实际上设法将多边形数量降低到大约48k。仍然落后。如果我删除纹理,CPU会低得多。
答案 0 :(得分:2)
我不肯定这是您的使用问题,但您的加载文件的方法可以简化。
您不需要将DAE文件中的每个节点添加到modelNode
。理想情况下,您的Collada模型将拥有自己的具有唯一名称的根节点。只需将该节点添加到modelNode
,即可包含其所有子节点。在下面的示例中,lyso_ribbons
是DAE中根节点的名称以及DAE文件本身的名称。
guard let lysoRibbons = SCNScene(named: "lyso_ribbons")
else { print("Couldn't find molecule in dictionary (lysoRibbons)")
return }
let modelNode = lysoRibbons.rootNode.childNodeWithName("lyso_ribbons", recursively: false)!
标记为root的所有子节点仍可通过childNodeWithName
按名称访问。您可以在编辑器窗口中检查DAE的场景图,只需在导航器面板中单击它,然后在编辑器中单击编辑器窗口左下方的小方块。如果由于某种原因,您的DAE模型缺少根节点,您可以在此创建一个并将所有其他节点移入其中。另请参阅:Transform and Rotate in Scenekit
您可以在编辑器窗口的左侧面板中创建显示DAE文件的节点。单击面板左下角的+号。将<untitled>
对象拖到顶部,在&#34;场景图&#34;下面。然后对所有其他节点进行分组选择并将它们拖到这个新对象中。为新对象指定唯一名称。您会注意到新节点有一个灰色图标,表示它没有自己的几何图形。
更好的方法是在使用具有唯一名称的空值创建Collada模型时提前计划,以将几何节点组织成有意义的子组。然后将空值作为这些子组的父节点导入。将所有节点放入一个将成为模型根的主null。