2015-04-03 67 views
1

爲什麼當我加載一個4900個節點到場景時,性能會下降?如果有一個125可以,200仍然可以,但是如果有更多的渲染幀速率會降低dramaticaly?根節點包含孩子,其中包含(模型(在3ds)+紋理+一些科學計算),並且都創建在從0到4899的環境中。我嘗試在所有孩子的地方使用osgUtil :: Optimizer,但仍然沒有改進。試圖把所有的節點放在一個geode中,但它也沒有幫助。我如何在性能和節點數量之間取得平衡?OpenSceneGraph渲染了很多節點

+0

真的,爲了提出最好的建議,我們必須知道它們是什麼類型的節點以及它們代表什麼。不同的策略(實例化等)被用於不同的情況。 – XenonofArcticus 2015-04-06 16:49:12

回答

1

4900個節點似乎是一個非常多的節點!

您應該開始閱讀關於LODPagedLODPageLOD將提高性能。我們的想法是這樣的(想象一下第一個圖像是很多更遠):

Low detail

High detail

既然你很遠很遠,你不想要很多的細節。但是當你放大時,你想看到這些細節。您必須指定每個LOD級別的模型以及您想要如何激活它們。這是棘手的部分。

此外,請檢查您是否可以共享節點。例如,而不是有4個不同的車輪,你只需創建一個車輪。然後,添加4 PositionAttitudeTransform/MatrixTransform並將輪子節點添加到它們中的每一個。 StateAttributes也是如此,儘可能分享!

最後,如果您有很多重複幾何,請參閱幾何實例

+0

非常感謝!看起來性能得到了巨大的提升,但是當我將所有節點添加到場景攝像機的行爲變得很奇怪。例如,在我在場景中添加大量節點之前,如果我獲得攝像機邊界球半徑的半徑,它等於12.5f左右,但是當場景中的所有節點都會達到18000.0f。其次,有什麼方法可以將視角設置得更遠一點(縮小一點)。 – 2015-04-05 15:40:25

+0

對於相機,看看[這裏](http://stackoverflow.com/questions/21180092/openscenegraph-set-the-camera-at-an-initial-position);被接受的答案在相機上有非常有用的評論。 關於您的其他問題:相機半徑變化時的不良行爲是什麼?我不太明白:) – 2015-04-06 08:05:29

+0

我會盡力解釋它。我有一個軌跡球操縱器,當場景是空的時候,攝像機的移動是可以的,我可以用鼠標的中間按鈕來移動它,但是當我添加節點到場景時,點擊中間的按鈕會使所有的東西都從攝像機中消失。只有當我注意到相機半徑發生瘋狂的18k值時纔會發生這種情況。我可以提出一個建議,即軌跡球機械手的運動與相機的半徑有一定的關係,但無法得到實際所在的位置。其他東西,如右按鈕和左按鈕正常工作。 – 2015-04-07 08:18:48