12 - 2021

Фотореалистичная анимация во Fusion 360 средствами API


Александр Стремнев,
к.т.н., доцент кафедры информационных технологий Белгородского государственного технологического университета
им. В.Г. Шухова

Задача фотореалистичной визуализации анимированной сборки во Fusion 360 может быть решена с использовани-ем скриптовых средств и штатных возможностей ренде-ринга статичных сцен. Данный материал можно, с одной стороны, рассматривать в качестве руководства к практи-ческому использованию, а с другой — считать попыткой анонса будущих возможностей этой комплексной САПР.

Autodesk Fusion 360 представляет собой динамично развивающуюся систему автоматизированного проектирования, включающую широкий спектр инструментальных сред для решения практически любых конструкторских задач — от трехмерного моделирования деталей и сборок до прочностных расчетов и подготовки программ станочной обработки. Особого упоминания заслуживает среда визуализации Fusion 360. К услугам проектировщика здесь предоставля­ется редактор материалов с богатой библиотекой, набор сцен­заготовок с настройкой освещения, локальный и облачный рендеринг. Предлагаемые инструменты удобны, результаты визуализации весьма достойны, но есть одно «но». Все эти возможности рассчитаны на получение только статичного изображения. Это ограничение становится особенно критичным для сборок с подвижными элементами — демонстрация изделия в динамике может оказаться весьма выигрышной для целей маркетингового продвижения.

Попробуем решить задачу визуализации видеоряда в Autodesk Fusion 360, приняв во внимание то соображение, что любая анимация (в том числе видео), по сути, представляет собой множество статичных кадров, демонстрируемых один за другим с достаточно большой скоростью. А генерировать «красивые» кадры­изображения Fusion 360 определенно «умеет».

Итак, создадим тестовую сборку ветряка, состоящую из основания и воздушного винта (рис. 1). Винт смонтируем на статичном основании посредством команды As­built Joint (Соединение по месту), относящейся к типу Cylindrical (Цилиндрическое соединение). В результате винт сможет свободно вращаться вокруг своей оси. Подготовленному соединению дадим имя в браузере модели.

Рис. 1

Рис. 1

Далее напишем программу­скрипт на языке Python, выбрав на вкладке Tools (Инструменты) во Fusion 360 команду Scripts and Add­Ins (Скрипты и дополнения) и нажав кнопку Create (Создать) — рис. 2. В окне создания нового скрипта введем его имя и ука­жем язык программирования.

Рис. 2

Рис. 2

Для перехода к редактору кода соз­данного скрипта нажмем кнопку Edit (Редактировать) в окне Scripts and Add­Ins (рис. 3).

Рис. 3

Рис. 3

Рис. 4

Рис. 4

В коде скрипта (рис. 4) после инициализации приложения Fusion 360 (app) и текущей сборки (root) задаются значения переменных revs и StepValue, определяющие количество полных оборотов винта для видео­анимации и шаговый угол поворота винта между отдельными визуализируе­мыми кадрами соответственно. Далее строкой:

driveJoint=root.asBuiltJoints.itemByName(‘Cyl_Rot_Joint’)

получаем доступ (по имени) к цилиндрическому соединению между винтом и основанием, а командой:

revMotion=adsk.fusion.CylindricalJointMotion.cast(driveJoint.jointMotion)

обращаемся к возможности изменения угла поворота в этом соединении.

Затем вызываем среду визуализации Fusion 360 (“FusionRenderEnvironment”) и начинаем программно «вращать» винт с помощью цикла for на величину шага (StepValue). На каждом шаге строкой:

revMotion.rotationValue=angle

устанавливаем текущее положение винта и запускаем локальную визуализацию командой “InCanvasRenderComand”. При этом пустым циклом:

for i in range(4000): adsk.doEvents()

даем время Fusion 360 (порядка 40 с) на генерацию (рендер) изображения для текущего положения винта.

Наконец, после визуализации каждого кадра его необходимо сохранить в виде графического файла инструкцией:

app.activeViewport.saveImageFile(filename,0,0)

Имя каждого следующего кадра (filename) включает порядковый номер, получаемый на основе инкремента счетчика цикла (stepNo+=1).

Готовый скрипт запускаем в окне Scripts and Add­Ins командой Run (см. рис. 3) и дожидаемся его завершения (рис. 5). В ходе работы скрипта производится поворот винта с заданным шагом, визуализация изменившегося состояния модели сборки и сохранение готовых изображений­кадров в графические файлы (рис. 6).

Рис. 5

Рис. 5

Рис. 6

Рис. 6

Работа, необходимая для создания видео, системой Fusion 360 завершена. Осталось собрать кадры­изображения в видеоряд. Сделать это можно с помощью любого видеоредактора. Например, в VirtualDub все файлы изображений, образующие анимационную последовательность, загружаются на шкалу времени автоматически. Для этого в окне Open Video file достаточно указать первый файл­кадр и активировать опцию Automatically load linked segments (Автоматически загрузить связанные фраг­менты) —  рис. 7 — не случайно в скрипте мы именовали файлы с использованием инкремента.

Рис. 7

Рис. 7

Загруженную в VirtualDub последовательность кадров можно сохранить как единый видеофайл командой Файл -> Сохранить как AVI… (рис. 8).

Рис. 8

Рис. 8

Готовое видео анимированной модели сборки (рис. 9) будет иметь тем большую плавность, чем меньше величина шага изменения варьируемого параметра соединения, для каждого положения которого предлагаемый скрипт (см. рис. 4) генерировал и сохранял кадры.

Рис. 9

Рис. 9

Итак, поставленная задача решена — получено фото­реалистичное видео анимированной модели сборки во Fusion 360. Однако рекомендовать этот путь начинающим пользователям данной универсальной CAD­системы мы, пожалуй, пока не будем. Вероятнее всего, достаточно скоро разработчики из компании Autodesk добавят функционал шкалы времени в набор команд Render, тем более что такой опыт у них уже есть — он реализован в старшем брате Fusion 360, известном под именем Autodesk Inventor, в среде Inventor Studio.

Желающие же опробовать упоминаемый в этом ма­териале скриптовый код могут найти его по ссылке [1], попутно расширив свои знания о структуре Fusion 360 API [2]. 

Полезные ссылки:

  1. Архив рассматриваемого проекта (Fusion 360)+скрипт (Python) // https://disk.yandex.ru/d/de1Ww_uYIxDDuA.
  2. Online­справка по Fusion 360 API // https://help.autodesk. com/view/fusion360/ENU/?guid=GUID­A92A4B10­3781­ 4925­94C6­47DA85A4F65A.

Регистрация | Войти