воскресенье, 17 августа 2008 г.

Обмен полигональными моделями с системой CATIA


Я уже рассказывал как перегонять модели в виде NURBS-поверхностей из CATIA в 3D MAX для последующего рендеринга. Один из недостатков этого способа — применение дополнительного плагина (nPower PowerTranslator). Самое же главное его преимущество — получение поверхностей в том виде как они были смоделированы. Но в большинстве случаев, к примеру для фотовизуализации, достаточно полигональной модели. Также иногда нет возможности применения нескольких программ — хотелось бы напрямую перегонять модели из CATIA непосредственно в программу рендеринга. Поделюсь своим скромным опытом в этом на первый взгляд простом деле. Тестирование проводилось в CATIA V5R18 SP2 и 3D MAX 2009 SP1, однако описанные методы подходят и для более старых версий.

Задача 1. Модель CATIA требуется в полигональном виде передать в 3D MAX

Для начала создадим простую деталь в модуле Part Design (проектирование деталей).


Теперь посмотрим какие варианты экспорта полигональных моделей имеются в CATIA. В общем-то их три: CGR, 3D XML и STL. Про первые два прийдется забыть, т.к. кроме CATIA и нескольких 3D-вьюеров их никакой софт не поддерживает. Значит, воспользуемся тем что осталось — STL. Выбираем папку, в которую мы сохраним нашу модель и имя файла.


Далее через меню импорта 3D MAX выбираем соответствующий тип файла и нашу модель. В появившемся диалоговом окне можно все параметры оставить как есть. Жмем "ОК" и через секунду видим нашу детальку в окнах проекций.


Теперь можно присваивать материалы и рендерить.


На этом можно было и закончить описание всей процедуры, но мы немного усложним задачу — поробуем экспортировать не одну деталь, а сборку. И вот тут мы сразу попадаем в тупик — при сохранении сборки напрочь отсутствует тип файла STL. Получается, что прийдется заходить в каждую деталь и по одной ее пересохранять в нужный формат. Если в сборке несколько деталей, такой вариант не кажется обременительным, а вот если их десятки или сотни?


Применим небольшую хитрость — в CATIA есть отличный инструмент, которым почему-то редко пользуются, хотя он удобен не только для наших целей. Речь идет об Associativity, который позволяет создавать деталь на основе сборки, преобразуя детали в отдельные тела (при этом деталь остается параметрической — при изменении деталей в сборке будет меняться и ассоциативная деталь). Следующим шагом надо открыть эту деталь в новом окне — Open in new window и просто сохранить полученный результат в STL.


Импортируем полученный файл в 3D MAX. Все отлично, кроме того, что все детали слиты в один объект, что не слишком удобно если мы планировали применять разные материалы к разным деталям или проводить иные манипуляции. Воспользуемся инструментом Explode со значением 180 — это разобъет наш объект на детали, аналогично тому, как они были спроектированы в CATIA.


Теперь немного о настройках, которые позволят улучшить качество передаваемой модели. При сохранении в STL из CATIA используется механизм триангуляции тот же самый, что и при отображении на экране в рабочем окне. А значит, степень апроксимации меняется в меню Tools/Options/Display/Performance/3D Accuracy — чем меньше значение, тем более качественной будет модель на выходе (и, соответственно, "тяжелее"). Можно даже посмотреть как будет разбита модель на треугольники не выходя из CATIA.


Задача 2. Модель CATIA требуется в полигональном виде передать в программу рендеринга.

Сразу хочу сказать, что не все системы фотовизуализации поддерживают формат STL, тем не менее, одна из лучших, Maxwell Render, делает это.

Сохраним из CATIA модель как это было описано в Задаче 1 и импортируем ее в Maxwell Studio. Импортированная модель повернута и увеличена в масштабе (очевидно, используются другие единицы измерения) Опытным путем выяснилось, что правильное значение масштаба для импортированных объектов 0,001. Выбираем наш объект, меняем масштаб по всем осям и поворачиваем. Видим, что здесь сохраняется та же проблема, что и при импорте в 3D Max: все детали слились в один объект. Т.е. и материал мы можем присвоить всем деталям только один. Исправить ситуацию мы можем создав т.н. группы треугольников. Делается это так: переходим в режим управления треугольниками, выбираем любой из полигонов нужной детали и жмем на клавиатуре "/" — это выделит все полигоны, из которых состоит деталь, затем правой кнопкой мыши по выбранному и Group Triangles. Здесь можно ввести имя группы, чтобы не запутаться. Так же поступаем с остальными "деталями", которым в дальнейшем мы хотим присвоить разные материалы — все они должны быть преобразованы в группы треугольников.


