OpenSceneGraph визуализирует множество узлов
Почему преформность падает, когда я загружаю, например, 4900 узлов в сцену? Если есть 125, то все в порядке, 200 все еще в порядке, но если их больше, частота кадров резко падает? Корневой узел содержит дочерние элементы, которые содержат (модель (в 3ds) + текстура + некоторые научные расчеты) и все они созданы в цикле от 0 до 4899. Я пытался использовать osgUtil::Optimizer для корневого элемента после всех дочерних элементов, находящихся на месте, но все еще без улучшений, Пытался поместить все узлы в один геод, но это тоже не помогло. Как мне достичь баланса между производительностью и количеством узлов?
1 ответ
4900 узлов, кажется, очень много узлов!
Вы должны начать читать о LOD
а также PagedLOD
, PageLOD
улучшит производительность. Идея такова (представьте, что первое изображение намного дальше):
Так как вы далеко, вам не нужно много деталей. Но когда вы увеличиваете масштаб, вы хотите увидеть эти детали. Вы должны будете указать, какие модели идут в каждом LOD
уровень и как вы хотите их активировать. Это сложная часть.
Кроме того, проверьте, если вы можете поделиться узлами. Например, вместо 4 разных колес вы просто создаете одно колесо. Затем добавьте 4 PositionAttitudeTransform / MatrixTransform и добавьте узел колеса к каждому из них. То же самое касается StateAttributes
Поделитесь ими, когда это возможно!
Наконец, если у вас много повторяющихся геомов, взгляните на создание геометрии.