В новой версии движка визуализации C3D Vision 2021 сделан серьезный шаг в направлении повышения производительности отрисовки, не говоря уже о предоставлении пользователям и иных улучшений. В этой заметке мы расскажем об этих новинках модуля и о том, как их применять в своем приложении.
Никакая визуализация не сможет удивить искушенного пользователя какими-либо новшествами в плане отрисовки материалов, большим спектром возможностей при работе со сценой и т.д., если эта визуализация будет тормозить и доставлять неудобства при работе с крупными моделями.
Перед разработчиками команды C3D Vision встала задача реализации функционала, позволяющего изменить характеристики производительности сцены в лучшую сторону и при этом сохранить возможности редактирования объектов на ней.
Новые представления
Так, были разработаны совершенно новые геометрические представления, используя которые можно комфортно работать с большими сборками.
Первое такое представление PolygonRepresentation объединяет большое количество кривых в пределах одной геометрии.
Следующее геометрическое представление MathGroupRepresentation позволяет объединять большое количество любых тел в одну геометрию.
Суть работы данных представлений заключается в том, что при инициализации объекта любого из этих классов создается контейнер, который пользователь через функцию API наполняет элементами загружаемой модели. Все элементы находятся внутри одной геометрии и отправляются на отрисовку одной группой. Благодаря такому объединению элементы в группе отрисовываются за один единственный вызов OpenGL функции, что и позволяет существенно повысить производительность.
Ниже представлены два видео, демонстрирующие разницу в производительности обычной и объединенной моделей. Наблюдаемое повышение скорости работы составляет около 60%.
Функционал представлений
Несмотря на группирование элементов модели, каждый ее объект может быть легко модифицирован через удобные функции API. Для изменения доступны следующие характеристики:
- задание объекту нового материала, и, как следствие, изменение его визуальных качеств и т.д.
- изменение матрицы объекта, что позволяет манипулировать его положением на сцене
Также представления позволяют добавлять новые объекты и удалять старые. Доступ к элементам контейнера представления осуществляется через уникальный ключ – идентификатор объекта.
Ниже представлены фрагменты кода инициализации объектов существующего класса MathRepresentation и нового MathGroupRepresentation соответственно.
// 1 пример создания обычной геометрии для визуализации // создать мат. представление MbItem* pItem = createSqrtSinSurface(); // создать виз. представление MathRepresentation* pMathRep = new MathRepresentation(); // инициализировать визуальное представление математическим представлением pMathRep->SetMathItem(pItem, 0.2); // создать сегмент с заданным родителем SceneSegment* seg = new SceneSegment(pMathRep, sceneContent()->GetRootSegment()); // 2 пример создания групповой геометрии для визуализации // создать мат. представление MbItem* pItem = createSqrtSinSurface(); // создать виз. представление MathGroupRepresentation* pMathGroupRep = new MathGroupRepresentation(); MbMatrix3D mx; // местоположение MbItem // добавить математическое представление в визуальное представление pMathGroupRep->AddItem(pItem, mx); // создать сегмент с заданным родителем SceneSegment* seg = new SceneSegment(pMathGroupRep, sceneContent()->GetRootSegment());
Как видно из фрагмента, добавилась одна строка для задания матрицы перемещения элемента. Остальной код остался неизменным.
C3D Vision продолжает активно развиваться, получая новые методы и классы для повышения удобства и скорости работы движка. Все это становится возможным не только благодаря анализу существующих потребностей автоматизированных систем, но и благодаря активным пользователям, так же, как и мы, стремящимся к повышению качества модуля визуализации.