![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
Анимация от А до Я (временно)
Довольно давно я взялся за эту статью, еще в начале 2010 г. Потом долгое время пытался заставить себя её доделать, но в какой-то момент я так устал от анимированмя, что уже и видеть её не хотел)
Сейчас же, когда она снова попалась мне на глаза я решил, что нужно её опубликовать, ибо не гоже пропадать такой работе, но вот допишу ли я её до конца – не знаю... Именно поэтому я добавил в тему опрос, надеюсm на ваш выбор. В первом случае я буду работать над ней дальше до полного завершения (что наверняка будет очень трудно), во втором - остановлюсь на имеющемся. Тема здесь временно, т. к. раздел "Жёлтая пресса" закрыт.
Итак, поехали...
ВведениеУже много времени я с интересом просматриваю модели наших юзеров в "Моделях для базы", и мне, собственно говоря, порядком поднадоело видеть одни и те же "варовские" анимации, прилепленные к геометрии Пересадкой Мяса. Есть, конечно, энтузиасты, которые делают некоторые анимации или их части самостоятельно, но мало у кого это получается действительно хорошо.
И, смотря на всё это, я решил написать полную и подробную статью об анимировании, так сказать, от "А" до "Я". Подготовка к работеВ этой статье я буду говорить об анимации и её аспектах, и для этого нам понадобятся только две программы:
Основная частьПредполагается, что читатель уже имеет базовые навыки работы с Mdlvis и War3 Model Editor. Если вы их не имеете, то советую прочитать соответствующие статьи на сайте.
В определённых заголовках вы можете увидеть цифры в скобках:
» Например
Практика (01-14)Они обозначают номера копий-моделей в папке «Tech-priest» из архива с примерами, приложенного к статье. Нумерация идёт в формате «v1-##», где «##» - является номером в диапазоне чисел, указанных в скобках.
Этап I: оснастка скелетаТеорияПервое, с чего начинается каждая анимированная модель - это скелет. Здесь могут оказаться полезны хоть какие-нибудь познания в анатомии, например, чтобы определить, где должна находиться кость, отвечающая за движения нижней челюсти.
Скелет может состоять из множества костей, но для основных анимаций гуманоида в WarCraft III понадобится как минимум 16. На изображении 1.1 эти кости показаны синими, красными и жёлтыми кружками. Красное - правое, синие - левое, жёлтым обозначен осевой скелет. Как правило, между названиями левых и правых костей отличие лишь в префиксе буквы "L" или "R", или слова "Right" или "Left". Серые объекты - дополнительные кости, используемые в частных случаях и хелперы (помощники).
Примечание: Helper (помощник) - это кость, к которой не присоединены вершины.
Линиями показаны зависимости костей, для ног они расположены в порядке от пальцев стопы (Bone_Toes) до кости, отвечающей за бедро (Bone_LegUp); для рук в порядке от хелпера Weapon до плечевого пояса (Bone_ArmUp). Родительские кости ног крепятся к тазу (Bone_Pelvis), а кости плечей и кость головы (Bone_Head) к груди (Bone_Chest). Эти осевые кости никак друг от друга не зависят, но как правило крепятся к хелперу Root (Bone_Root), который используется для передвижения всей модели, например, при прыжке, или вращения, как при перевороте. За оружие обычно отвечает кость Bone_Weapon, но могут встречаться и другие названия (например, в модели лесного тролля за топоры отвечают кости Axe1 и Axe2).
Вообще, никто не ограничивает вас в названии ваших костей, но правильные названия помогают в понимании и облегчают процесс анимирования модели.
Важно: располагать кости следует так, чтобы они попадали в место сгиба, при повороте той части тела, за которую отвечают, именно поэтому, например, Bone_Head должна находиться около середины или ближе к основанию шеи.
1.1 (вид спереди)На картинке 1.2 вы можете видеть положение основных костей во время одной из анимаций.
1.2.Что касается скелета портрета, то тут основополагающими костями будут Bone_Chest, Bone_Head и кости отвечающие за нижнюю челюсть и мышцы верхней (т. к. сама кость верхней челюсти неподвижна). Но для правдоподобности движений и выражения эмоций следует использовать ряд других костей. Например, отвечающих за брови, щёки, веки, уголи рта, и т. д.
Изображение 1.3 показывает правильное расположение костей портрета моего орка-снайпера, обратите внимание на положение кости, отвечающей за нижнюю челюсть.
1.3Что касается оснастки скелета для животных, предметов и прочего, то тут всё аналогично, нужно лишь чётко себе представлять, что к чему должно крепиться и как должно двигаться.
Вот пример скелета (62 кости) хищного растения: 1.4Практика (01-14)Итак, пришло время попрактиковаться. Я, для примера, вытащил модель техножреца (tech-priest) из «Warhammer 40.000 Dawn of War: Soulstorm» и буду сейчас делать скелет, а потом и анимации именно для него.
Примечание: есть определённые весьма сложные способы конвертации из Warhammer 40.000 с одной или несколькими анимациями, но я пока не углублялся в эти премудрости, да и это больше относится к конвертации, нежели к анимированию.
Совет: если во время каких-либо операций Mdlvis выдаёт ошибки типа «Access Violation», перезапустите программу. На всякий случай также можно предварительно пересохранить модель в другой файл.
Я уже импортировал в Mdlvis модель техножреца и назначил все необходимые текстуры и материалы:
1.5Переходим в Редактор анимаций (F3) на вкладку Скелет. Скорее всего, в модели-болванке, на основе которой вы делали свою модель, уже есть одна или несколько костей, советую оставить только одну, если их несколько, и переименовать в Bone_Root.
Создать кость можно простой командой через главное меню:
Обратите внимание, кость имеет название bone_new0, все последующие новые кости будут иметь такие же имена, за исключением номера, который будет последовательно увеличиваться. Новая кость также не имеет прикреплённых вершин, и поэтому пока является хелпером.
1.6Пусть наша первая новая кость будет отвечать за голову персонажа.
Отключим видимость ненужных поверхностей и передвинем кость к середине шеи. Теперь нам надо выделить вершины, которыми будет управлять данная кость. Иногда нахождение некоторых вершин требует изрядной сноровки, и приходиться использовать различные виды, «бегать глазами по рёбрам» от одной вершины до другой, а иногда даже выбирать вершины наугад, а затем исключать ненужные.
Выделив вершины, удостоверьтесь, что нужная кость тоже выделена, и нажмите кнопку Пересвязать вершины (п. 1 на 1.7), именно пересвязать, так как пока все кости были автоматически привязаны к исходной кости, в нашем случае это Bone_Root.
Заметьте, тип объекта изменился на кость , а количество связанных вершин теперь выражается натуральным числом, отличным от нуля (п. 2 на 1.7). И немного об индикации вершин: чёрными становятся вершины, непосредственно привязанные к выделенной кости (а когда кость не выделена, её имя отображается в "Списке костей, влияющих на выбранные вершины" на правой панели Mdlvis), а серыми – вершины, зависимые от выбранной кости посредственно, т. е. через другие дочерние кости-посредники.
1.7Примечание: если вершины оказываются бесхозными, т. е. не присоединены ни к одной кости, иногда Mdlvis автоматически создаёт кость bone_null и привязывает к этой кости бесхозные вершины.
Переименуем нашу кость в соответствующее ей название: Bone_Head.
Теперь создадим кость, отвечающую за торс. Согласитесь, немного неудобно постоянно после создания кости двигать её из нулевых координат, к счастью, есть возможность избавиться от этого неудобства. Для этого, мы сначала выделим нужные вершины, а потом уже создадим кость. Она появится в середине скопления точек, но может и отклониться в сторону области, где вершин ощутимо больше.
Создание кости после выделения вершин (п. 1) и место образования новой кости (п. 2):
1.8Теперь пересвяжем выделенные вершины с костью, передвинем её в место сгиба (область пресса) и переименуем в Bone_Chest.
Примечание: названия Bone_Head и Bone_Chest очень важны, т. к. некоторые триггеры используют кости с таким названием.
Если бы мы сейчас перешли к анимированию, то обнаружили бы, что при перемещении/повороте/масштабировании кости отвечающей за торс, все вершины, зависящие от Bone_Head даже не шелохнутся, хотя должны, ведь анатомически голова присоединена к туловищу шеей и зависит от его перемещения.
Исправляется это созданием зависимости одной кости от другой. Для того, чтобы сделать кость Bone_Head зависимой от Bone_Chest, иначе говоря, сделать кость Bone_Head дочерней Bone_Chest, выделим Bone_Head и используем инструмент "Связывание объектов" (п. 1 на 1.9). Выберите кость, к которой вы прикрепляете будущую дочернюю кость (п. 2 на 1.9) и нажмите кнопку "Завершить связывание" (п. 3 на 1.9). Теперь кость Bone_Head (дочерняя) привязана к Bone_Chest (родительская), т. е. будет в первую очередь повторять все движения родительской кости, например, при повороте туловища на 90 градусов, голова будет глобально повёрнута на столько же градусов, но относительно туловища своё положение не изменит.
Определить привязанность кости достаточно просто, жёлтыми кубами отображаются дочерние кости (п. 4 на 1.9), а чёрными – родительские (п. 5 на 1.9).
1.9Теперь для вас не составит труда оснастить остальной скелет вашей модели, но помните несколько важных правил:
И один совет: пока не создавайте точки крепления (аттачи), они могут мешать во время создания анимаций, а детальнее мы разберём их в конце статьи.
Также, вы можете проверять правильность прикрепления вершин и скелетных связей на тестовых (лучше однокадровых) анимациях, если вы уже знакомы с редакторами "Анимки" и "Движение" (1.10).
1.10Ещё следует отметить такое свойство объектов, как "Синфазность". Поставив флажок с таким названием, вы делаете объект синфазным, т. е. постоянно повёрнутым "лицом" к игровой камере. Этим самым "лицом" определяется поверхность, обращённая в положительную сторону координат по оси X:
» Окно "Иерархия"
Я думаю, немного информации об этой опции не помешает.
По команде "Вид\Иерархия (H)" можно вызвать окно "Иерархия" (1.0.1). В нём отображаются все кости и другие объекты скелета (п. 1 на 1.0.1). Чтобы видеть собственно их иерархию, нужно поставить галочку в соответствующем поле, после этого слева от иконок объектов появляются иконки папок (п. 2 на 1.0.1), открытая папка показывает родительскую кость с нижележащими дочерними, а закрытая, соответственно, кость без выпадающих дочерних (п. 3 на 1.0.1). Открывать/закрывать папки можно нажатием, как ни странно, кнопки "ОК" внизу окна или двойным кликом левой кнопкой мыши по объекту.
1.0.1Судя по всему, окно "Иерархия" еще не доработано Алексеем, неудобно и мало чем полезно для редактирования скелета, так как единственное, что в нём можно сейчас сделать – это переименовать объект, и то при наборе текста горячие клавиши остаются активны, т. е. при написании, например, буквы "т" ввод текста прекратится, и на модели отобразятся нормали. Но это моё субъективное мнение. Полнофункциональным аналогом такой иерархии является Редактор узлов в War3 Model Editor. Вот, какой скелет получился у меня:
1.11В нём 42 кости и 1 помощник.
Связи между костями можно просмотреть, используя команду:
1.12На этом оснастку скелета можно считать законченной.
Этап II: костное анимированиеТеорияС чего начать этот важнейший этап в становлении модели? С кнопки "Создать" скажут многие и будут правы, но это уже практическая часть анимирования, мы же начнём с продумывания и представления анимаций в своей голове, и вне её, хотя многие опытные моделлеры, умеющие работать с анимациями делают это прямо во время основного процесса, не отвлекаясь от создания представляемого.
В первую очередь подумайте над концепцией анимаций, их характерности, необычности или наоборот, похожести на какие-либо другие. Может быть, ваш персонаж будет двигаться как ветер, а может лениво переставлять лапы? Знаете только вы. Попробуйте обрамить эти представления рамками анимаций WarCraft'а, а если вы еще и хорошо рисуете, можете нарисовать эскизы каких-нибудь моментов движения. Продумайте время каждой анимации, особенности движения костей, частиц, всего реализуемого, что только взбредёт в голову, и соедините в целостную картину.
Бывает, что представить анимацию в окне того самого Mdlvis'а довольно сложно, тогда, если вы делаете гуманоида, можно попробовать проверить представляемые анимации на самом себе, можно даже перед зеркалом, отметить положение собственных костей, а если под рукой есть секундомер, то и точно отсчитать время всей анимации и каждого движения в отдельности.
Но помните, что как у WarCraft'а, так и у Mdlvis'а есть определённые ограничения, и не уходите слишком далеко от суровой игровой реальности.
Получилось? Представили? Теперь немного о технической части.
Анимации можно разделить на 6 типов: костные анимации, анимации поверхностей, анимации материалов, анимации текстур, анимации света и частиц. Последние мы разбирать не будем, так как это отдельная большая тема, по которой на нашем сайте есть статьи ().
Последние три типа можно создавать и редактировать только в War3 Model Editor, анимации поверхностей можно создавать и в Mdlvis’е, но это довольно неудобно, а костные анимации наоборот, можно сравнительно без труда делать в Mdlvis'е, в то время как w3me располагает лишь текстовым средством для установки положения костей в пространстве.
Теперь перейдём к практике.
ПрактикаА нашу практику мы начнём с создания костных анимаций. Затем перейдём к поверхностям, материалами и закончим разбором анимацией текстур и света. Параллельно я буду рассказывать о некоторых возможных багах на определённых стадиях анимирования. Если вы что-то не поймёте или захотите посмотреть, что на этих этапах получалось у меня, можете скачать из вложений архив со всеми резервными копиями моделей, используемых в этой статье.
Костная анимация (15-30)Пожелаем себе удачи в этой нелёгкой части и перейдём в Редактор анимаций (F3) на вкладку Анимки.
Изменения интерфейса состоят в замене координат и инструментов редактирования настройками анимации (п. 1 на 2.1) и в появлении линейки кадров (п. 2 на 2.1).
Рассмотрим характеристики анимации. В выпадающем меню "Текущая анимация" (п. 3 на 2.1) отображаются все имеющиеся костные анимации, как локальные, так и глобальные. Локальным анимациям в отличие от глобальных можно задавать имена, глобальные же именуются номером кадра, являющегося последним в анимации. Когда глобальная анимация выбрана, её название выделяется красным цветом.
Далее идут параметры анимации:
Теперь рассмотрим линейку кадров:
2.1Если вы помните, в этой статье описывается работа с двумя программами: Mdlvis и War3 Model Editor. Что ж, теперь разберём те же характеристики, но на примере второй программы.
Чтобы работать с характеристиками анимаций, в w3me существует два "менеджера": Менеджер последовательностей (п. 1 на 2.2), отвечающий за характеристики локальных анимаций, и Менеджер глобальных последовательностей (п. 2 на 2.2), отвечающий, соответственно, за характеристики глобальных анимаций. То есть, в отличие от Mdlvis’а, здесь работа с локальными и глобальными анимациями разделена.
2.2Перейдём в Менеджер последовательностей. Здесь мы видим список имеющихся анимаций. Редактировать их характеристики можно, кликнув по имени нужной анимации два раза левой кнопкой мыши или кликнув один раз правой кнопкой и выбрав пункт "Редактировать".
Теперь вы увидите средних размеров окно, имеющее в себе ряд характеристик.
Для того, чтобы работать с характеристиками глобальных анимаций перейдём в Менеджер глобальных последовательностей.
2.3В War3 Model Editor’е, в отличие от Mdlvis’а, глобальные анимации называются случайными кодами с префиксом "GlobalSequence" , которые при каждом запуске программы меняются (п. 8 на 2.3).
Характеристика у "глобалок" только одна – Длительность (п. 9 на 2.3). Просмотр анимаций в w3me происходит через Контроллер анимации:
У такого контролера есть как ряд достоинств, так и ряд недостатков.
Поговорим о достоинствах, во-первых, этот контроллер позволяет проигрывать анимации в 3-х разных режимах: Default Loop (Стандартный повтор), Always Loop (Постоянный повтор) и Never Loop (Без повтора). Стандартный повтор основывается на Однократности/Цикличности анимации, принцип действия остальных понятен из названия. Недостатки же состоят в том, что никак нельзя регулировать скорость анимации (в Mdlvis’е для этого есть МКИ), и остановить аниму тоже не выйдет. Хотя я-таки нашёл хитрый способ: если нажать во время проигрывания анимации клавишу Alt, то произойдёт переход в главное меню, и проигрывание анимации остановится, правда покрутить модель вы не сможете: в таком режиме активны только клавиши стрелок, Enter и Esc. Ну и еще один недостаток в отсутствии линейки кадров и невозможности по ней перемещаться.
На этом часть ознакомления с интерфейсом работы с анимациями мы закончим и перейдём к созданию нашей первой "анимки" в Mdlvis’е.
Откроем нашу модель, и перейдём в Редактор анимаций (F3).
Первой анимаций у нас будет традиционно Stand. Нажмите на кнопку Создать и переименуйте вашу анимацию. Теперь уберём все лишние галочки, так как для анимации Stand нам не понадобится ни однократность, ни редкость, ни скорость движения. Установим интервал кадров. Важно: никогда не используйте нулевой кадр в костных анимациях! В этом кадре формируется скелет, и если делать анимацию с него, могут возникнуть серьёзные проблемы в Редакторе скелета, например, двоякость кости: выделяете её в одном месте, а она оказывается в совершенно ином. Однако глобальные анимации являются исключением.
Я взял интервал с 1000 по 4000 кадр.
Важно: 1 секунда = 1000 кадров.
Теперь перейдём на вкладку Движение. На экране снова отобразятся кости и прочие объекты, при этом внизу осталась линейка кадров, и изменились инструменты редактирования. Осталось только выделение, перемещение, вращение и масштабирование. Именно с помощью них мы и будем анимировать нашу модель.
Перейдём в начальный кадр и начнём устанавливать положение всех костей модели. Вот, что получилось на этом этапе у меня:
2.4Первым делом при создании новой анимации следует установить начальный и конечный (если вы уже определились, что в нём будет) КК.
Используем команду "Копировать кадр" (Кадры\Копировать кадр (C)), перейдём в 4000-ный кадр (у вас скорее всего свой конечный) и вставим кадр (Кадры\Вставить (Ctrl+V)). Очень сильно помогает во время анимирования возможность отображать КК только одного контроллера выделенной кости. Управлять этим можно с помощью галочки "Высветить КК" (2.5), но поставить эту галочку вы сможете только тогда, когда будет выделена нужная кость и активен один из «инструментов» (точнее – контроллеров: Перемещение, Вращение, Масштабирование), а также кость должна иметь как минимум 2 ключевых кадра связанных с использованием соответствующего инструмента (контроллера).
2.5Следите за начальным и конечным КК у всех костей, которые вы вводите в анимацию! Когда они задействуются в первый раз, велика вероятность, что якобы установившейся (т. е. выделившийся синим) начальный или конечный кадр какой-нибудь кости, после перехода в другой и произведения действия над костью, оказывается "пустышкой" и его нужно создавать снова.
Итак, закончив с начальным и конечным кадрами, перейдём в середину линейки кадров (у меня это кадр 2500) и изменим положение костей на нечто, соответствующее глубокому вдоху (хотя может и выдоху, как пожелаете).
Совет: вводите в анимацию как можно больше костей – это сделает анимацию более реалистичной и жизненной, но будьте внимательны: следите за ключевыми кадрами этих костей. Порой мелкое движение в середине анимации, когда кость получает контроллер впервые, остаётся незамеченным в начальном и/или конечном кадре, в связи с чем, нужного движения не происходит.
Вот такое положение костей получил я:
2.6Теперь просмотрите анимацию. Багов скорее всего не будет, но даже если вы сделали всё правильно, могут быть резкие сдвиги костей сразу после (и/или до) определенных КК. Можно попытаться удалить кадр и создать/скопировать заново, но часто это не помогает, тогда достаточно скопировать КК, возле которого образовался сдвиг, в кадр, в котором этот сдвиг происходит.
Теперь проверим анимацию в w3me. Тут-то и вскрываются большинство багов. Так уж сложилось, что Mdlvis отображает далеко не все возможные баги, и w3me здесь как настоящий "спаситель", хотя и он, бывает, оказывается неправ.
2.7Один из кадров (у меня это кадр 1000) почему-то оказался после другого (у меня 2500), хотя второй должен явно следовать после первого. Это и есть причина бага. Просто поставьте кадры на свои места:
И нажмите ОК.
Внимание: при использовании War3 Model Editor 1.05 в окне редактирования узла никогда не нажимайте кнопку Поворот! Все значения будут сброшены, даже если вы нажмёте Отмена. Хотя с вращением багов почти не бывает, за исключением использования сплайновой интерполяции контроллера, но и они случаются, для работы с ними используйте w3me 1.07. В этой версии баг со сбросом значений вращения отсутствует. Подробнее про этот баг.
Теперь сдвиг должен исчезнуть. Если нет, то либо этот баг присутствует в движении другой кости, либо ошибка заключается в другом (см. ситуации выше).
Если подобные баги не исправляются никаким образом (а такое бывает), проверьте модель в World Editor'е или непосредственно в игре – возможно, багов не будет, т. е. причиной его является несовершенность w3me, всё-таки он не WarCraft III.
Что ж, теперь создание вашей первой анимации можно считать законченным, поздравляю!
На этапе создания анимации Stand мы фактически использовали "технику уточнения", только в очень лёгком примере. Ведь мы сначала установили начальный и конечный кадр, а потом перешли в середину между ними и изменили положение костей, а я к тому же потом переходил в 1/4 и 3/4 линейки кадров, чтобы уточнять положение костей плаща. Это довольно распространённая техника, заключающаяся в уточнении положения костей, между определёнными КК, для более точных и верных движений, она также описывается в статье, автором которой является KO3bMA, вместе с описанием распространённых багов и способов их решения.
Но часто эта техника не подходит, если необходимо описать динамичную анимацию, которая придумывается "в движении", т. е. когда довольно сложно представить позицию костей в ключевых кадрах, или, к примеру, конечный кадр не совпадает с начальным (Death), и проще создавать кадр за кадром, чем уточнять их позиции (но помните о комбинировании техник, т. е. после создания КК таким образом, можно уточнять кадры между ними). Такую технику можно назвать "поступательной".
Эти две техники являются основополагающими, и, в принципе, только они и используются «в массах», хотя нигде не называются теми названимями, которые дерзнул дать им я =)
Воспользуемся "поступательной" техникой и создадим еще одну анимацию, Stand 2.
Здесь движения техножреца будут сложнее, чем в предыдущей анимации, они будут включать в себя поворот туловища вправо почти на 80⁰ с отставкой правой ноги и поднятием правой руки (без учёта мелких движений), секунду осмотра и возвращением в исходное положение.
Я рассчитал примерную длительность анимации для моей модели - 5 секунд, и задал интервал кадров от 5000 до 10000.
Сразу скажу, что приблизительные расчеты времени могут оказаться не совсем точными, и не стоит пытаться растянуть движения на всю длину линейки кадров, я, например, во время создания этой анимации не раз просчитывался со временем и двигал уже созданные кадры. В итоге получилось, что я просчитался с временем анимации на 2 секунды.
Создаём КК.
http://img819.imageshack.us/img819/8200/scrn21.jpghttp://img156.imageshack.us/img156/9141/scrn22.jpg
2.8 | 2.9WebSter добавил:
Наверняка многим не понравится неестественная резкость движений, получающаяся возле КК, если там требуется плавность, можно попытаться её исправить, увеличивая число уточняющих КК, но можно пойти другим путём – изменить Тип контроллера, или, иначе говоря, Интерполяцию (Тип Интерполяции). Тип контроллера (Тип Интерполяции)Контроллер анимации - набор КК, отвечающих за какое-то единственное
анимируемое свойство, например, вращение или видимость. Я уже говорил о нём, когда рассказывал про отображение КК определённых объектов. Тип контроллера (интерполяция) определяет вычисление промежуточных значений между КК. Его можно менять. Для WarCraft III доступны 4 типа контроллеров:
Но тем не менее, работать с ней можно, и далее я расскажу – как.
В некоторых моделях довольно сложно наглядно проследить разницу типов контроллеров, и поэтому, я создал модель простых часов с маятником. Ведь именно на маятнике с минимумом сложностей можно увидеть действие каждой интерполяции.
Заранее замечу, что во вложениях в отдельном архиве (Interpolations.rar) есть 4 модели этих часов с суффиксами, соответствующими интерполяции, которую я использовал для движения маятника, а также модели BezierEllipseOrb.mdx и HermiteEllipseOrb.mdx, в которых показаны примеры Сплайнового и Безье- перемещения, их я буду использовать далее для углублённого изучения данных типов контроллера. Проверять их нужно в редакторе или игре! Так как Mdlvis не отображает некоторые баги, w3me может неверно работать со Сплайновой интерполяцией (в контроллере вращения) и только WarCraft покажет истинное положение дел, например то, что тип вращательного контроллера Безье не работает в игре (редакторе). Хотя, и в w3me и в Mdlvis интерполяция Безье отображается совершенно верно (если нет багов в КК, разумеется).
Я думаю, действия ступенчатого и линейного типов не нуждаются в больших подробностях, т. к. их просто нет, всё описано выше (багов, связанных именно с характерностью интерполяции, в них не наблюдалось), а вот о Безье и сплайновой интерполяциях мы поговорим подробнее.
Безье (Bezier)Кривая Безье очень часто используется в компьютерной графике, распространяясь от векторных редакторов до создания сплайнов (как статических, так и для анимирования) в приложениях трёхмерного моделирования. И WarCraft III творение Пьера Безье не обошло стороной.
Столкнувшись с ним в Mdlvis'е не сразу и понимаешь, как оно действует на анимацию – никаких настроек не появляется, а анимация остаётся такой же, как с и линейной интерполяцией. Видимо, Алексей еще не успел внедрить в свою утилиту эти настройки, но я, углубившись в эту тему, нашёл способ настраивать этот тип контроллера вручную и с высокой точностью. Разговор пойдёт о контроллере перемещения, потому что, как я уже говорил, Безье-вращение в игре не работает.
Главная особенность Безье для анимации в WarCraft III - сглаживание углов на линии, по которой мы перемещаем объект, и «выпуклость», т. е. углы сглаживаются не вовнутрь, а наружу, меняя саму линию, а не только её участок рядом с углом
В w3me параметры Безье в каждом КК объекта описываются 3 значениями:
Те, кто работал со сплайнами в 3DS Max, вполне могут провести параллель с кривыми Безье, которые широко используются в нём. Направляющие (2 и 3 на 2.0.1) – это те самые две жёлтые линии с зелёными вершинами на концах. Именно они определяют характер кривой, проводимой между входящей направляющей одной вершины и выходящей направляющей другой.
Рассмотрим их подробнее. Я в 3D Studio Max создал 2 сплайна – ромб, характеризующий движение объекта по своему периметру четырьмя различными КК при линейной интерполяции и тот же ромб, вершинам которого я поставил тип Bezier Corner (входящая и выходящая направляющие независимы друг от друга, как в WarCraft'е), и, настроив их, превратил его в овал. Заметьте, вершин так и осталось 4, т. е. и в игре, движение по периметру такого овала будет тоже характеризоваться четырьмя КК.
Пункт 1 на 2.0.1 – это наша верхняя вершина. При виде спереди справа от неё будет InTan (п. 3 на 2.0.1), т. е. входящая направляющая (не забывайте, что мы рассматриваем её для WarCraft'а, и такое название вовсе не гарантировано в других областях использования кривой Безье), а слева OutTan (п. 2 на 2.0.1) - выходящая направляющая. Двигаясь против часовой стрелки, мы придём во входящую направляющую следующей вершины, т. е. везде "In" стыкуется с "Out" (по часовой стрелке) или "Out" с "In" (против часовой стрелки).
2.0.1Как же оно действует на анимацию? Очень просто. Представим этот сплайн в виде траектории движения, где вершины – контрольные кадры перемещения (благо в 3DS Max можно без проблем использовать сплайн как траекторию). И перейдём в "Graph Editors/Track view – Curve Editor…", там найдём те параметры, которые мы анимировали, и увидим кривые (у меня это кривые перемещения по оси X и по оси Z (для WarCraft'а роль оси X будет исполнять Y)).
Вот, что мы увидим с обычным ромбом (линейная интерполяция):
2.0.2А вот, что с овалом, полученным из ромба благодаря Безье:
2.0.3Разумеется, углубляться в подробности этих графиков я не буду – всё-таки не о них статья, но я думаю, разница очевидна. Безье позволяет создать из ромба овал, из пары ромбов – восьмёрку и т. д., благодаря такой интерполяции можно делать как жёсткие, так и мягкие движения, сложные траектории, и всё это, обходясь минимумом КК.
Хорошо, с определением типа контроллера мы разобрались, и теперь, думаю, гораздо проще понять его работу и настройки для WarCraft III.
Я не стал придумывать какую-то особую модель и просто взял одну их стандартных игровых сфер с небольшим «хвостом» из частиц, чтобы лучше прослеживать траекторию. Повторив тот самый ромб уже в Mdlvis'е, вот, что мы увидим с линейной интерполяцией (для наглядности я добавил координаты точек и саму траекторию движения на скриншот):
2.0.4Мы сразу видим углы, причём довольно резко выглядящие при анимации. Увидеть это можно, установив типом контроллера линейный, в приложенной модели.
Теперь перейдём в Mdlvis, в Редактор анимаций на вкладку Движение, выберем кость, которую двигали и поставим тип контроллера перемещения – Безье. Пока никаких изменений заметно не будет (потому что направляющие имеют координаты, идентичные вершинам).
И вот сейчас мы подходим к самому важному и интересному.
Для настройки InTan и OutTan нам необходимо узнать координаты направляющих, и здесь, как ни странно, нам придёт на помощь Photoshop (или любой другой редактор, работающий с кривыми Безье, даже MS Word). Установив расположение анимируемой кости во всех КК, я прямо на скриншоте из Mdlvis'а провёл между ними линии, характеризующие траекторию движения (ромб), и, используя инструмент Перо(п. 1 на 2.0.5), провёл линию между двумя точками ромба (верхней и левой), таким образом создав ту самую кривую Безье, которая и должна получиться! Примечание: в настройках инструмента Перонужно выбирать характер "Пути" (п. 2 на 2.0.5) и тип "Перо" (п. 3 на 2.0.5), а не "Простое перо".
Изменять направляющие можно инструментом Преобразование точки (п. 4 на 2.0.5), как вместе (при нажатии ЛКМ на вершине и движения в разные стороны, не снимая нажатия), так и по отдельности (выделив сами направляющие).
После того, как вы сделали нужную вам кривую, просто на глаз прикиньте координаты направляющих (их точек), у меня это были координаты по осям Y и Z. Если вы затрудняетесь это сделать, можно попробовать создать временные вершины на этих местах прямо в Mdlvis'е и посмотреть их координаты (2.0.6)
http://img716.imageshack.us/img716/1801/scrnbezier05.jpghttp://img203.imageshack.us/img203/6412/scrnbezier08.jpg
2.0.5 | 2.0.6В принципе, похожие операции можно было произвести в 3DS Max'е, но для этого пришлось бы переносить изображение из окна Mdlvis'а в Макс, потом строить сплайн и пр. На мой взгляд, с Photoshop'ом всё можно сделать быстрее и удобнее.
Я получил координаты { 0, -29, 60 } для OutTan верхней вершины и { 0, -35, 28 } для InTan левой.
Итак, узнав координаты направляющих, нам нужно внести их значения в КК анимируемой кости. Для этого откроем w3me, перейдём в Редактор узлов, затем найдём нашу кость и кликнем ПКМ, выбрав из контекстного меню пункт Редактировать узел. Теперь нажмём кнопку Перенос. Далее ищем требуемые КК (т. к. кривая строится между двумя точками) и в строках с InTan одного кадра и OutTan другого вводим координаты, которые мы определили ранее. Смело жмём ОК и любуемся (если всё сделано правильно) на получившуюся дугу. Заметьте, именно ту дугу, которую мы строили в 3DS MAx’е и Photoshop’е.
2.0.7Основываясь на полученных знаниях, я уверен, вы без труда определите координаты оставшихся вершин, а в случае с ромбом их легко просто «угадать».
Важно: значения начального и конечного КК должны точно совпадать! Не являются исключением и значения координат направляющих.
Установив все координаты направляющих для всех КК, можно увидеть окончательный результат – тот самый овал, который мы задумывали изначально. 2.0.8По сути, эту интерполяцию можно использовать везде (кроме Вращения), в анимации частиц, текстур, света, цвета и прочего, но принцип остаётся один и тот же, хотя рассчитать значения направляющих иногда бывает очень сложно (бывает, даже представить их не удаётся), тогда часто помогает занимательный "метод тыка".
На этом наше изучение Безье будем считать законченным.
Сплайновая (Hermite)Такой тип контроллера строится на основе сплайна Эрмита, который я, к сожалению, пока, кроме WarCraft'а, нигде не встречал, и то, как у него рассчитывается кривая, как она зависит от направляющих, мне в большей степени непонятно. И узнать принцип его построения без редактора кривой Mdlvis’а мне выяснить, увы, не удалось, однако, как раз этот редактор кривой и спасает положение. Единственная его проблема – неотображаемость в некоторых кадрах (в 90% случаев в конечном, бывает и/или в начальном).
И еще один главный плюс этой интерполяции для WarCraft’а – это то, что она работает для контроллера вращения. Теперь разберём её основные свойства и пути настройки в Mdlvis’е.
Интерполяция сплайном Эрмита очень похожа Безье, но отличается менее выраженной выпуклостью, может быть даже сглаживанием углов, настройка в Mdlvis’е проходит в определённых границах, за них вы сможете выйти только вручную, с помощью w3me (1.07 для вращения), ну тут флаг вам в руки… Итак, чтобы настроить кривую в области определённого КК определённой кости и контроллера вам необходимо: выбрать кость (п. 1 на 2.0.9), выбрать нужный КК (п. 2 на 2.0.9), затем выбрать нужный контроллер (п. 3 на 2.0.9) и определить его тип (п. 4 на 2.0.9), установив выбор на пункте Сплайновый. Теперь у вас должна отобразиться вкладка Параметры кривой.
» Если этого не случилось…
…вы сможете «заставить» её отображаться следующим способом:
Интерфейс вкладки Параметры кривой (п. 5 на 2.0.9) состоит из четырёх частей: график кривой (п. 6 на 2.0.9) и три параметра, определяющие её вид - Натяжение (п. 7 на 2.0.9), Целостность (п. 8 на 2.0.9) и Наклон (п. 9 на 2.0.9).
2.0.9Экспериментальным путём я выяснил основные характеристики различных конфигураций Натяжения, Целостности и Наклона кривой. Я использовал только крайние и нулевые значения показателей.
Одиночные сочетания
Сочетание Натяжение-Целостность
Сочетание Натяжение-Наклон
Сочетание Целостность-Наклон
Сочетание Натяжение-Целостность-Наклон
В приложенной модели HermiteEllipseOrb.mdx вы можете увидеть и даже потренироваться с различными конфигурациями параметров сплайна для контроллера движения с уже знакомым нам овалом и сферой.
Но вернёмся к забытой нами модели маятниковых часов, ведь именно о них я говорил в начале раздела об интерполяции. На их примере вы сможем убедиться в работоспособности и качественности сплайнового типа для контроллера вращения.
Сделав анимацию маятника с помощью линейной интерполяции, я меняю её тип на сплайновый. И тут же встречаюсь с проблемами в начальном и конечном кадре, но в данном случае она исправима довольно простым путём. Так как в анимации происходит 3 движения маятника, одно из них приходится на центр анимации, и, настроив его (Натяжение: -100; Целостность: 0; Наклон: -50) я через w3me 1.07 копирую значения координат вращения, InTan и OutTan начальному и конечному кадру, при этом меняя их значения на противоположные, тем самым получая симметричную кривую, т. е. именно то, что мне и нужно (2.0.10).
Но вполне можно воспользоваться и тем методом, что я приводил выше.
2.0.10Теперь можно просмотреть анимацию сначала в w3me и Mdlvis’e, а затем в WarCraft 3 World Editor.
Но следует помнить, что со сплайновым типом контроллера тоже сопряжены баги, и часто исправить их бывает очень трудно.
Использование сплайновой интерполяции, аналогично другим, доступно почти для всех контроллеров, позволяя сделать любую анимацию плавной и живой.
Здесь наше изучение интерполяций заканчивается, я надеюсь, что смог грамотно посвятить вас в это непростое дело и что вы будете хотя бы иногда пользоваться чем-то большим, нежели Linear.
Глобальные анимацииТеорияЧитая раздел об интерполяции, вы наверняка заметили, что в использовавшейся модели часов в анимации Stand нет ни одного КК. Странно, не правда ли? К тому же присутствуют еще 3 анимации с длительностью в одну, десять и сто секунд, в которых показаны какие-то отдельные движения. Это и есть глобальные анимации.
В самом начале теоретической части я рассказывал о разнице между локальными и глобальными анимациями. Как вы помните, так называемые "глобалки" проигрываются постоянно и их никак нельзя выключить или остановить. Их может быть много и при должной компоновке можно получить нужный результат куда проще и менее затратно, чем с локальными.
Как, например, и сделано в часах. Чтобы стрелки двигались более менее реалистично, необходимо, чтобы часовая двигалась намного медленнее минутной. У меня - в 10 раз, а маятник вообще двигается всего одну секунду в то время, как часовая стрелка - сотню. Без глобалок пришлось бы устанавливать маятнику 200 КК, минутной стрелке как минимум 50. Настоящее мучение ради каких-то часов. А благодаря глобальным анимациям всё можно сделать с минимумом проблем. Один такт для маятника, один оборот для минутной стрелки и один - для часовой. После этого, всё скомпонуется в Stand'е любой длины и будет двигаться постоянно, независимо от остальных аним.
Но стоит помнить о некоторых особенностях глобальных анимаций:
ПрактикаМой техножрец тоже не обойдётся без глобальных анимаций. У него будет постоянно вращаться бур на механической руке, а в Death, этот бур будет скрыт и заменён на неанимированный.
Здесь статья прерывается
Буду рад выслушать конструктированную критику и просто ваши отзывы, ну и относительно опроса тоже) Отредактировано WebSter, 24.01.2011 в 16:05. |
![]() |
#1
+16/−3
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
Это всё неудобно в висе и вар3ме |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
reALien
![]() ![]() offline
Опыт:
29,211Активность: |
Молодец, до этой статьи я применял эрмиты и безье только в анимах партиклов и материалов, теперь буду знать, как иначе ^^
Познавательно) reALien добавил: WebSter: Это, кстати, бывает и с линейными тоже |
![]() |
#3
+1/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
ScorpioT1000, ну а что ж поделать, это ведь не макс reALien, спс) ну у них всё-таки иной характер: их можно исправить добавлением новых кадров, а в сплайнах этим только усугубишь ситуацию. |
![]() |
#4
+1/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
Сказочник
![]() offline
Опыт:
39,429Активность: |
Черт, как говорится, "многобукаф"... На прочтение этого может уйти час, а то и больше...
Добавлено: Не, ну это я преувеличил... Отредактировано Сказочник, 24.01.2011 в 18:46. |
![]() |
#5
+0/−1
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
Сказочник, за 5 минут всё это не объяснишь =) |
![]() |
#6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
XOR
![]() offline
Опыт:
38,159Активность: |
не пробовал еще делать, но уже видно крутода. Куда еще больше?=0 Вбазу) |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
lKS
Grunge face
![]() ![]() offline
Опыт:
10,442Активность: |
WebSter, статья очень хорошая пусть и мудреная. Я даже для себя кое-что открыл... |
![]() |
#8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
Сказочник
![]() offline
Опыт:
39,429Активность: |
Цитата:
Дополню: для того чтобы открыть модель mdlvis выходит из редактора анимаций в редактор вершин - именно тогда происходит баг, а не при открывании. |
|
![]() |
#9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
Сказочник, хорошо, учту. Просто сейчас редактировать не удастся, так как ограничение 50000 символов не даёт отредактировать пост... а Зибада говорил, что если в двух постах будет в сумме больше 50к символов, то они не объединятся =О X, спс, но, как видишь, большинство хочет больше)) хотя там в принципе где-то 20-30% осталось... да проблема даже не в том, чтобы дописать, а в том, чтобы довести до ума юнит-пример, мне ж его нужно полностью заанимировать, а то непрезентабельно) lKS, спасибо) |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
Сказочник
![]() offline
Опыт:
39,429Активность: |
Вот блин, половина статьи - про типы интерполяции... Можно их и в отдельную статью...
|
![]() |
#11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
Мм... ну вообще я подразумевал это как подстатью. Да и целью я ставил именно "всё и сразу" ) впрочем, подумаю |
![]() |
#12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
reALien
![]() ![]() offline
Опыт:
29,211Активность: |
Сделай статью в несколько глав, как у Шурика. И с линейными далеко не всегда помогает вставка кадров, иногда по неизвестным причинам на определенном отрезке линейки идут паразитные движения костей и исправляется это только созданием анимации в другом промежутке. Мне это запороло одну модель, когда я еще учился и не понимал в чем дело :'( |
![]() |
#13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
|
![]() |
#14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
Master_chan
Полуночный командир
![]() offline
Опыт:
15,660Активность: |
статься хорошая, но напоминает "Как сделать сферу в mdlvis"
ну ты понел |
![]() |
#15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
reALien
![]() ![]() offline
Опыт:
29,211Активность: |
WebSter:
Межкадровый интервал - аббревиатура вполне определенная) |
![]() |
#16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
Red XIII
![]() ![]() offline
Опыт:
3,935Активность: |
Лично я учился анимации на основе анимации близзовских моделей - сперва смотришь, как у них, учишься делать так же, затем уже можешь делать новые анимации сам.
И никакие статьи я не читал. Сперва создавал неанимированные декорации, затем анимированные (вроде домов, которые при смерти сквозь землю проваливаются и пропадают), потом использовал в качестве базы здания и юниты обычные изменяя немного анимки, а в конце - уже сам делала их. |
![]() |
#17
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
Master_chan, не-а, не понел =\ намекаешь, что она ненужная? reALien, вот и отлично, теперь будем знать =) Red_XIII, все так учились, это ж вроде первая статья на эту тему |
![]() |
#18
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
PUVer
За GW!
![]() ![]() offline
Опыт:
126,929Активность: |
Просто клад для начинающего моделлера, всё не осилил, но обязательно прочту))
|
![]() |
#19
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
![]()
WebSter
Товарищ Mechanicus
![]() ![]() offline
Опыт:
86,111Активность: |
PUVer, спасибо, удачи в освоении) |
![]() |
#20
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|