Задача фотореалистичной визуализации анимированной сборки во Fusion 360 может быть решена с использовани-ем скриптовых средств и штатных возможностей ренде-ринга статичных сцен. Данный материал можно, с одной стороны, рассматривать в качестве руководства к практи-ческому использованию, а с другой — считать попыткой анонса будущих возможностей этой комплексной САПР.
Autodesk Fusion 360 представляет собой динамично развивающуюся систему автоматизированного проектирования, включающую широкий спектр инструментальных сред для решения практически любых конструкторских задач — от трехмерного моделирования деталей и сборок до прочностных расчетов и подготовки программ станочной обработки. Особого упоминания заслуживает среда визуализации Fusion 360. К услугам проектировщика здесь предоставляется редактор материалов с богатой библиотекой, набор сцензаготовок с настройкой освещения, локальный и облачный рендеринг. Предлагаемые инструменты удобны, результаты визуализации весьма достойны, но есть одно «но». Все эти возможности рассчитаны на получение только статичного изображения. Это ограничение становится особенно критичным для сборок с подвижными элементами — демонстрация изделия в динамике может оказаться весьма выигрышной для целей маркетингового продвижения.
Попробуем решить задачу визуализации видеоряда в Autodesk Fusion 360, приняв во внимание то соображение, что любая анимация (в том числе видео), по сути, представляет собой множество статичных кадров, демонстрируемых один за другим с достаточно большой скоростью. А генерировать «красивые» кадрыизображения Fusion 360 определенно «умеет».
Итак, создадим тестовую сборку ветряка, состоящую из основания и воздушного винта (рис. 1). Винт смонтируем на статичном основании посредством команды Asbuilt Joint (Соединение по месту), относящейся к типу Cylindrical (Цилиндрическое соединение). В результате винт сможет свободно вращаться вокруг своей оси. Подготовленному соединению дадим имя в браузере модели.
Рис. 1
Далее напишем программускрипт на языке Python, выбрав на вкладке Tools (Инструменты) во Fusion 360 команду Scripts and AddIns (Скрипты и дополнения) и нажав кнопку Create (Создать) — рис. 2. В окне создания нового скрипта введем его имя и укажем язык программирования.
Рис. 2
Для перехода к редактору кода созданного скрипта нажмем кнопку Edit (Редактировать) в окне Scripts and AddIns (рис. 3).
Рис. 3
Рис. 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 AddIns командой Run (см. рис. 3) и дожидаемся его завершения (рис. 5). В ходе работы скрипта производится поворот винта с заданным шагом, визуализация изменившегося состояния модели сборки и сохранение готовых изображенийкадров в графические файлы (рис. 6).
Рис. 5
Рис. 6
Работа, необходимая для создания видео, системой Fusion 360 завершена. Осталось собрать кадрыизображения в видеоряд. Сделать это можно с помощью любого видеоредактора. Например, в VirtualDub все файлы изображений, образующие анимационную последовательность, загружаются на шкалу времени автоматически. Для этого в окне Open Video file достаточно указать первый файлкадр и активировать опцию Automatically load linked segments (Автоматически загрузить связанные фрагменты) — рис. 7 — не случайно в скрипте мы именовали файлы с использованием инкремента.
Рис. 7
Загруженную в VirtualDub последовательность кадров можно сохранить как единый видеофайл командой Файл -> Сохранить как AVI… (рис. 8).
Рис. 8
Готовое видео анимированной модели сборки (рис. 9) будет иметь тем большую плавность, чем меньше величина шага изменения варьируемого параметра соединения, для каждого положения которого предлагаемый скрипт (см. рис. 4) генерировал и сохранял кадры.
Рис. 9
Итак, поставленная задача решена — получено фотореалистичное видео анимированной модели сборки во Fusion 360. Однако рекомендовать этот путь начинающим пользователям данной универсальной CADсистемы мы, пожалуй, пока не будем. Вероятнее всего, достаточно скоро разработчики из компании Autodesk добавят функционал шкалы времени в набор команд Render, тем более что такой опыт у них уже есть — он реализован в старшем брате Fusion 360, известном под именем Autodesk Inventor, в среде Inventor Studio.
Желающие же опробовать упоминаемый в этом материале скриптовый код могут найти его по ссылке [1], попутно расширив свои знания о структуре Fusion 360 API [2].
Полезные ссылки:
- Архив рассматриваемого проекта (Fusion 360)+скрипт (Python) // https://disk.yandex.ru/d/de1Ww_uYIxDDuA.
- Onlineсправка по Fusion 360 API // https://help.autodesk. com/view/fusion360/ENU/?guid=GUIDA92A4B103781 492594C647DA85A4F65A.