3D-моделирование с помощью программирования

инструментарий
3D
программирование
3D-печать
Дата публикации

6 августа 2022 г.

Существует множество способов создать трёхмерную модель. Некоторые программы предназначены для поверхностного моделирования - редактирования отдельных вершин, рёбер и граней, другие предназначены для твердотельного моделирования. В обоих методах необходимо изменять различные параметры инструментов, использовать базовые формы для создания более сложных. Но некоторые приложения для 3D-моделирования дают пользователю набор визуальных блоков для программирования или вовсе текстовый редактор и полноценный язык программирования. Трёхмерная модель, в таком случае, будет результатом выполнения программы, написанной пользователем.

Почему такой способ моделирования может быть полезен в образовательных целях? Потому что он хорошо согласуется со STEM-методологией, объединяя математику, программирование, инженерию и создание технологии. Создание модели требует алгоритмического мышление - умения абстрагироваться и найти повторяющие детали, паттерны в моделируемом объекте, разложить объект на более простые составляющие, то есть провести декомпозицию - какой набор базовых форм и операций над ними приведёт к итоговой модели:

Пример деконструкции 3D-модели

Пример деконструкции 3D-модели

После этого нужно составить алгоритм, выполнение которого поможет создать необходимую трёхмерную модель. Без понимания, что такое координата, угол, дробь, площадь и объем1 описать такой алгоритм может быть попросту невозможно.

Также при описании алгоритма, если планируется напечатать модель на 3D-принтере, нужно учитывать ограничения технологии печати, допуски по отверстиям, добавление фасок и скруглений.

Таким образом программный метод моделирования требует от учащегося наличия компетенций из различных предметных областей.

Рассмотрим несколько программ, которые реализуют описанный подход к трёхмерному моделированию. Пойдём от простого к сложному.

Для начинающих: TinkerCad

TinkerCad распространённый инструмент для 3D-моделирования для начинающих. Сервис не требует установки, потому что работает напрямую из браузера. И кроме простого трёхмерного графического редактора содержит раздел называемый Блоки кода. После перехода к этому разделу появляется возможность начать проект, модель в котором будет создаваться при помощи визуального языка программирования.

Пример программы

Пример программы

Выполнение этой программы построит модель домика и дерева, путём добавления к сцене базовых форм - куба, призмы, сферы и цилиндра. Каждую форму можно настроить и затем переместить с помощью блока Движущий механизм. Далее показана анимация с выполнением этой программы.

Анимация выполнения программы

Анимация выполнения программы

Помимо простого следования блоков, можно добавить циклы, чтобы создавать более сложные объекты, например пропеллер. Сначала отдельно создаётся модель одной лопасти, которая и будет вращаться в цикле:

Количество итераций цикла определит количество лопастей и угол их поворота:

После выполнения программы получаем модель пропеллера с четырьмя лопастями:

Добавив к этой программе переменные для хранения количества лопастей и их длинны получим программу для параметрического создания модели. Пример хорошей задачи в которой не обойтись без переменных - параметрическая коробочка. Учащему нужно разработать программу, которая по указанным значениям переменных с длинной, шириной и высотой коробки а также толщины стенок, создаст саму коробку и крышку:

В заключение ещё один любопытный проект в котором сочетается математика и программирование - ваза, построенная благодаря золотому сечению.

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

Средняя сложность: BlocksCAD

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

В отличии от TinkerCad, набор доступных блоков значительно шире - добавляется условный оператор и блок для создания собственных процедур и функций. Пример применения условий показан в следующем проекте - параметрической линейке. В переменной length хранится длина линейки. Штрихи, длинные и короткие, наносятся исходя из условия и подписываются:

Программа для моделирования линейки в BlocksCad

Программа для моделирования линейки в BlocksCad

В результате получается следующая 3D-модель:

Готовая модель линейки

Готовая модель линейки

Её можно экспортировать в STL-формат и напечатать на 3D-принтере.

Мне пока не довелось использовать этот сервис на занятиях, но думаю, что он будет очень полезен при обучении школьников старших классов и студентов.

Для продвинутых: OpenSCAD

Слово продвинутых выделено курсивом только потому, что, на первый взгляд программа OpenSCAD сложнее предыдущих вариантов. Если до этого начинать с BlocksCAD, переход будет проходить легче, так как BlocksCAD - это визуальный язык, который полностью совместим с OpenSCAD, потому что является надстройкой над ним. BlocksCAD-проекты легко можно перенести в OpenSCAD. Переходим на вкладку Блоки и получаем код программы, который можно вставить в OpenSCAD. Например программа для моделирования линейки выглядит так:

length2 = 63;
difference() {
  cube([10, length2, 1.5], center=false);
  for (y = [0 : abs(5) : length2]) {
    if (y % 10 == 0) {
      union(){
        translate([9, y, 1]){
          rotate([0, 0, 90]){
            linear_extrude( height=0.5, twist=0, center=false){
              text(str(y), font = "Roboto", size = 2*0.75);
            }
          }
        }
        translate([0, y, 1]){
          cube([7, 0.5, 0.5], center=false);
        }
      }
    } else if (y % 5 == 0) {
      translate([0, y, 1]){
        cube([3, 0.5, 0.5], center=false);
      }
    }
  }
}

Язык программирования в OpenSCAD одновременно прост, но и обладает своими особенностями. Так, например стандартная для других языков программирования запись

x = x + b

не сработает и вызовет ошибку. И такие особенности нужно знать и учитывать при планировании занятий.

В интернете можно найти много ресурсов, посвященных этой программе2, а также готовых фрагментов кода. Есть ряд книг, большинство которых, к сожалению, на английском языке. Лично мне понравилась книга Programming with OpenSCAD за чёткую и последовательную структуру изложения. Ещё один большой плюс этой книги - упражнения и сложный проект в конце каждой главы.

Вторая полезная книга - 3D Printed Science Projects в двух частях. Из неё можно подчерпнуть для себя, как применить 3D-печать в общем и OpenSCAD в частности в разных предметных областях - математике, физике, химии, биологии и географии. Код примеров из книги хранится в GitHub-репозитории.


Последние два приложения из списка я пока не опробовал лично, но вижу, что в них есть образовательный потенциал. Надеюсь, что этим инструментам найдётся время и место.

Сноски

  1. В этом документе можно найти примеры проектов и список математических понятий, которые с ними связаны.↩︎

  2. Например официальное руководство (переведено не полностью) и мануал из двух частей: часть 1, часть 2. У последнего сайта, конечно, любопытное название, но информация полезная.↩︎