OpenSceneGraph визуализирует множество узлов

Почему преформность падает, когда я загружаю, например, 4900 узлов в сцену? Если есть 125, то все в порядке, 200 все еще в порядке, но если их больше, частота кадров резко падает? Корневой узел содержит дочерние элементы, которые содержат (модель (в 3ds) + текстура + некоторые научные расчеты) и все они созданы в цикле от 0 до 4899. Я пытался использовать osgUtil::Optimizer для корневого элемента после всех дочерних элементов, находящихся на месте, но все еще без улучшений, Пытался поместить все узлы в один геод, но это тоже не помогло. Как мне достичь баланса между производительностью и количеством узлов?

1 ответ

Решение

4900 узлов, кажется, очень много узлов!

Вы должны начать читать о LOD а также PagedLOD, PageLOD улучшит производительность. Идея такова (представьте, что первое изображение намного дальше):

Низкая детализация

Высокая детализация

Так как вы далеко, вам не нужно много деталей. Но когда вы увеличиваете масштаб, вы хотите увидеть эти детали. Вы должны будете указать, какие модели идут в каждом LOD уровень и как вы хотите их активировать. Это сложная часть.

Кроме того, проверьте, если вы можете поделиться узлами. Например, вместо 4 разных колес вы просто создаете одно колесо. Затем добавьте 4 PositionAttitudeTransform / MatrixTransform и добавьте узел колеса к каждому из них. То же самое касается StateAttributesПоделитесь ими, когда это возможно!

Наконец, если у вас много повторяющихся геомов, взгляните на создание геометрии.

Другие вопросы по тегам