Рекламодатель: ООО «Борлас АФС»

ИНН 7726514619 ОГРН 1047796971386

Рекламодатель: ООО «ИБС Экспертиза»

ИНН: 7713606622 ОГРН 1067761849704

Рекламодатель: ООО «С3Д Лабс»

ИНН 7715938849 ОГРН 1127747049209

Рекламодатель: АО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

7 - 2026

Применение C3D Vision в программном комплексе FlowVision

Алексей Ющенко, 
руководитель отдела исследований и разработки, группа компаний ТЕСИС
Алексей Ющенко,
руководитель отдела исследований и разработки, группа компаний ТЕСИС

Программный комплекс FlowVision ориентирован на инженерные расчеты и охватывает широкий спектр мультифизических процессов, относящихся к физико-математическому моделированию. Это зрелый и востребованный на рынке продукт, уже более двух десятилетий успешно решающий разнообразные задачи в разных отраслях. Однако специфика этих задач предъявляет к визуализации особые требования — зачастую нестандартные и выходящие за рамки традиционного функционала библиотеки C3D Vision. Как известно, C3D Vision изначально создавался для отображения математических моделей в системах автоматизированного проектирования, тогда как FlowVision ориентирован на задачи проектирования и анализа (CAE), что формирует для библиотеки особые требования (рис. 1).

Рис. 1. Области применения библиотеки FlowVision

Рис. 1. Области применения библиотеки FlowVision

До интеграции C3D Vision во FlowVision уже существовал собственный, достаточно зрелый движок визуализации. Он позволял реализовывать различные режимы представления геометрических моделей: сечения плоскостями, прозрачность, отображение границ групп, фасетную визуализацию (рис. 2). Поддержка всех этих возможностей потребовалась и от C3D Vision.

Рис. 2. Различные виды представления во FlowVision

Рис. 2. Различные виды представления во FlowVision

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

Рис. 3. Применение класса PolygonGeometry

Рис. 3. Применение класса PolygonGeometry

Класс PolygonGeometry также поддерживает передачу нормалей к ребрам, что позволяет использовать функцию FaceCulling для сокрытия ребер, которые не должны быть видимы в текущем ракурсе. Это особенно полезно при визуализации внутренних структур: например, при просмотре внутренней части куба передние стенки и их ребра могут быть скрыты (рис. 4).

Рис. 4. Скрытие передних сторон

Рис. 4. Скрытие передних сторон

Еще одна важная задача — корректная визуализация совпадающих в пространстве поверхностей. Примером служит сечение расчетной сетки, накладываемое на геометрию, с которой оно совпадает по координатам. В таких случаях возникает артефакт Z-fighting, вызванный тем, что значения глубины в Z-буфере совпадают. Для его устранения в C3D Vision реализован метод SetFaceOffset, позволяющий разнести поверхности в глубине и обеспечить корректное отображение нужного слоя (рис. 5).

Рис. 5. Отрисовка расчетной сетки поверх модели

Рис. 5. Отрисовка расчетной сетки поверх модели

В инженерных расчетах нередко возникает необходимость заглянуть внутрь объектов, поскольку именно в объеме происходят ключевые процессы (рис. 6). Для этого в C3D Vision применяется прием скрытия передних стенок — технология Face Culling, которая применяется к скин-сегментам. Такой прием редко встречается в CAD-приложениях, но в расчетных задачах он используется повсеместно.

Рис. 6. Просмотр внутренней области модели

Рис. 6. Просмотр внутренней области модели

При моделировании в FlowVision цветовая раскраска поверхностей отображает наложенные граничные условия. Поскольку условие может различаться с двух сторон одной и той же поверхности, необходимо уметь назначать цвета отдельно для каждой стороны. В текущей версии C3D Vision такая возможность реализуется через дублирование поверхности и применение метода FaceCulling, но в будущих релизах поддержка двухсторонней раскраски планируется «из коробки» (рис. 7).

Рис. 7. Двухсторонняя раскраска модели

Рис. 7. Двухсторонняя раскраска модели

Для визуализации полной постановки расчета часто приходится строить массивы, в том числе зеркальные. Это реализуется с помощью метода SceneSegment::Clone, обеспечивающего так называемое инстанцирование. Такой подход позволяет не загружать память лишними копиями геометрии, но при этом визуализировать полную картину. Например, при расчетах лопаточных машин моделируется только один сегмент, который затем дублируется вокруг оси вращения (рис. 8).

Рис.8. Инстанцирование геометрии

Рис.8. Инстанцирование геометрии

Кроме того, в ряде задач требуется отображение распределений скалярных полей, таких как температура, с помощью наложения текстур на поверхности (рис. 9). В C3D Vision предусмотрена возможность цветового текстурирования с поддержкой прозрачности. Это позволяет, например, приглушить визуализацию холодных областей и выделить горячие. Однако при этом необходимо вручную задать для материала коэффициент прозрачности, отличный от единицы, чтобы движок корректно обработал поверхность.

