Почему заготовка сбрасывается, когда я загружаю, например, 4900 узлов в сцену? Если там 125, все в порядке, 200 все равно нормально, но если их больше, то рендеринг кадров резко драматичен? Корневой узел содержит дочерние элементы, которые содержат (модель (в 3ds) + текстуру + некоторый научный расчет) и все созданные в цикле от 0 до 4899. Я попытался использовать osgUtil :: Optimizer для root после всех дочерних элементов, где на месте, но все еще нет улучшений , Пытался поместить все узлы в один геодезист, но это тоже не помогло. Как достичь баланса между производительностью и количеством узлов?OpenSceneGraph отображает множество узлов
ответ
4900 узлов кажется ужасным множеством узлов!
Вы должны начать чтение о LOD
и PagedLOD
. PageLOD
улучшит производительность. Идея заключается в том, как это (представьте себе, что первое изображение намного дальше):
Поскольку вы далеко далеко, вы не хотите много деталей. Но когда вы увеличиваете масштаб, вы хотите увидеть эти детали. Вам нужно будет указать, какие модели идут на каждом уровне LOD
и как вы хотите их активировать. Это сложная часть.
Кроме того, проверьте, можете ли вы обмениваться узлами. Например, вместо того, чтобы иметь 4 разных колеса, вы просто создаете одно колесо. Затем добавьте 4 PositionAttitudeTransform/MatrixTransform и добавьте колесный узел к каждому из них. То же самое касается StateAttributes
, поделитесь им, когда это возможно!
Наконец, если у вас много повторяющихся геометров, взгляните на геометрия instance.
Большое спасибо! Похоже, что производительность получила огромный импульс, но когда я добавляю все узлы в поведение камеры, это странно. Например, если я получаю радиус радиуса сферической сферы камеры до того, как я добавлю целую кучу узлов в сцене, она будет равна примерно 12.5f, но когда все узлы в сцене будут доходить до 18000.0f. И во-вторых, есть ли способ установить бит камеры дальше из окна просмотра (немного уменьшить масштаб). –
Для камеры, посмотрите [здесь] (http://stackoverflow.com/questions/21180092/openscenegraph-set-the-camera-at-an-initial-position); принятый ответ имеет очень полезные комментарии к камере. О вашей другой проблеме: какое неправильное поведение при изменении радиуса камеры? Я не совсем понимаю :) –
Я попробую объяснить это. У меня есть манипулятор трекбола, когда сцена пустая. Движение камеры в порядке. Я могу очень хорошо скопировать ее с помощью средней кнопки мыши, но когда я добавляю узлы в сцену и нажимаю среднюю кнопку, все это исчезает с камеры. Единственное, что я заметил, это произойдет, когда радиус камеры сойдет с ума. Я могу сделать предположение, что движение манипулятора трекбола связано с радиусом камеры, но не может добраться туда, где это действительно связано. Другие вещи, такие как правая кнопка и левая кнопка, работают нормально. –
Действительно, чтобы сделать наилучшие предложения, нам нужно было бы знать, какие узлы они представляют и что они представляют. Различные стратегии (instancing и т. Д.) Используются для разных ситуаций. – XenonofArcticus