2016-08-09 19 views
1

COLLADAファイルからノードを表示すると、CPU使用率は100%以上になります。私は、シミュレータを使用していない
Link to pic高いCPU使用率SceneKit

、私は私の実際の電話を使用しています。このモデルは、約の頂点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) 
    } 
} 

モデルが122メガバイトであり、ここで見つけることができます:
Link to zip

私は別のモデルを試してみましたが、CPUがそれぞれ1にナットを行きますそのうちの。それらはすべて約122MB(大音量)と約80kの頂点です。

更新
SceneKitでポリカウントを下げようとしました。ブレンダーでは、頂点を20kから5kに下げました(see here)。しかし、SceneKitでモデルをロードすると、ポリカウントはまだ同じです(68k)。私はまた、代わりにモデルとアニメーションを.SCNに変換しようとしました。これにより多くのファイルサイズが小さくなりましたが、と同じポリカウントとCPU使用率になりました。
Pictures of showStatistics

私がする必要があるのは、ポリカウントを小さくすることであり、それほどファイルサイズではないと思います。

更新2 私は実際にポリカウントを約48kに下げることができました。まだ遅れている。テクスチャを取り除くと、CPUがかなり低くなります。

答えて

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)! 

ルートと一緒にタグ付けされたすべての子ノードがchildNodeWithNameを経由して、名前でまだアクセス可能です。エディタウィンドウでDAEのシーングラフを検査し、ナビゲータパネルでそのシーングラフをクリックし、エディタ内のエディタウィンドウの左下の小さな四角形をクリックします。何らかの理由でDAEモデルにルートノードがない場合は、ここで作成して他のすべてのノードをそのノードに移動できます。参照:Transform and Rotate in Scenekit

DAEファイルを表示するエディタウィンドウの左側のパネルにノードを作成できます。パネルの左下の+記号をクリックします。その<untitled>オブジェクトを「シーングラフ」のすぐ下にドラッグします。その後、他のすべてのノードをグループ選択し、この新しいオブジェクトにドラッグします。新しいオブジェクトに一意の名前を付けます。新しいノードには、それ自身のジオメトリがないことを意味するグレーのアイコンが表示されています。

これを実行するより良い方法は、一意の名前を持つヌルを使用してColladaモデルを作成し、ジオメトリノードを意味のあるサブグループに編成するときに事前に計画することです。これらのサブグループの親ノードとしてNULLがインポートされます。すべてのノードをモデルのルートになる1つのマスターnullに配置します。

+0

「何らかの理由でDAEモデルにルートノードがない場合、ここに**ここ**を作成できます」という意味はありますか?私は大ファイルのすべての子供のための親ノードを持っていません。 – Fredrik

+0

私は上記の答えに追加しました。 DAEを自分で作成した場合は、最後の段落で示唆したようにモデリングソフトウェアで修正し、ファイルを再保存することを検討することもできます。私はこれが他の3Dソフトウェアでどのように機能するのか分かりませんが、これはCinema 4Dでどのように行うのですか? – bpedit

+0

しかし、私は基本的にすべての子を親(modelNode)に追加することでこれを行うのではありませんか? ** modelNode **には子のみが含まれます。 – Fredrik

関連する問題