Рис. 9. Визуализация расчета струи

Рис. 9. Визуализация расчета струиРис. 10. Режимы рендеринга: Legacy — прозрачность зависит от порядка отрисовки, получаются артефакты (а); DepthPeeling — многопроходный рендеринг, создает реалистичное изображение (б); WeightedBlend — порядконезависимое смешивание, избавляет от артефактов (в)

Визуализация полупрозрачных объектов в C3D Vision за последние годы значительно продвинулась вперед. Если ранее применялся лишь простой альфа-блендинг с зависимостью от порядка отрисовки, что часто приводило к артефактам на границах прозрачных поверхностей, то теперь доступны более совершенные и физически корректные методы. Один из них — DepthPeeling, обеспечивающий поэтапную визуализацию полупрозрачных слоев. Он позволяет избежать проблем с некорректным смешением цветов, но требует дополнительных ресурсов на рендеринг. В качестве компромиссного решения используется режим WeightedBlend. Он дает близкий к физически точному результат при меньших вычислительных затратах, хотя в отдельных случаях возможны незначительные визуальные искажения, особенно в зонах с переменной прозрачностью (рис. 10).

Рис. 10. Режимы рендеринга: Legacy — прозрачность зависит от порядка отрисовки, получаются артефакты (а); DepthPeeling — многопроходный рендеринг, создает реалистичное изображение (б); WeightedBlend — порядконезависимое смешивание, избавляет от артефактов (в)

Текстурирование также используется для визуализации векторных полей (рис. 11). В частности, линии тока могут быть представлены как цилиндры, раскрашенные с помощью текстур. Это дает наглядное представление о направлении и характере потока. Если требуется более легкая визуализация, вместо цилиндров применяются ребра, при этом текстура привязывается к точкам в объекте PolygonGeometry, а цветовая информация задается через объект Pen. В итоге удается добиться выразительного и информативного результата без перегрузки сцены геометрией.

Рис. 11. Визуализация векторных полей

Рис. 11. Визуализация векторных полей

Для отображения распределения скалярных полей в объеме реализована трассировка лучей по трехмерной текстуре (рис. 12). Это особенно полезно, когда двумерного сечения недостаточно для анализа пространственного распределения.

Рис. 12. Трассировка лучей

Рис. 12. Трассировка лучей

Библиотека C3D Vision позволяет подключить собственные пиксельные шейдеры через механизм RenderPostProcess. С их помощью в каждом пикселе экрана рассчитывается луч, проходящий через сцену, и накапливается цвет в зависимости от данных в объеме. Такой подход дает возможность визуализировать, например, зоны нагрева внутри сложных трехмерных объектов — уже не на плоскости, а во всем пространстве сцены (рис. 13).

Рис. 13. Объемная визуализация

Рис. 13. Объемная визуализация

Часто возникает необходимость отображать поверх сцены дополнительные экранные элементы, такие как легенда, текстовые подписи или шкалы. Для этого в C3D Vision используется механизм ViewWidget, в который можно заранее отрисовать нужное изображение и привязать его к экрану (рис. 14). Преимущество ViewWidget заключается в том, что он позволяет осуществлять интерактивное управление — пользователь может переместить его мышью в нужное место. При этом следует учитывать, что ViewWidget не блокирует обработку событий курсора — если, например, поворот камеры осуществляется теми же кнопками, то эти действия могут сработать одновременно. В таких случаях требуется вручную отключать лишние обработчики на время взаимодействия с виджетом.

Рис. 14. Экранные слои

Рис. 14. Экранные слои

Альтернативным способом наложения экранных слоев служит RenderScreen — он позволяет просто и быстро отрисовать нужные элементы без возможности управления. Это удобно для статичных или автоматических элементов интерфейса. Так, например, на экране может отображаться линейка масштаба, которая автоматически обновляется при изменении положения камеры.

Интересный пример нестандартного применения возможностей C3D Vision — построение real-time анимации. На каждом кадре перестраивается геометрия объекта и вычисляется движение частиц вдоль линий тока (рис. 15). Такая сцена отображается с частотой около 60 кадров в секунду, что обеспечивает плавную визуализацию. Хотя изначально движок не был рассчитан на подобные сценарии, он справляется с ними довольно уверенно. В дальнейшем планируется оптимизация подобных режимов, что сделает их еще более производительными.

Рис. 15. Анимация частиц

Рис. 15. Анимация частиц



На сайте используется Яндекс метрика

Мы в: и

Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель: АО «Топ Системы»

ИНН 7726601967 ОГРН: 1087746953557

Рекламодатель: ООО «Лоция Софтвэа»

ИНН 7722222090 ОГРН: 1037700046427

Рекламодатель: ООО «АППИУС-СОФТ»

ИНН 7743675366 ОГРН: 1087746091454