Знакомимся с Python

30 октября 2023
Время чтения: 8 мин.

Введение

Python — это мощный язык программирования, который стал неотъемлемым инструментом в индустрии анимации и визуальных эффектов. Благодаря своей универсальности и простоте использования, он пользуется популярностью для автоматизации повторяющихся задач, создания пользовательских инструментов и оптимизации рабочих процессов в различных 3D-программах, включая Autodesk Maya.

В Autodesk Maya скрипты на языке Python позволяют художникам и техническим директорам автоматизировать задачи, манипулировать данными сцены и создавать пользовательские инструменты для улучшения рабочего процесса.

Знакомимся с Python. Простые упражнения по скриптингу от Романа Володина, изображение №1

Что такое команда и как строится логика программы

В программировании, каждая команда или инструкция представляет собой определённое действие, выполняемое программой.

Параметры, указанные в команде, позволяют уточнить или изменить результат выполнения этой команды. Например, при создании окружности в Maya с помощью команды cmds.circle() можно указать параметры, такие как радиус окружности (radius) и имя объекта (name). Изменение значений этих параметров приведет к созданию окружностей различных размеров и ориентации.

circle(radius=1, name="circle_1")

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

Знакомимся с Python. Простые упражнения по скриптингу от Романа Володина, изображение №2

Создание и перемещение объекта в сцене

Рассмотрим пример, в котором мы создадим кривую в виде окружности, переместим ее на две единицы вверх и изменим радиус.

Перейдите в меню ‘Windows’ > ‘General Editors’ > ‘Script Editor’, чтобы открыть редактор скриптов (Script Editor) в Maya. Именно здесь мы будем писать наш Python-скрипт.

После того как ваш Python-скрипт готов, пришло время его выполнить. Для этого выделите весь текст скрипта в редакторе скриптов (Script Editor) и нажмите кнопку «Run» (Запустить). Рекомендую выделить весь скрипт перед запуском, чтобы избежать его случайного удаления при выполнении.

# через имя "cmds" мы получаем доступ ко всем командам Maya, иначе наш скрипт не будет знать, что делает команда circle. import maya.cmds as cmds

# создаем кривую в виде окружности circle_1 = cmds.circle(radius=1, name="circle_1")[0]

В данном случае мы создаем окружность с радиусом 1 и сохраняем имя созданной окружности в переменную circle_1.

Теперь переменная circle_1 содержит имя созданной окружности и может быть использована для выполнения других операций с этим объектом. Например, мы можем переместить окружность по оси Y или изменить ее радиус

# Перемещение окружности circle_1 на 2 единицы вверх по оси Y cmds.move(0, 2, 0, circle_1, relative=True)

# Изменение радиуса окружности circle_1 на 1.5 cmds.setAttr(circle_1 + ".radius", 1.5)

Создание авто-рига выделенного объекта

Давайте рассмотрим пример создания автоматического рига для выделенного объекта в сцене. Это пример крайне полезного инструмента, который незаменим даже на таких крупных проектах, как «Человек-паук: Через Вселенные». Аниматор никогда не должен анимировать объект напрямую. У объектов должен быть хотя бы минимальный риг, с которым будет работать аниматор (например, если потребуется оживить мандаринку в тарелке и анимировать ее падение).

Рассмотрим данный пример по шагам.

1. С чего начинается любой скрипт для Maya
import maya.cmds as cmds # Импортируем модуль команд Maya для доступа к функциям Maya

Это команда добавляет особый модуль, maya.cmds в наш скрипт, через который мы будем выполнять все команды, связанные с Maya. Если мы этого не сделаем, то Script Editor сможет запускать только стандартные Python команды, никак не связанные с Maya

2. Получаем выбранный объект в сцене и запрашиваем его координаты и вращение
# Получаем выбранный объект на сцене selected_object = cmds.ls(selection=True)[0]

# Получаем мировые координаты перемещения (позиции) выбранного объекта с помощью команды xform obj_translation = cmds.xform(selected_object, query=True, translation=True, worldSpace=True)

# Получаем мировые координаты вращения выбранного объекта с помощью команды xform obj_rotation = cmds.xform(selected_object, query=True, rotation=True, worldSpace=True)

3. Создаем Master и Offset кривые (controls), которые аниматор и будет дергать
# Создаем главный контроллер в виде NURBS-окружности с радиусом 1 и нормалью, направленной вдоль оси Y

# Флаг 'name' определяет имя контроллера, а '[0]' извлекает первый элемент из результата master_control = cmds.circle(radius=1, normal=[0,1,0], name="master_ctrl_" + selected_object)[0]

# Создаем дополнительный контроллер в виде NURBS-окружности с меньшим радиусом 0.8, нормалью, направленной вдоль оси Y

# Контроллер называется "offset_ctrl" и пока не привязан к главному контроллеру offset_control = cmds.circle(radius=0.8, normal=[0,1,0], name="offset_ctrl_" + selected_object)[0]

Обратите внимание что к name мы добавили «selected_object», это значит что оба контроллера (и группа которую мы создадим ниже) будут иметь в конце своего имени имя выделенного объекта. Если мы это не сделаем, то уже на втором риге Maya будет ругаться, что объект с именем «master_ctrl» уже существует.

4. Создаем главную группу для нашего рига. Именно ее мы увидим в Outliner (весь риг будет внутри этой группы)
# Создаем пустую группу с именем "master_grp", которая будет служить верхней группой для рига master_group = cmds.group(empty=True, name="master_grp_" + selected_object)

5. Теперь мы зададим иерархию групп и контроллеров
# Привязываем главный контроллер к группе master_group cmds.parent(master_control, master_group)

# Привязываем дополнительный контроллер к главному контроллеру, создавая иерархическую связь cmds.parent(offset_control, master_control)

6. Перемещаем главный контроллер в то место, где находится наш выделенный объект
# Устанавливаем перемещение (позицию) и вращение главного контроллера в соответствии с выбранным объектом

# Флаг 'worldSpace=True' гарантирует, что значения применяются в координатах мирового пространства cmds.xform(master_control, translation=obj_translation, rotation=obj_rotation, worldSpace=True)

7. Помещаем наш выделенный объект в иерархию рига
# Привязываем выбранный объект к дополнительному контроллеру, чтобы завершить настройку риггинга cmds.parent(selected_object, offset_control)
Знакомимся с Python. Простые упражнения по скриптингу от Романа Володина, изображение №3

А что дальше?

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

Если вам интересно углубиться в тему программирования в Maya и повысить свой профессиональный уровень, добро пожаловать на мой курс «Основы программирования в Maya». На курсе мы рассмотрим более сложные аспекты создания ригов, написания сценариев и пользовательских интерфейсов и интеграции пользовательских инструментов в Maya. Знания, полученные на курсе, станут ценным ресурсом в вашем творческом арсенале и помогут вам воплощать самые амбициозные проекты.

Буду рад видеть вас на курсе и помочь вам освоить мир программирования в Maya!

Больше мы разбираем
эту тему на курсах