Теперь подберем необходимые материалы и переложим их в список материалов сцены. Оттуда можем простым перетягиванием присвоить материалы группам (здесь-то и пригодятся нормальные названия, иначе сложно определись какой материал чему присваивается).

Вот, собственно, и все. Теперь достаточно выбрать HDRI-окружение (если необходимо), создать камеру и нажать кнупку Render. Эти части подробнейшим образом описаны в мануале к Maxwell Render

Задача 3. Перенести полигональную модель из 3D Max в CATIA.

В этом случае все так же решеается через STL-файлы. Готовим в 3D Max модель и экспортируем ее (File/Export/STL). Далее запускаем CATIA и идем в меню File/Open/STL, чтобы... убедиться, что таким способом STL-файл не откроешь.

Значит надо идти другим путем. В CATIA есть специальный модуль для работы с полигональными моделями (Shape Sculptor). Видимо, если и есть средства импорта, то только там...

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

Примечание. Задача 2 решается еще одним способом, при котором не требуется возиться с группами треугольников, зато прийдется схожую по времени процедуру (может чуть быстрее) проделать в CATIA. Видимо этот способ будет удобнее тем, кто в большей степени работает с CATIA и в меньшей — с программами рендеринга. Так же не рассмотрен вариант сохранения поверхностей в формат STL — в приведенных примерах работа проводится только с солидами. Если все это интересно, я раскажу обо всем этом в следуещем посте.

8 комментариев:

cbuhh комментирует...

Лет пять перегонял модели и сборки из CATIA в Lightwave 3D. Напрямую, конечно ничего не посоветую, Но через Deep Exploration очень неплохо идёт WRML. Не знаю как в Макс, а в LW файл приходит даже с триммирующими кривыми. Иногда это позволяло используя PATCH-modelling в LW перестроить проблемные места конвертации. Единственное неудобство в том, что файл разбивается на элементарные поверхности и они раскладываются каждая в свой слой. Но из этой ситуации есть определённые выходы.

car2ner комментирует...

Действительно, как то я необъективно обошел стороной формат WML (VRML). Это связано с тем, что вплоть до 16 версии CATIA экспорт из CATIA в него был реализован мягко говоря "не очень" - по сути результат был всегда предсказуемо-сильноапроксимированным независимо от настроек. Кроме того, при экспорте из Кати файл разбивался на несшитые треугольники. Все это конечно поправимо, но получается, постобработки больше чем в случае с STL. Сейчас проверил - изменилась ли ситуация. На первый взгляд список настроек тот же самый, что и в предыдущих версиях. А вот вывод в файл вроде бы получше стал. Тем не менее, проблемы с разбивкой и нормалями остались.

Dimi комментирует...

по второму пункту хочется добавить:

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

решил проблему так: из catia экспортировал как igs, включив в параметрах экспорт как поверхность (иначе солид с ошибками импортирует). Далее импорт в solidworks. И из него (установив плагин максвелла) экспорт как сцена MXS. И в maxwell studio уже импорт этой сцены (плюс чистка 2х камер и материалов)
Сглаживание работает, и размер даже меньше, чем прямой экспорт в stl с высоким качеством.

car2ner комментирует...

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

STL-модель приходит в Максвелл без сглаживания, т.к. сам формат STL никакого сглаживания и не поддерживает - в нем просто описываются координаты полигонов и направление нормалей. Значит нужно сгладить модельку уже в Максвеле. Я, к сожалению, не упомянул об этом нюансе, но он показан на этом скриншоте
Делать можно сразу на всю модель, выставив Smoothing Angle. Через IGES тоже можно перегонять - но там свои проблемы. В этом туториале рассматривалась исключительно работа с полигональными моделями

Dimi комментирует...

Про smoothing известно
Но на stl он у меня не работал - ни на каких деталях (при любых углах)
Хотя заметил, что у тебя гладко в скринах )

Анонимный комментирует...

Странно, что не упомянут перевод катийных моделек в макс посредством IGES. При чтении максом этого формата моделька становится NURBS в максе. Есть проблемка: некоторые модельки выходят с нурбсой с обращенной нормалью, но в максе ее можно перевернуть одной командой.

Привет автору, я zerganalizer из plm-форума, где вас модером сделали, с чем и поздравляю!

car2ner комментирует...

zerganalizer, приветствую! Вы на самую первую строку как раз внимания и не обратили :-) Там ссылка на статью про обмен нурбсами. А в этой статье я как раз хотел только о полигонах рассказать, т.е. возможно ли и как без промежуточных операций это делать. Ну и объяснения - в чем у каждого варианта преимущества.

Анонимный комментирует...

Спасибо, очень полезно.
Только одна проблема в catia 17 отсутствует инструмент Associativity, или он по другому называется.