26.08.2021 • C3D Vision

Что нового в C3D Vision: повышена производительность отрисовки

В новой версии движка визуализации C3D Vision 2021 сделан серьезный шаг в направлении повышения производительности отрисовки, не говоря уже о предоставлении пользователям и иных улучшений. В этой заметке мы расскажем об этих новинках модуля и о том, как их применять в своем приложении.

Никакая визуализация не сможет удивить искушенного пользователя какими-либо новшествами в плане отрисовки материалов, большим спектром возможностей при работе со сценой и т.д., если эта визуализация будет тормозить и доставлять неудобства при работе с крупными моделями.

Перед разработчиками команды C3D Vision встала задача реализации функционала, позволяющего изменить характеристики производительности сцены в лучшую сторону и при этом сохранить возможности редактирования объектов на ней.

Новые представления

Так, были разработаны совершенно новые геометрические представления, используя которые можно комфортно работать с большими сборками.


Модель с большим количеством тел

Первое такое представление PolygonRepresentation объединяет большое количество кривых в пределах одной геометрии.


Множество объектов 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 продолжает активно развиваться, получая новые методы и классы для повышения удобства и скорости работы движка. Все это становится возможным не только благодаря анализу существующих потребностей автоматизированных систем, но и благодаря активным пользователям, так же, как и мы, стремящимся к повышению качества модуля визуализации.


Поделиться материалом