Обычно конструктору достаточно одного взгляда на чертеж с тремя или, по крайней мере, двумя ортогональными проекциями, чтобы в общем и целом представить, как выглядит изображенный на нем объект в трехмерном пространстве. А что, если в наличии только один проекционный вид? Или фотография? Оказывается, инструментарий САПР позволяет выйти «в объем» даже в такой нетривиальной ситуации.
Параметрическая трехмерная модель, основа многих современных САПР, имеет множество преимуществ: сравнительно простые инструменты создания, удобная настройка геометрических элементов и довольно компактные по размеру файлы. Вместе с тем, посредством типичной параметрической геометрии весьма сложно реализовать многие реальные объекты окружающего мира, особенно, если речь идет о разнообразных представителях флоры и фауны, произведениях искусства… или это могут быть более прозаические техногенные предметы, но созданные в докомпьютерную эпоху и к тому же, возможно, имеющие повреждения (это касается музейных экспонатов). Если все-таки необходимо создать 3D-модель таких объектов, то на помощь приходят специальные инструменты для сканирования прототипа, его оцифровки в виде облака точек и последующей генерации виртуального образца.
В системе АСКОН Компас-3D [1] также имеется соответствующее средство — Поверхность по сети точек (рис. 1).
Рис. 1. Инструмент Поверхность по сети точек АСКОН Компас-3D
Инструмент, по сути, довольно прост. После запуска в него необходимо подгрузить файл, содержащий массив координат точек объекта. Затем на основе полученных данных система отрисовывает поверхность, узлы которой являются теми самыми загруженными точками. Главная сложность заключается в построении файла данных с координатами. Его структура приведена на рис. 2.
Рис. 2. Структура файла для построения поверхности по сети точек
Здесь регулярная сетка точек будущей поверхности образуется матрицей m × n. У каждого элемента матрицы заданы трехмерные координаты. В общем случае точки в узлах матрицы физически не обязательно располагаются на одном расстоянии друг от друга — их координаты X, Y и Z определяются формой прототипа (см. рис. 1). Существенным является только постоянство количества точек-вершин в рядах.
Откуда брать данные о точках поверхности объекта, чтобы поместить их в описанный выше файл? Тем более если под рукой нет 3D-сканера. Оказывается, достаточно интересные опыты с «облаком» вершин можно проделать, пользуясь обыкновенными фотоизображениями.
Смысл наших опытов будет заключаться в том, что на основе фотографии [2] мы попробуем создать рельефную 3D-модель — своеобразную «чеканку» (рис. 3).
Рис. 3. Рельефная поверхность на основе растрового изображения
При этом критерием «высоты» точек поверхности рельефа будет яркость соответствующих пикселей фотографии. Вопрос определения яркости решим предварительным переводом изображения в оттенки серого. Теперь «высота» каждой точки будет зависеть от степени близости ее цвета к абсолютно белому (или абсолютно черному).
Техническую часть проекта, а именно программный модуль, «переводящий» изображение в файл трехмерных координат точек, реализуем, например, в проекте С# [3] (рис. 4). Проект состоит из формы пользовательского интерфейса и, собственно, модуля программного кода. Интерфейс приложения позволяет загрузить исходную иллюстрацию (в оттенках серого), указать настроечные параметры и сгенерировать файл трехмерной сети.
Рис. 4. Реализация модуля генерации файла данных для построения трехмерной поверхности на основе растрового изображения
Принципиальный алгоритм работы модуля приведен на рис. 5. Коэффициент высоты рельефа служит для управления степенью влияния перепада яркости точек изображения на координату Z узлов трехмерной сети (рис. 6). Еще один настроечный параметр, шаг точек, предназначен для получения более или менее детального рельефа на основе данных используемого рисунка (рис. 7). Под цветом (переменная color) понимается любой из RGB-компонентов (интенсивность красного, зеленого или синего идентичны, поскольку используется формат в оттенках серого).
Рис. 5. Алгоритм модуля генерации файла данных для построения трехмерной поверхности на основе растрового изображения
Рис. 6. Влияние коэффициента высоты рельефа на результат построения трехмерной поверхности по растровому изображению
Рис. 7. Влияние используемого шага точек растрового изображения на результат построения трехмерной поверхности
В полученных результатах обращает на себя внимание некоторая «гофрированность» контуров на тех ребрах (и гранях), где фактически должны присутствовать гладкие кривые. Связано это с тем, что в описанном модуле векторизация и аппроксимация не реализуются. На прямом ребре вместо достаточных двух вершин их может оказаться пять, каждая из которых дает небольшой «шум» по координатам, что приводит к «волнам» на трехмерной модели (рис. 8). Тем не менее данная проблема вполне разрешима как на уровне простого черно-белого изображения (вспомним системы оптического распознавания символов), так и фотографии в оттенках серого.
Рис. 8. «Шум» формы прямой линии при избытке определяющих точек-вершин
Вернувшись к постановке нашей задачи, можно сказать, что получить «облако» точек в виде трехмерной сетки оказалось довольно просто. А что касается области применения, то здесь помимо чисто художественной возможности придать фотографии объем, вырисовываются задачи анализа и визуализации аэро- и космических фотоснимков и картографии вообще. Перевод же плоского изображения в объем может оказаться весьма полезным для подготовки контента, ориентированного на людей с ограниченными возможностями по зрению.
Источники:
- Справочная система АСКОН Компас-3D // https://help.ascon.ru/KOMPAS/22/ru-RU/index.html.
- Tanks Painting Art T-34 Russian Colored background Army // https://www.1zoom.me/en/wallpaper/533722/z2210.9/3840x2160.
- Проект модуля генерации файла данных для построения трехмерной поверхности на основе растрового изображения // https://disk.yandex.ru/d/M42x9dEXVtAtAA