2016-09-01 3 views
7

SceneKitゲームで地形を表現するために、約20k個のSCNNodesがオクトリーまたはクォードツリーに似た階層構造になっています。この木はバランスがとれていません - いくつかの枝は他よりもはるかに偉大な(* n) - 孫があります。Scenekit:SCNNode octree/quadtreesのパフォーマンスとルートレベルのすべて

物理、レンダリング、ノードの追加/削除などの個々のSCNNodesで、ルートレベルですべて平坦である場合と比較して、余分に時間が費やされますか?ランダムアクセスを繰り返したり実行したりするために、ツリーの高さ全体を横断するために余分な作業を数多く行う必要がありますか、それとも重大なオーバーヘッドではありませんか? (ノード自体を事前に構造化しておけば十分でしょうか?)

私は、グラフィックスエンジンが理論的にこれをどのように扱うかについては問いません。私はSceneKitが実際に何をしているのか尋ねています。

編集:ちょうどそれが人々にこれに答えるのを止めている場合...私は、SceneKitがどれくらいの時間を取るかについての正確な数値は必要ありません。私はちょうどそれが時間の重要な部分であるかどうかを知りたい。誰もが両方のアプローチを試して比較したり、どちらか一方に切り替えたりして有意差があるかどうかを知った経験がありましたか?

ありがとうございました。

私のシーンは、ノードの深刻な量をパックし始めているが、ここで私の感想だと、私もこのに探しています
+0

この質問のように見えますが、恩恵を受ける賞金稼ぎの人はいませんでしたが、未来からの素晴らしい天才が挑戦するのに十分な英雄であれば、私たちの多くはまだ答えが大好きです。 – DenverCoder9

+0

更新:triple7の答えの下のコメントを参照してください。 – DenverCoder9

答えて

1

あなたはnode.childNode(withName:再帰的に文字列、:真)を呼び出すと、この手段を実装ではバランスの取れたツリーまたはバランスのとれていないツリーを使用し、バイナリツリーab tree b + tree(あるノードが特定のしきい値を超える複数の子ノードを持つ場合)を選択すると、log | n |ツリー構造を削除するか検索するかによって複雑さが増します。 AVLツリーは通常、最も使用されているノードを階層の上に保ちますので、計算量は少なくなります。

クォードツリーまたはRツリー構造を見るだけで、おそらくlog | n |私たちは根の四分円の反復的な象限に入ることを話しているので複雑です。

子ノードの点でどのような構造を取って、どのような最適な戦略をとるべきかを知ることは良いことです。

あなたの地形に20 k ndoesが必要ですか?いくつかのモーフィングを行うために、地形上のベジェ点または頂点ごとにノードをつけていますか?

+0

だから私はいくつかのテストとプロファイリングを行い、構造を平坦化しました。典型的なノードに到達するために横断されたSCNNodeの数ではツリーの高さが変わりますが、実際のノード数はスピードの大きな要因です。唯一の仕事が子供を含んでいた目に見えない親ノード。とにかく、応答していただきありがとうございます、答えで最高の試みのためのupvoteを持っている:) – DenverCoder9

関連する問題