Уголок tool-программистов
GameDev.ru / Сообщества / Уголок tool-программ / Статьи / Tool-программирование в Motion Builder. Фазировка переходов между анимациями.

Tool-программирование в Motion Builder. Фазировка переходов между анимациями.

Автор:

Введение
  Условные обозначения
Общая структура
Приложение, сцена и система
Время и управление проигрыванием анимации
  Внешняя структура
  Внутренняя структура
Свойства
  Внешняя структура
  Внутренняя структура
  Анимированные свойства
  Создание свойств
Редактор анимационных роликов Story
  Внешняя структура
  Внутренняя структура
Python
Open Reality SDK
Пользовательский интерфейс
  Создание региона и назначение его визуальному элементу
  Установка свойств визуальных элементов и обработка событий
  Пример пользовательского интерфейса
Завершающая стадия разработки тулзы
Заключение
Приложение А. Вызов скрипта из SDK
Приложение Б. Файл конфигурации

Введение

Статья посвящена разработке дополнений к программе Motion Builder. Возможно этот пакет 3д анимации не получил еще должного распространения, только, на мой взгляд, это в силу малой известности в широких кругах и недостаточного количества примеров и обучающих уроков. И я надеюсь, что своей работой открою для вас полезную на практике сторону программы.

В подтверждение значимости данного пакета приведу несколько, на мой взгляд, важных преимуществ для гейм индустрии перед другими профессиональными пакетами:

    ·  высокая скорость обработки данных. Это касается как наполнения сцены в целом (64-битная версия программы способна работать с 3-4 гигабайтами контента), так и выполнения операций фильтрования и обработки данных.
    ·  продуктивная технология работы с устройствами захвата движения
    ·  удобный редактор для создания игровых роликов (Story editor)
    ·  редактор построения иерархии переходов для анимаций персонажа. Это позволит вам управлять своим героем до того, как он будет подставлен в игру. (Triggering)
    ·  программа имеет аккуратно и доступно написанный SDK и огромный перечень категорий подключаемых модулей. Другими словами, MotionBuilder и SDK к нему спроектированы очень гибко. Не могу также не упомянуть поддержку скриптового языка Python. В общем, tool-программисту здесь есть раздолье :).

Базовым форматом является *.fbx, получивший на сегодняшний день завидное распространение. Данный формат является бесплатным и хорошо поддерживается разработчиками (сам неоднократно обращался за помощью и всегда получал необходимую техническую поддержку). Еще одна важная особенность, fbx стал «мостом» между такими гигантами как Майя, Макс, Лайтвейв и Кси, поэтому Motion Builder всегда можно подставить на требуемом этапе работы над проектом, что не повлечет за собой каких-то серьезных перестановок в общей организации процесса разработки.

К Motion Builder (MB) прилагается документация как по скриптованию, так и по SDK. Однако все изложенное описание редко когда выходит за сухое перечисление набора классов и их методов и атрибутов со скудными пояснениями. Это отпугивает многих, кто пытается начать «укрощение» MB. Я сам, поначалу, столкнулся с подобной проблемой, но, немного освоившись, понял, что о лучшей справке даже и мечтать не нужно. Этот факт и сослужил мне как раз предпосылкой в написании данной статьи.

В силу того, что масштаб «внутреннего» устройства MB действительно велик, я представляю вам в своем труде разработку одной полезной тулзы и весь теоретический материал, смежный с ней. Т.е. статья носит ознакомительный характер и устроена «от простого к сложному».

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

Условные обозначения

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

Билдер – именовать так буду Motion Builder. Это проще воспринимается, да и вообще, когда долго работаешь с программой, то согласитесь, что можно уже переходить и на «ты».

Питон – скриптовый язык Python.

На заметку

