Эдуард Максименко, руководитель команды разработки C3D Vision, к.т.н., C3D Labs, знакомит с новыми возможностями основного компонента визуализации — C3D Vision — и представляет усовершенствования для инструментов, которые давно находятся в распоряжении пользователей.
Прежде чем перейти к основным темам, давайте уточним, что такое C3D Vision. C3D Vision — это кроссплатформенная графическая библиотека (SDK), которая дает возможность визуализировать практически любое полигональное представление геометрии. Графическая библиотека Vision ориентирована на систему автоматизированного проектирования, и основная функциональность включает:
управление камерой;
управление отображением модели;
управление производительностью визуализации;
интерактивные инструменты (манипуляторы и т. п.);
управление геометрией в сцене.
Обратимся к теме математического представления. Важно отметить, что генератор, который ранее входил в состав библиотеки, теперь не является частью библиотеки и поставляется в исходном коде. С чем это связано? Изменение стало следствием большого количества запросов от пользователей, связанных с такими задачами, как фильтрация объектов и индивидуальное построение отображаемой графической сцены. В связи с этим мы открыли код, и теперь пользователь имеет возможность самостоятельно принимать решения, что и как ему делать, а это способствует более продуктивной, творческой и комфортной работе.
На схеме изображены основные математические представления, которые работают непосредственно с MbItem и обеспечивают интеграцию практически любых математических и визуальных представлений MbItem.
![](https://habrastorage.org/getpro/habr/upload_files/3e3/9c4/040/3e39c404039f5ecc27812ea6fab8c8fc.jpg)
В этом направлении мы произвели определенные доработки. В частности, обобщили алгоритмы поиска объектов, и алгоритм стал гораздо удобнее, так как пользователь может создать определенный шаблон, тем самым сократить время и повысить уровень разработки своих алгоритмов. Изображение иллюстрирует последовательную схему — переход от математического представления и генерацию представления для его отображения на сцене.
Обратим внимание на фрагмент кода, который дает возможность перейти от математического к визуальному представлению.
![](https://habrastorage.org/getpro/habr/upload_files/4db/b1c/0bc/4dbb1c0bcd6cca33cc15a47dae50f8e8.jpg)
Как мы можем наблюдать, код весьма лаконичен. Заметим, что доработка генератора представления продолжается по мере создания новых геометрий.
Следующая тема — геометрические представления. Были сделаны небольшие доработки PolygonGeometry. Это полигональная модель, которая предоставляет возможность отрисовать массив кривых в пределах одной геометрии и обеспечивает высокую производительность при отрисовке большого количества кривых. Основная функциональность — динамическое создание кривых, скрытие или отображение кривых по идентификаторам, инициализация стиля для кривых по идентификаторам. В число новых функций, которые мы добавили, вошли задание цвета и толщины отсечения отрисовки кривых, а также задание приоритета глубины отрисовки.
![](https://habrastorage.org/getpro/habr/upload_files/611/27a/3ef/61127a3ef714ad4da6b93b3e13c423f7.png)
Появилась новая геометрия — это отображение 3D-текстур. Она предоставляется классами Texture3D и RenderPostProcess. Инициализация этого объекта обеспечивается с помощью битовой карты, текстуры либо других форматов изображения. Основные возможности:
получение ширины, высоты, глубины загруженной текстуры;
проверка альфа-канала;
задание фильтров растеризации и режима повтора текстуры;
задание приоритета глубины отрисовки кривых.
![](https://habrastorage.org/getpro/habr/upload_files/5ac/a4a/d33/5aca4ad33ef8fba65506ed6fd75891a3.png)
Чем примечательна эта функциональность, эта геометрия? Тем, что пользователь может корректировать отрисовку текстур в режиме реального времени. Этого удалось достичь с помощью подпрограмм типа шейдер.
Следующая тема — это новые и усовершенствованные инструменты. Был переработан интерактивный манипулятор OrientationMarker. Если раньше он просто указывал на ориентацию сцены, то теперь он имеет зоны реакции, что обеспечивает способность управлять камерой в интерактивном режиме.
![](https://habrastorage.org/getpro/habr/upload_files/ec3/092/b55/ec3092b55f8d5191d1ec8e21f08da436.gif)
Также он имеет ряд функций для настроек, в том числе увеличение длины осей либо начала координат. Пока мы предусмотрели только два представления, отображенных на иллюстрации.
В продолжение темы инструментов стоит детальнее рассмотреть функцию «взрыв». Необходимость внедрения этой функциональности объясняется тем, что при работе с очень сложными моделями необходимо делать разнесение моделей, чтобы посмотреть, что происходит внутри. Безусловно, это можно сделать другим способом — например, с помощью действий, которые скрывают подсборку, но это очень трудоемкая операция. Функция «взрыв» в C3D Vision позволяет осуществить это буквально за один клик. Мы предлагаем пользователям два варианта: упрощенный и более сложный, с большим количеством параметров.
Изображение иллюстрирует упрощенный вариант, в котором используются три основных параметра.
![](https://habrastorage.org/getpro/habr/upload_files/178/982/f04/178982f042fac543e4e4335c32e43c0e.gif)
Первый — это непосредственно сам «взрыв», второй параметр — это чувствительность, то есть скорость разлета тел, третий — выборка уровней подсборок. Назначение этого уровня — исключить те подсборки, которые мы не хотим «взрывать», разносить. В данном случае «взрыв» происходит от центра модели.
Второй пример более сложный, он учитывает не только основные, но и добавочные параметры.
![](https://habrastorage.org/getpro/habr/upload_files/96e/106/707/96e10670707304d8822d0fe5c3d18a95.gif)
В набор параметров мы включили поддержку нескольких режимов разлета, а именно разлет относительно центра модели, разлет относительно выбранного объекта или сборки, разлет относительно набора выбранных объектов или сборок. В свою очередь, выборка уровней вложенности разлетающихся объектов имеет варианты, в том числе разлет сборок и объектов верхнего уровня, разлет сборок и объектов, содержащихся в сборках верхнего уровня, и т. д. Разлет объектов имеет три режима — по оси симметрии, радиально относительно оси симметрии, а также их комбинацию.
![](https://habrastorage.org/getpro/habr/upload_files/c27/4be/e71/c274bee71bb95edff09894883f271b6a.gif)
Не менее полезная функция — это скрытие минимальных/максимальных размеров тел, представленная на иллюстрации.
![](https://habrastorage.org/getpro/habr/upload_files/4e4/14e/267/4e414e26795b3cd916b9eea8c9598e07.gif)
Что касается планов до конца текущего года, то одна из ключевых задач — это повышение производительности рендеринга. Не менее важная цель связана с поиском объектов. Мы намерены заместить старый механизм поиска объектов на новый — тот, который будет иметь дополнительную функциональность. Его основное преимущество — управление ловушкой, которое обеспечит более уверенные выборку примитивов, фильтрацию объектов и приоритет поиска.
Еще один опорный пункт плана — это доработка документации. Мы рассчитываем уделять больше времени этому вопросу и последовательно повышать качество документирования нашего кода.
![](https://habrastorage.org/getpro/habr/upload_files/fe1/94a/37a/fe194a37afc637a680794a11dd342c1b.jpg)
Эдуард Максименко
Руководитель команды разработки C3D Vision, к.т.н., C3D Labs
PTM
Это всё круто, а вы скругления поправили?
https://isicad.ru/ru/articles.php?article_num=22626
reishi
del
c3dlabs Автор
добрый день! поправили
над скруглениями ведем постоянную работу
PTM
а в каком релизе компас ожидать?