Свободное ПО моделисту: делаем аэроглиссер
Иногда в жизни хабра-индивидуума наступает момент, когда у него возникает непреодолимое желание написать статью. Вот он читает, как кто-то в чем-то разобрался или сделал что-то своими руками, и задумывается: «Я ведь тоже могу поделиться своим, заинтересовать, увлечь. Не потреблять же постоянно. Итак, выключаем режим стелс-хабра-читателя и подставляем свои уголковые отражатели зондирующим линейно-частотно модулируемым лучам добра.
Почему аэроглиссер? Я собрал несколько моделей самолетов из потолочки (потолочной плитки), и вроде с ними все хорошо, но именно мои недолговечны и с ними нужно выезжать по пробкам к ближайшему полю почти час (мы же законопослушные, в закрытых зонах не летаем). А тут рядом с домом есть озеро. Но по опыту пусков катера желательно, чтобы ниже ватерлинии не было ничего. Мое озеро не располагает к купанию, а водорослей на нем много. Плюс есть небольшая площадка для покатушек зимой по снегу (да и по замерзшему озеру). Поэтому было решено приземлить/приводнить один комплект электроники (кочующий от пенолета к пенолету) на аэроглиссер. Еще для новичка такая машина — хорошая практика, — живет в двух координатах и не разбивается, падая с третьей.
Следующим шагом было изучение того, что предлагает сеть. И вроде есть варианты от куска пенопласта с рулем до более-менее красивых моделей, но опять же целиком из потолочки. Хотелось чего-то посложнее и пожестче в плане конструкции. Тут то и всплыли из моего детства образы неких аэросаней. Видел я их в подборке Моделист-конструктора деда. Недолгие поиски привели к изделию А-3 КБ Туполева. Красивое такое, вроде как самолет, но не самолет, но с винтом и хвостами. Решено! Будем строить А-3.
Иллюстрация из того самого «Моделист-конструктора»
Так как с лобзиком и временем у меня не сложилось, то применять будем современные технологии разработки и ЧПУ фрезер. Тут то и приходит на помощь свободное ПО — как основной инструмент проектирования выступает на арену Blender, и немножко на подхвате Inkscape. Может кто-то и скажет, что Blender это сложно, давайте тут развеивать этот миф.
Первым делом скачиваем эти две программы и устанавливаем. Blender я использую версию 3.0. При первом запуске появится окно начальных настроек, где можно выбрать роль основных кнопок по выделению, проигрыванию анимации, тему или нажать Load 2.9.0 Settings если вы старовер. Я использую этот режим.
Типичный старовер сейчас:
Далее быстро осваиваемся с управлением в 3D viewport: зажатое колесо — вращение сцены, колесо+shift — панорамирование. Пятерка на numpad — переключение с перспективной на ортогональную 3D проекцию. Выбор проекций видов: 7 — верх, 1 — фронт, 3 — право. Если вы новичок — заставляйте себя использовать хоткеи, потом значительно упрощает работу. Еще надо попробовать интересную особенность Blender — настраиваемый интерфейс. Если верхний правый угол 3D viewport (курсор становится крестом) потянуть влево, то появится новое окно 3D viewport. Схлопнуть его можно там-же, только тянуть вправо (курсор станет стрелкой).
Итак, почти все готово к началу моделирования. В центре сцены у нас уже есть куб, источник света и камера. И еще 3D курсор. Это место силы, где появляются объекты, относительно него можно выполнять операции выравнивания, копирования, перемещения.
Теперь ищем три проекции. Я нашел такой чертеж:
Вырезаем из файла три картинки с видами (я использовал «ножницы» Windows). В настройках сцены выбираем метрическую систему и миллиметры.
В качестве масштаба я отталкивался от диаметра того винта, который у меня есть. Его диаметр 180 мм. Тут надо сделать ремарку, что выбор материалов исходил из того, что у меня было в наличии. И скорее всего, моя винто-моторная группа и некоторые материалы не совсем оптимальны.
Теперь создадим габаритный бокс на основе размеров с чертежа и знания диаметра модельного винта. Для этого будем использовать уже существующий куб (не отправлять же его на блендер-кладбище дефолтных кубов).
Для ввода размеров предназначена панель Dimensions. Панель открывается (и закрывается) нажатием кнопки N. Далее нажатием Z переключаем режим отображения в «проволочный каркас» (wireframe). Тоже самое можно достичь пиктограммой самого левого шарика в верхнем правом углу. Все готово для загрузки первой опорной картинки — вид справа.
Нажимаем Shift+A и выбираем Reference. Картинка появится в том месте, где у вас был 3D курсор (если нужно поставить в центр — Shift+S-Cursor to world origin).
Далее подгоняем картинку под габаритный бокс.
Во вкладке Image окна Properties можно настроить размер и положение картинки относительно центра, отрегулировать её прозрачность. Немного об организации сцены. Очень удобно для этого использовать коллекции окна Outliner. Это напоминает слои. В настройках окна выбираем настройки запрета выделения и видимости (потом можно будет скрывать референсы). Референсы складываем в одну коллекцию. Повторяем действия для верхней и фронтальной проекции и получаем такую заготовку.
Теперь все готово к моделированию. Блокируем всю коллекцию референсов, габаритный бокс можно скрыть (выделить его и нажать H). Добавляем новый куб в центр сцены. Масштабируем, чтоб влезал в сцену (хоткей S). Нажимаем Tab (режим редактирования объекта). Моделировать будем половинку, вторую достроит модификатор mirror. Для этого разрежем куб пополам. Последовательность следующая — жмем Shif+R и двигаем мышью, располагая желтую рамку будущего разреза вертикально. Далее два раза ввод.
Нарезка кубиков
Образовались новые вершины. Переходим в вид сверху, выделяем верхние вершины (хоткей B — выделение рамкой, в режимах кроме wireframe будут выделяться только видимые вершины, или включить режим X-Ray для всех режимов) и удаляем их (X-Vertices). Применяем модификатор mirror. В настройках указываем ось, по которой зеркалить — Y.
Далее творческая работа. Выделяем вершины фронтального полигона (или полигон в режиме выделения полигонов) и двигаем (хоткей G) их к носу (нажимаем X, чтобы двигаться вдоль оси Х). Образуем новые разрезы, как делали с кубом в ключевых местах изменения геометрии, только теперь щелчком мыши устанавливаем разрез вертикально, двигаем в нужное место и вторым щелчком фиксируем разрез.
Образование новых вершин
Потом выравниваем вершины по проекциям, не моделируя пока кабины и рулей.
Для фронтального вида делаем разрез вдоль. Далее выделяем нижнее ребро (Alt+Shift+Щелчок по вершине нижнего ребра), снимаем выделение с первой и последней вершины и тянем ребро вверх по оси Z.
Теперь еще один разрез в верхней части вдоль кабины и аналогичное выравнивание по фронтальному виду.
Ну вот, уже появляется лаптеобразная заготовка.
Теперь новый инструмент — нож (K). В виде сверху режем по контуру кабины. Завершается разрез вводом.
Этим действием мы образовали новые полигоны. Теперь в режиме работы с полигонами выделяем их и выдавливаем (E) вдоль оси Z.
Дальше по аналогии — разрез — выравнивание. A few hours later применяем модификатор сглаживания.
«Что это? Птица? Самолёт? Нет, это… Аэроглиссер!»
В результате этого этапа получилась болванка, с которой мы будем получать сечения-шпангоуты и стрингеры — продольные элементы жесткости корпуса.
Первым делом возьмемся за стрингеры. Перед следующими операциями болванку нужно дублировать (Shift+D+Ввод) и применить в меню модификаторов модификатор сглаживания. Дальше выберем несколько продольных ребер на корпусе, как показано на рисунке, в ключевых изменениях геометрии (Alt+Shift+Щелчок в режиме редактирования объекта). Отделим эти ребра от модели комбинацией Shift+D+Ввод (дублирование) P-Selection (отделение в новый объект).
Это будут профили, по которым мы будем тянуть сечение стрингеров. Теперь переходим в режим операций с объектами (Tab) и выделяем вновь образованный объект и опять заходим в режим редактирования объекта (этот пока еще составной объект можно поместить в отдельную коллекцию). Теперь повествование пойдет об одном стрингере, остальные делаются аналогично.
Задача от этого набора отделить одну линию, конвертировать её из mesh в кривую (curve), нарисовать сечение рейки (стрингера) и вытянуть его вдоль этого пути. Отделяем одно связанное ребро так как описано выше.
Выбираем вновь отделенную линию и нажимаем сочетание Alt+C-Curve. Теперь доступны операции с кривыми.
Выходим из режима редактирования этой кривой и где-нибудь в начале или конце добавляем плоскость (Shift+A-Plane). Через панель Transform задаем ей размеры 5×5 мм. В параметрических системах по-хорошему этот размер выносится в отдельный параметр (вроде плагин BlenderCAD это умеет), и меняя только этот размер, можно пересчитать все пазы с 5 мм рейки на 3 мм рейку, но так пока проще. Конвертируем плоскость в кривую (как делали с мешем выше, в режиме редактирования объекта) и меняем тип кривой, как на рисунке ниже. Выходим из режима редактирования, выбираем наш стрингер-сплайн и в меню сплайнов подменю geometry в опции bevel находим созданный из плоскости сплайн. После этого кривая примет вид огромной квадратной трубы. Её размер будет отличаться в 20 раз.
Почему происходит так, я не знаю. Я и применял трансформации, и искал ответ в интернете. Возможно знающие люди подскажут и я в этом месте исправлю текст. Но пока, чтобы привести размер в норму, нужно разделить размеры профиля на 20. Выбираем профиль, во вкладке Dimensions, прямо рядом с размером ставим слеш и пишем 20, жмем ввод — размеры сечения «трубы» придут к 5 мм квадрату.
Сечения оставшихся стрингеров формируем по аналогии. В результате получится следующая заготовка.
Теперь займемся шпангоутами. На этом этапе вдоль центра модели нужно предусмотреть некий стапель. У меня это алюминиевый стержень квадратного сечения со стороной 10 мм и две рейки для самого первого шпангоута (стержень там мимо пролетает). При сборке на этом стапеле будут размещаться шпангоуты через определенный шаг. Так не должна уйти геометрия (у меня все-же ушла немного, ниже объясню почему). Для создания шпангоутов нужно нарисовать секущие плоскости. В центре добавляем плоскость (Shift+A-Plane) Масштабируем, разворачиваем как на рисунке (хоткей R, потом нажимаем нужные оси (ХYZ) и цифрами набираем градусы, на которые нужно повернуть плоскость (90 или 180), жмем ввод).
Теперь эту секущую плоскость нужно размножить. Выделяем её, и набиваем на клавиатуре Sift+D (дублировать) Х (по оси Х) -50 (и передвинуть на 50 мм в отрицательном направлении) и ввод. Далее Shift+R, чтобы повторить предыдущую комбинацию — размножить плоскость по оси Х через 50 мм. Аналогично в другую сторону, только 50 мм без минуса.
Выделяем плоскости и жмем Ctrl+J — получаем один объект. Теперь выделяем болванку корпуса, дублируем (чтобы сохранить её, работать будем с дубликатом) в панели модификаторов (гаечный ключ) выбираем священный Boolean с опцией Difference, указывая на объект секущих плоскостей. И получаем сечения.
Дальше применяем весь стек модификаторов для этого объекта (Ctrl-A, когда мышь в зоне вкладки модификаторов или из выпадающего меню (галочка вниз)). На данном этапе нужно сформировать внутреннюю полость модели. Для этого нужно разделить все заготовки шпангоутов в отдельные объекты и сформировать внутренний контур. Рассмотрим на одном шпангоуте. Переходим в режим редактирования (помните как?). В режиме выделения полигонов выделяем один единственный полигон.
Нажимаем хоткей I и двигаем так, чтобы граница полигона была шире 5 мм с запасом материала в местах, где будет вычитаться стрингер. Двигать нужно до момента образования каши из ребер как на рисунке выше.
Если нужна большая ширина — останавливаемся до пересечения ребер щелчком мыши и потом этот полигон масштабируем (S). Можно зажимать в процессе масштабирования нужные оси, чтобы добавить/убрать будущий материал. Затем командой X удаляем центральный полигон с опцией Delete only faces.
Спустя несколько Артемо-часов получаем вот такой скелет:
Полученные объекты объединяем в один и вычитаем булевой операцией стрингеры (их нужно обратно конвертировать в mesh, Alt+C и отзеркалить).
На рисунке видно, что с кормы и носа (это же частично судно) я не удалял внутренности нескольких шпангоутов. Один разрезал сверху под пилон двигателя, и в одном предусмотрел ложемент под площадку для электроники. Делалось все в режиме редактирования одного шпангоута с его половинкой. Вторая часть отзеркаливалась.
Чтобы не усложнять и не увеличивать статью, держатели стапеля в шпангоутах я дорисовал в Inkscape, но центральный квадрат для него мы получим из Blender«а.
Используя аналогичные техники, были нарисованы: площадка под электронику, пилон-моторама и кили-рули. Алгоритм следующий: добавляется плоскость, разрезанием и движением вершин подгоняется под чертеж (или ваше видение инженера-созидателя), далее выдавливается на толщину вашего материала (да, тут бы параметрически… хочешь 3 мм фанеру, хочешь пять –, но у меня была только пятерка). Симметричные детали рисуем половинками. Крепление шип-паз формируем булевыми операциями с дубликатами деталей. Так дубликатами элементов моторамы я получил отверстия и вырезы для крепления моторамы и пилона, а для крепления килей я дублировал и вычитал пересекающиеся их части со шпангоутами. Сервопривод я скачал и вычел из площадки для оборудования, а двигатель смоделировал из цилиндров по имеющимся размерам. Разместил и проверил, не пересекаются ли с винтом тяги рулей (тоже цилиндры). Тем, кто умеет работать с костями и инверсной кинематикой можно даже прямо тут в 3D пошевелить рулями.
В процессе проектирования я учитывал толщину только задних шпангоутов (те, которые участвуют в пересечениях с внутренней структурой), а с передних брал только контур. Это привело к набегающей к носу ошибке в длине. В результате у меня передний шип площадки для электроники не дотянул до своего паза на 7 мм, и сама модель получилась несколько длиннее. Это так, в плане поделиться с вами своими граблями.
Теперь получим векторные изображения деталей. Короткий план : разместить по проекциям ортогональные камеры, включить FreeStyle рендер и, по очереди, скрывая детали и оставляя нужные, получить их рендеры в SVG формате. Молодцевато, как опытный пианист, одной рукой жмем Ctrl+Alt+U и вызываем настройки. В пункте addons находим Freestyle SVG exporter. В результате этого действа во вкладке Render Properties появятся новые настройки. Делаем как на рисунке.
Ставим камеру, жмем Ctrl+F12 и ждем окончания рендера. В той папке, где сохранена модель, появится SVG файл с именем номера кадра.
Ну практический инженерный арт. Теперь на примере одного шпангоута посмотрим, как получить его чертеж.
Выделяем камеру, переходим во фронтальную проекцию и выравниваем камеру по виду (Ctrl+Alt+0 на num pad, или жмем пробел и начинаем набирать align…. до появления нужного пункта).
Переключаем тип камеры — с перспективной в ортографическую. Масштабом подгоняем так, чтобы объекты были в поле зрения камеры. Теперь нужно оставить только нужные объекты для рендера. Снимаем выделение со всего (A), выделяем нужный шпангоут и стапель, инвертируем выделение (Ctrl+I) и скрываем все остальное (H). В outliner выключаем опцию рендера для всех невидимых объектов. Если иконка фотографического аппарата отсутствует, включаем её в настройках (символ воронки-фильтра). Если вы разбивали логически сцену на коллекции, можно скрыть целиком коллекцию.
Рендерим изображение и получаем векторный файл:
Один важный нюанс. Объекты для этих рендеров должны быть плоские. Иначе Freestyle рендер будет добавлять линию над линией и дальше в Inkscape для получения замкнутых контуров придется дополнительно их редактировать. Я в проекции «боком» к детали в режиме редактирования выдавленной детали выделяю вершины одной плоскости и удаляю их, получая плоскую деталь — так формирую отдельную коллекцию для итогового ренедера.
Если тема интересна, во второй части статьи опишу, как собрать эти файлы в лист, немного доработать их, получить G-code для фрезеровки/лазерной резки. Ну и описать процесс сборки модели. Модель кстати собрана, функционирует, радуя детвору (и взрослых дядь) и огорчая уток.
В заключении хочется сказать, что когда задача разбивается на небольшие подзадачи (О декомпозиция!) то не так уж и сложно. И Blender становится дружелюбен. Отдельное спасибо товарищам Павлу Жовнеру, Сергею @dlinyj, Денису Веберу и многим другим авторам, которые меня тут на протяжении лет учили и заряжали своим интересом и образом достижения целей. За сим пока все, выключаем «высокое».