По ходу своего разъяснения той или иной структуры я буду выкладывать скриптовый код, который даст вам возможность самим всё испробовать. Сразу скажу, что не важно, нужен вам в дальнейшем Питон или нет, название и содержание классов едино, как для скрипта, так и для SDK. Через Питон мне проще объяснить на наглядных примерах очередную мысль, поэтому вплоть до раздела Open Reality SDK теорию я буду подкреплять примерами на Питоне. Если будет возникать необходимость или какие-то отличия, то прибегу к использованию таблицы, где распишу два варианта, как это выглядит на Питоне и как на С++.

Как пользоваться Питоном? Очень просто! Выполнять скриптовые команды можно через специальный диалог Python Console Tool (главное меню Windows -> Python Console Tool). Есть другой вариант: написать скрипт (можно даже в обычном блокноте) и сохранить его с расширением *.py в директорию MotionBuilder\bin\config\scripts. По запуску Билдер автоматически найдет его и поместит в окно Assets в раздел Scripts.

Общая структура

Не вдаваясь в подробности, что использовать Python или Open Reality SDK, расскажу об общей схеме. Дело в том, что сама структура здесь сходна и в целом сохраняется как для скриптов, так и для SDK.

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

Open Reality SDK дает большие возможности, такие как создание интерактивных средств, пользовательского интерфейса, считывания данных с устройств, создание своего экспорта/импорта, менеджера сцены и т.д.

Однако сразу заметьте разницу: при использовании Питона достаточно буквально в блокноте набросать пару строчек и получить требуемую функцию или же автоматизацию определенной последовательности действий. В то время как работа с SDK требует планирования своих действий и проекта динамической библиотеки. Исходного кода выйдет уже значительно больше и времени на разработку в том числе. Так что в целом, и Питон и SDK, по сути, не замещают друг друга, а, наоборот, очень даже хорошо взаимодополняют.

Название классов, как собственно и перечень методов и атрибутов, в основном, един как для скрипта, так и для SDK, поэтому проведу краткий экскурс по базовым классам «внутренней» среды Билдера.

FBPlug – базовый класс для всех объектов среды Билдера. Наличие подобного класса подразумевает, что каждый объект, компонент либо свойство являются подключаемыми и могут быть источником либо приемником, между которыми образуется некоторая зависимость. Так материал соединяется с объектом и текстура с материалом и т.д.

FBComponent (наследующий FBPlug) – базовый класс для всех функциональных классов Билдера. На этом уровне вводится список свойств...

Атрибут PropertyList – список всех свойств данного компонента
Еще очень полезный атрибут Name – возвращает имя компонента.

Также имеются методы для модификации списка свойств компонента:
PropertyCreate()
PropertyRemove()

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

FBBox (наследующий FBComponent ) – «строительный блок» архитектуры приложения. Все анимационные элементы происходят от главного «боксового» класса.

От «боксового» класса выходят классы ограничителей (constraint), устройств захвата, моделей, материалов, шейдеров, текстур и т.д.

FBProperty – базовый класс для свойств. Доступ к свойствам осуществляется через FBComponent объекты, у которых имеется атрибут PropertyList класса FBPropertyManager. В списке свойств есть очень полезный метод Find(), непосредственно через который мы и можем получить ссылку на нужное нам свойство. Свойствам будет уделено особое внимание ниже.

Данный базовый класс порождает различные типы свойств – булевский (FBPropertyBoolean), цвет (FBPropertyColor), литерная (FBPropertyString), время (FBPropertyTime) и т.п.

Важным моментом является то, что от данного класса также порождаются анимированные свойства

FBPropertyAnimatable (наследующий FBProperty). Ранее я писал, что FBBox является классом, от которого происходят все анимационные элементы и FBPropertyAnimatable не является исключением. Анимационное свойство является составляющим FBBox.

Изображение
Схематическое представление взаимосвязей базовых классов

Возможно, сразу немного сложно понять назначение каждого класса доминанты «внутренней» структуры Билдера, однако по мере работы все окончательно встанет на свои места. Так что давайте перейдем от абстрактных структур к функциональным и используемым.

Страницы: 1 2 38 9 Следующая »

21 октября 2007

#Motion Builder, #tools


Обновление: 23 октября 2007

2001—2018 © GameDev.ru — Разработка игр