WebSter
Товарищ Mechanicus
offline
Опыт:
86,111Активность: |
ВНЕЗАПНО мой подарок себе на день рождения
ВведениеУже много времени я с интересом просматриваю модели наших юзеров в "Моделях для базы", и мне, собственно говоря, порядком поднадоело видеть одни и те же "варовские" анимации, прилепленные к геометрии Пересадкой Мяса. Есть, конечно, энтузиасты, которые делают некоторые анимации или их части самостоятельно, но мало у кого это получается действительно хорошо.
И, смотря на всё это, я решил написать полную и подробную статью об анимировании, так сказать, от "А" до "Я". Подготовка к работеВ этой статье я буду говорить об анимации и её аспектах, и для этого нам понадобятся только две программы:
Основная частьПредполагается, что читатель уже имеет базовые навыки работы с Mdlvis и War3 Model Editor. Если вы их не имеете, то советую прочитать соответствующие статьи на сайте.
В определённых заголовках вы можете увидеть цифры в скобках:
» Например
Практика (01-14)Они обозначают номера копий-моделей в папке «Tech-priest» из архива с примерами, приложенного к статье. Нумерация идёт в формате «v#-##», где «#.##» - является номером в диапазоне чисел, указанных в скобках.
Этап 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_Turret, которая отвечает за крутящуюся турель, как, например, в модели орудийной башни.
Если бы мы сейчас перешли к анимированию, то обнаружили бы, что при перемещении/повороте/масштабировании кости отвечающей за торс, все вершины, зависящие от 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), но поставить эту галочку вы сможете только тогда, когда будет выделена нужная кость и активен один из «инструментов» (точнее – контроллеров: Перемещение, Вращение, Масштабирование), а также кость должна иметь как минимум 1 ключевой кадр, связанный с использованием соответствующего инструмента (контроллера). Иногда нужно выделить инструмент еще раз, чтобы галочка отобразилась.
2.5Следите за начальным и конечным КК у всех костей, которые вы вводите в анимацию! Когда они задействуются в первый раз, велика вероятность, что якобы установившейся (т. е. выделившийся синим) начальный или конечный кадр какой-нибудь кости, после перехода в другой и произведения действия над костью, оказывается "пустышкой" и его нужно создавать снова.
Итак, закончив с начальным и конечным кадрами, перейдём в середину линейки кадров (у меня это кадр 2500) и изменим положение костей на нечто, соответствующее глубокому вдоху (хотя может и выдоху, как пожелаете).
Совет: вводите в анимацию как можно больше костей – это сделает анимацию более реалистичной и жизненной, но будьте внимательны: следите за ключевыми кадрами этих костей. Порой мелкое движение в середине анимации, когда кость получает контроллер впервые, остаётся незамеченным в начальном и/или конечном кадре, в связи с чем, нужного движения не происходит.
Важно: не следует вращать кость в одном КК более чем на 90 градусов! Иначе вращение будет рассчитываться неверно, и вместо вращения в одну сторону, ваша кость может начать крутиться в другую.
Вот такое положение костей получил я:
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), установив выбор на пункте Сплайновый. Теперь у вас должна отобразиться вкладка Параметры кривой.
» Если этого не случилось…
…вы сможете «заставить» её отображаться следующим способом:
Вообще отображение Параметров кривой зависит от наличия соседних КК: если они есть, то Параметры кривой отобразятся, если нет – Mdlvis не высветит их. Так что можете использовать любые альтернативы моему способу. Интерфейс вкладки Параметры кривой (п. 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. |
17.08.2011, 01:47 | #41
+2/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
WebSter
Товарищ Mechanicus
offline
Опыт:
86,111Активность: |
Глобальные анимацииТеорияЧитая раздел об интерполяции, вы наверняка заметили, что в использовавшейся модели часов в анимации Stand нет ни одного КК. Странно, не правда ли? К тому же присутствуют еще 3 анимации с длительностью в одну, десять и сто секунд, в которых показаны какие-то отдельные движения. Это и есть глобальные анимации.
В самом начале теоретической части я рассказывал о разнице между локальными и глобальными анимациями. Как вы помните, так называемые "глобалки" проигрываются постоянно, и их никак нельзя выключить или остановить. Их может быть много, и при должной компоновке можно получить нужный результат куда проще и менее затратно, чем с локальными.
Как, например, и сделано в часах. Чтобы стрелки двигались более-менее реалистично, необходимо, чтобы часовая двигалась намного медленнее минутной. У меня - в 10 раз, а маятник вообще двигается всего одну секунду в то время, как часовая стрелка - сотню. Без глобалок пришлось бы устанавливать маятнику 200 КК, минутной стрелке как минимум 50. Настоящее мучение ради каких-то часов. А благодаря глобальным анимациям всё можно сделать с минимумом проблем. Один такт для маятника, один оборот для минутной стрелки и один - для часовой. После этого, всё скомпонуется в Stand'е любой длины и будет двигаться постоянно, независимо от остальных аним.
Но стоит помнить о некоторых особенностях глобальных анимаций:
Практика(52-53)Мой техножрец тоже не обойдётся без глобальных анимаций. У него будет постоянно вращаться бур на механической руке, а в Death этот бур будет скрыт и заменён на неанимированный.
Создадим в Mdlvis’е глобальную анимацию, нажав на кнопку «Глобальная» в Редакторе анимаций. Устанавливая интервал кадров, как вы помните, можно указывать лишь последний кадр. Для вращения бура вполне хватит 0,4 секунды, поэтому я установил длину в 400 кадров (название анимации, соответственно, поменялось на "400").
Теперь создадим необходимые движения.
Важно: не пытайтесь копировать кадры из локальных анимаций в глобальную – они не вставятся (и не должны).
3.1Следует помнить еще об одной важной вещи, относящейся как к локальным, так и к глобальным анимациям, если вы еще не знаете о ней:
Важно: не следует вращать кость в одном КК более чем на 90 градусов! Иначе вращение будет рассчитываться неверно, и вместо вращения в одну сторону, ваша кость может начать крутиться в другую.
Поэтому для вращения бура мне необходимо создать 5 КК: для 0, 90, 180, 270 и 360 градусов. Причём создавать их надо последовательно: копировать кадр, вставить его и добавить по нужной оси 90 градусов. Конечный кадр не нужно копировать с начального, так как итоговый поворот в 360 градусов интерпретируется верно, и багов не возникает.
Теперь можете полюбоваться результатом. Во всех локальных анимациях будет проигрываться то движение, которые вы создали в глобалке. При создании нескольких глобальных анимаций вполне возможно совпадение как длин, так и названий, но все они в равной степени будут компоноваться в локальных.
Важно: в War3 ModelEditor’е есть возможность связывать с глобалками все возможные анимации. Делается это в его типовом окне анимаций (3.2):
3.2На этом о глобальных анимациях мы закончим.
Возник вопрос, как же избавиться от постоянно вращающегося бура? Об этом вы узнаете далее. Анимации поверхностейТеорияВ моделлинге никак не обойтись без возможности скрывать и показывать что-либо в определённый момент времени, будь то поверхность, слой текстуры или частица. И, к счастью, всё это возможно как в Mdlvis’е, так и в w3me. Однако функционал последнего в этом отношении гораздо шире. Именно на его примере мы и разберем анимации поверхностей.
War3 ModelEditor, а в частности Редактор анимаций поверхности, позволяет изменять видимость и цвет, анимировать их, используя все возможные интерполяции. Изменение цвета действует как фильтр, где окрашивание становится сильнее при уменьшении яркости. Выбранный для фильтра белый цвет не влияет на итоговую картинку никак, так что, окрашивая таким образом поверхности, стоит помнить, что ярче или светлее их не сделать.
Но учитывайте, что совокупный эффект как настроек цвета, так и прозрачности зависит еще от материала и режима смешивания текстуры. Например, если текстура, используемая анимируемой поверхностью, имеет режим смешивания Additive, то установка черного цветового фильтра сделает данную поверхность полностью невидимой.
Практика(2.73)Итак, открыв нашу модель в w3me, сначала выберем поверхность, видимость которой необходимо изменить. Это можно быстро сделать следующим образом: зажмите Ctrl и кликните ЛКМ по поверхности прямо во вьюпорте. Поверхность мигнет черным цветом (4.1) и выделится в Редакторе поверхностей (а используемый ею материал выделится в Редакторе материалов).
4.1Запомните выделенный геосет и перейдите в:
В появившемся окне необходимо кликнуть ПКМ и выбрать из контекстного меню пункт Создать новый. Откроется следующее окно:
4.2Разберем все по порядку:
Поставив флажок "Анимирован" и щелкнув по кнопке "Цвет", вы увидите не слишком понятную для выбора цвета картину: так же, как в случае с другими контроллерами, перед вами будут строчки с текстом, в которые придется вписывать нужный цвет вручную. Причем насыщенность красного, синего или зеленого измеряется в пределах единицы… но и это еще не все! Цвета здесь расположены наоборот, т.е. не RGB, а BGR:
Но тем не менее, вписать нужный цвет не так уж сложно: достаточно "сделать" его в каком-нибудь графическом редакторе и разделить каждое число из каналов на 255. Так стандартный оранжевый цвет из Paint’а (255 127 39) для w3meбудет следующим:
(значения округлены до тысячных)
Что касается интерполяций – здесь все работает нормально, хотя w3me часто некорректно отображает анимации цвета, сделанные с помощью Сплайнового типа контроллера. Впрочем, я не вижу особой надобности именно в нем, так как Безье прекрасно справляется со своей задачей, и можно, например, сделать переход всеми цветами радуги с помощью 3-х кадров:
На этом эксперименты с цветами можно закончить, и от анимаций поверхности мы перейдем к анимациям того, что эти поверхности покрывает, – к анимациям материалов.
Анимации материаловТеорияНаверняка вы знаете, что в каждом материале может быть множество слоев с разными текстурами и типами смешивания, и можно регулировать прозрачность каждого слоя отдельно от прозрачности материала в целом, однако не каждый знает всех возможностей анимации этих слоев. Далее я расскажу и о них.
Как и в случае с анимациями поверхностей, здесь полноценно регулируется прозрачность, но совершенно новой возможностью является анимация ID текстуры, то есть можно динамически менять текстуры в материале. А уж с использованием такой особенности не соскучишься: различные элементали, имитация жидкостей и даже возможность вставить в вашу модель маленькое видео (по кадрам, естественно)! Именно последний вариант я выбрал для рассмотрения в этой статье.
Я заранее сделал простую модель деревянного телевизора, который и будет показывать все, что захочется, а вернее, все, на что будут текстуры.
5.1Так что приступим к практике!
Практика (TV_version_1.mdx)Порывшись в архивах WarCraft 3, я нашел ряд текстур, отвечающих за моргание "глаза Battle.net", и решил, что для примера они прекрасно подойдут. Путь к этим текстурам следующий:
В этой папке находятся 29 текстур, которые необходимо использовать в нашей модели, так что каждую я занес в список текстур, отчего тот слегка пополнел.
Теперь перейдем в редактор материалов и установим в нужный материал первую из необходимых нам текстур, после чего необходимо установить флажок "Анимирована" и нажать на кнопку "ID текстуры". Откроется окно с одной строчкой, где в нулевой кадр прописано определенное число: в моем случае это цифра 4, хотя у вас может быть и любое другое (далее я расскажу, как же оно определяется). Ну что ж, нам-то надо начинать с нуля: пропишем в первый кадр анимации (у меня это кадр 2000) цифру 0 и далее через каждые, например, 50 кадров, будем последовательно прописывать числа вплоть до 28.
5.2Может возникнуть вопрос, почему на изображении выше я расписал кадры до 33, но перед тем, как будет дан ответ, просмотрите анимацию, в которой вы делали смену текстур. Если у вас в модели уже были какие-то текстуры до того, как вы добавили текстуру глаза, то где-то в первых кадрах будут мелькать именно они. Все очень просто: программа с самого начала выставила цифру 4, т.к. именно это – ID первой из текстур глаза, а все предыдущие заняты другими текстурами.
Но тем не менее, бывает и так, что текстуры добавляются в разброс, и тогда их ID путаются. Чтобы узнать их номера и/или поменять их, необходимо конвертировать модель в формат *.mdl, открыть её блокнотом и найти блок, отвечающий за текстуры. В моем случае он таков:
Чтобы поменять ID текстур, нужно поменять их местами, но стоит помнить, что их следует изменить и в материалах, где эти ID используются, т.к. на них такая перестановка тоже отразится:
Теперь, после исправления недоработок этого этапа анимирования, если они все же были, конвертируем модель обратно в *.mdx и возвратимся в Редактор материалов.
К слову об интерполяциях – здесь они не имеют никакого значения, так что смело можно оставлять "None".
Примечание: наверняка вы заметили, что вне анимаций у поверхности, покрытой нашим анимируемым материалом, текстура меняется на самую первую по ID – ничего страшного, но от этого никуда не деться, корректно она отобразится только во время анимаций.
Итак, осталось лишь правильно переписать кадры – и впредь сразу начинать с верного ID – и полюбоваться получившейся анимацией. Глаз в телевизоре моргает и озирается!
5.3Ну а что если необходимо использовать импортируемые текстуры? И кадров гораздо больше. Неужели нет альтернативы? Она есть, и речь о ней, как и в целом об анимациях текстур, пойдет далее.
Анимации текстурТеорияКак же можно анимировать текстуры? Это – правильный вопрос. Ни Mdlvis, ни War3 ModelEditor не располагают возможностями для непосредственного графического воздействия на изображения, которые используются в качестве текстур. Но тем не менее Менеджер анимаций текстур в w3meесть. Так как же он работает?
На самом деле анимируется не сама текстура, а UVW-развертка, которая имеет свои вершины с собственными координатами. Вот они и двигаются, правда, только все вместе. Развертка может перемещаться, поворачиваться и масштабироваться в w3me, и это – ключ ко многим возможностям, одну из которых я продемонстрирую далее.
Практика (TV_version_2.mdx)Во второй версии того же телевизора я использую только одну импортируемую текстуру, на которой умещу 60 кадров небольшого фильма с Тыщей и тюленями, который и будет показывать мой телевизор.
Схема текстуры такова:
6.1Текстура поделена на 64 ячейки размером 64х64 пикселя (в моем случае нижний правый угол 128х128 отведен под текстуру экрана, так что свободных ячеек 60) и в каждую может быть вставлен один из кадров, которые затем будут совмещены в ролик путем горизонтального и вертикального перемещения развертки на текстуре.
При работе с UVW-разверткой в Mdlvis’е вы, скорее всего, заметили, что при перемещении вершин значения Xи Yменяются в пределах от -1 до 1, если не выходить за ограничительный квадрат. Несложно догадаться, что перемещать развертку экрана, изначально находящуюся в верхнем левом углу, мы будем с шагом в 0.125.
Примечание: можно и выйти за ограничительный квадрат, но тогда следует поставить галочки в пунктах "Выравнивание ширины" и "Выравнивание высоты" в настройках текстуры (6.0.1), чтобы она, так сказать, повторялась и вне квадрата.
» Изображение к примечанию
Итак, в w3me перейдем в Менеджер анимаций текстур и, кликнув ПКМ, выберем пункт "Создать новый". В появившемся окне (6.2) есть выбор, что же именно анимировать; здесь стоит остановиться. Как я ни пытался, но заставить хоть как-то работать масштабирование или даже вращение у меня не вышло, и если шансы на корректную работу второго были низки из-за кватернионов, то неработоспособность масштабирования вызвала у меня глубокое недоумение. Ну тут уж ничего не сделать (хотя вы, конечно же, можете попытаться), и я пойду дальше, ибо мне необходимо именно перемещение, которое работает нормально и без нареканий.
6.2После нажатия на кнопку "Перенос" в голову может прийти вопрос: если мы анимируем развертку на текстуре, которая, как известно, плоская, то почему для редактирования доступны аж три параметра? Непонятно. По-видимому, редактирование контроллеров в w3me , универсализировано, и он не делает различий между 3D и 2D, а экспериментальным путем было установлено, что третье число никак не влияет на анимацию текстуры. Так что можно смело браться за первых два, знакомых X и Y.
6.3Замечу, что в качестве интерполяции выбрано "None", т.к. в моем случае необходимо мгновенное перемещение. Но здесь прекрасно работают и все остальные типы.
После создания нескольких первых кадров стоит вернуться в Редактор материалов, ведь пока наша анимация не прикреплена ни к чему. Найдем материал, который использует нашу текстуру, и зайдем в настройки слоя: здесь необходимо задать ID анимированной текстуры, чтобы анимация текстуры закрепилась за ней самой.
6.4Продолжаем расписывать кадры.
Совет: помните, что все можно связать с глобальной анимацией, и это часто оказывается полезным при использовании анимаций текстур. Создали все свои кадры? Отлично, теперь сохраним модель и перезапустим w3me. Смотрим анимацию, и что мы видим: её нет! Дело в том, что w3me сам почему-то удаляет анимацию текстур после закрытия модели (известный баг), но это исправимо.
Сперва необходимо пересохранить нашу модель в *.mdl. Теперь откроем её через блокнот и найдем блок, отвечающий за материалы; в нем – материал, который использует анимированную текстуру, на данный момент у меня он выглядит так:
Чтобы заставить анимацию текстур работать, нужно выписать "TVertexAnimId#", где вместо символа # указывают порядковый номер анимации текстур (начиная с нуля). Вписать эту строчку необходимо после статичного ID текстуры. Таким образом, получаем:
Теперь сохраняем модель и конвертируем в *.mdx. После этого даже w3me сам по себе не сможет убрать данные об анимации текстуры из материала.
Я показал лишь один из множества возможных способов использования анимаций текстур: танковые гусеницы, бегущие строки, различные спецэффекты – все это вам еще предстоит реализовать.
Ну а теперь настал черед переходить к предпоследней главе этой статьи.
Анимации светаТеорияАнимации источников света также очень важны для создания качественной модели, если в ней используются такие элементы, как фонари, огонь, различная магия и т. п. – в общем, все, что должно излучать свет.
Вообще, источники света – вещь очень непростая для WarCraft 3, работает он с ними неохотно, и багов здесь попадается огромное количество, причем баги эти особенно разрушительны и специфичны. К их описанию я вернусь чуть позже.
Однако сам по себе свет в варе выглядит весьма неплохо и делает многие эффекты куда более реалистичными, если можно так выразиться, для вара. Но плохо то, что эффект зависит от полигональности сетки, а она у поверхности земли в WarCraft 3довольно низка. Тем не менее, даже в этом случае, по-моему, стоит использовать источники света, но очень осторожно, так что перейдем к практике.
Практика (TV_version_2_with_light.mdx)Логично, что включенный телевизор излучает свет, да и мой фильм располагает к использованию нескольких цветов, поэтому я создам не слишком мощный источник света и анимирую его цвет.
Итак, в w3me необходимо зайти в Редактор узлов и, кликнув ПКМ, выбрать из контекстного меню пункт "Создать источник света". Его можно привязать к какой-нибудь кости (тогда он будет двигаться вместе с ней), а можно оставить так, просто написав нужные координаты. Назовем наш источник "Omni01", например.
Дважды кликнем ЛКМ по источнику, и откроется окно с его настройками.
7.1Теперь разберемся, что за что отвечает:
Примечание: модели глобального освещения WarCraft 3 находятся в его mpq-архивах по адресу "Environment\DNC\". Там находятся несколько подпапок, в которых хранятся модели освещения для разных типов ландшафтов. Как видно, для освещения юнитов используется один источник света, а для освещения самого ландшафта – другой. Типы всех источников – Directional, т.е. они имеют направление – один единственный кадр в контроллере вращения также недвусмысленно намекает на это. Именно эти модели отвечают за смену дня и ночи, однако вся анимация умещается в одну минуту, следовательно, суточный цикл отчасти управляется самой игрой. Исследуйте эти модели в свое удовольствие – они того стоят ;)
Теперь вернемся к цвету. Я уже сказал, что данный параметр требует деликатного подхода, и вот почему: во-первых, он не всегда отображает именно тот цвет, который нужен, по крайней мере, если пытаться добиться голубых оттенков, – у меня в игре цвет всегда был зеленее, чем должен, – во-вторых, здесь есть один специфичный баг… и этот баг связан с еще одним, крайне неприятным багом источников света.
А дело вот в чем: как только вы установите флажок "Анимирован" на каком-либо параметре источника света и пропишите кадры, модель начнет регулярно выдавать такие ошибки при попытках открытия в w3me:
7.2Причем группы, на которые ссылается программа, могут быть разными – это уже зависит от того, что вы анимировали: KLAC – анимирован цвет, KLAI – анимирована интенсивность, KLBC – анимирован цвет окружения и т.д. Исправляется это путем канонизации в Mdlvis’е, но тут всплывает другая проблема: после канонизации настройки цвета у источника света сбиваются! А именно уже знакомое нам BGR превращается в RGB и наоборот, т.е. после каждой канонизации крайние цветовые каналы меняются местами. Так что после внесения любых изменений в модель нужно будет дважды канонизировать и пересохранять её в Mdlvis’е. А можно просто заранее расписывать цвета из расчета на их перемежевку, но одну канонизацию делать все равно придется. Не слишком удобно, но ничего не поделать…
Примечание: если вдруг вылетит ошибка "Unknowntag""inlight", то помогает та же канонизация.
Что ж, после всех необходимых процедур я получил следующие настройки цвета:
И вот долгожданный результат:
7.3Очень важно: не создавайте больше 2-х источников света в одной модели! Три источника убивают в модели все источники частиц, событийные объекты и CollisionShapes, могут нарушить костные анимации и удалить анимации поверхностей. После этого никакие оптимизации и канонизации не помогут. Да и с двумя будьте особенно осторожны: редко, но такие баги могут произойти и с ними. Более того, уже во время написания этой статьи я впервые встретился с тем, что после дублирования или копирования трижды источника света и открытия модели без канонизации, War3 ModelEditor заставил работать процессор на 100%, заполнил всю оперативную память, и пришлось перезапускать компьютер, который подвис намертво. Если вдруг при открытии модели w3me перестает отвечать, немедленно запускайте диспетчер задач и следите за процессом – будьте готовы завершить его.
Мой техножрец также не обойдется без анимаций света, но к ним я приступлю в последнюю очередь.
На этом мы закончим главу об анимациях света и перейдем к завершающей стадии создания полноценной модели: к оснастке точек крепления.
Точки крепленияТеорияИтак, мы на финишной прямой! Единственное, что нам осталось сделать для завершения работы над анимированной моделью, – это точки крепления, или, иначе говоря, аттачи. Они необходимы, если к модели в игре будут крепиться какие-либо эффекты, посредством заклинаний, через триггеры или Jass.
Почти в каждой стандартной модели юнита в WarCraft 3 есть 9 основныхаттачей; они имеют определенные названия, обусловленные исполняемой ими функцией в игре. Я перечислю их все:
Заметьте: везде после названия аттача добавлено "Ref" – это необходимый постфикс, чтобы отличать аттачи от других объектов в Mdlvis’е и w3me; в игре же он никак не используется и его можно расценивать как некую формальность. На работоспособность эти Ref’ы никак не влияют, но я предпочитаю все равно ставить их.
А вот названия играют очень важную роль: есть четкий список тех имен для аттачей, которые будут работать в качестве точек для прикрепления эффектов непосредственно в игре.
» Вот полный список допустимых названий:
Основные названия могут использоваться только отдельно или вместе с дополнительными, а дополнительные вполне могут обойтись и без основных. То есть если вы назовете крепление "ChestHeadRef", то работать оно не будет, а если название будет даже таким: "GoldEattreeMountSmartRearRightLeftRef", – то все будет нормально. Теперь приступим непосредственно к оснастке аттачей.
Практика (Tech-priest_v3-00a_with_attaches.mdx)Создавать точки креплений удобно в Mdlvis’е, поэтому откроем в нем нашу модель и перейдем в Редактор скелета. Здесь с аттачами можно работать так же, как и с другими объектами. Создать крепления можно, используя команду:
После этого разместим новые аттачи там, где нужно, и переименуем их. Не забудьте привязать крепления к соответствующим костям! После этого они изменят цвет на более светлый.
У креплений есть также одна очень полезная особенность, а именно: возможность независимо от названия аттача прикрепить к нему любую модель в обход WorldEditor’а. Это можно сделать как в Mdlvis’е, так и в War3 ModelEditor’е.
Наверняка вы уже заметили поле "Путь" (8.1) при создании аттачей – именно туда необходимо вписать адрес прикрепляемой модели в MPQ-архиве WarCraft 3 или в какой-либо карте.
Примечание: несмотря на то, что прямо в названии поля написано "указывать как mdl", модели, вписанные с расширением *.mdx, работают нормально.
8.1В w3me работа с аттачами выполняется в Редакторе узлов, создаются они так же, как и любые другие объекты: щелкните ПКМ и выберите самый первый пункт – "Создать аттач".
Теперь щелкнем дважды левой кнопкой мыши по только что созданному аттачу и обнаружим, что помимо поля Путь (п. 1 на 8.2) есть возможность редактировать Видимость (п. 2 на 8.2). Это еще один плюс, который позволяет показывать прикрепляемые модели только в нужное время. Интерполяция только None; увы, но видимость не альфа.
<> scrn40.jpghttp://img706.imageshack.us/img706/5972/scrn40.jpg
8.1Примечание: в прикрепляемой через аттач модели будут проигрываться анимации Stand.
На этом, пожалуй, можно закончить, но на десерт есть еще Событийные объекты и, если вам угодно, я кратко расскажу и про них. Событийные объектыЗдесь нет смысла делать статью на теорию и практику, ибо все предельно просто. Эти объекты необходимы, чтобы в определенные моменты времени в игре вызывались другие модели, не зависящие от основной, например, следы, брызги крови или кратеры, а также звуки.
Создаются они только в w3me, в редакторе узлов, командой "Создать событийный объект". Теперь рассмотрим окно редактирования "событийника":
9.1Координаты для событийного объекта указываться в окне редактирования узла.
Помните, что модель по возможности должна быть укомплектована событийниками, ведь они тоже важны для создания полноценного образа вашего юнита или здания.
В модели техножреца используются и они, но он еще не завершен до конца и пока под маркировкой "_v3-00b" в прикрепленном архиве лежит бета-версия модели; финальная версия is coming soon!
ЗаключениеОглядываясь назад, даже не верится, что я, наконец, завершил эту огромную статью… И лично мне кажется, что даже если не весь алфавит от "А" до "Я", то бОльшую его часть мне охватить удалось =)
Статья писалась очень долго и неоднократно бросалась, а потом снова возрождалась и, наконец, предстала перед вашими глазами. Надеюсь, что мои старания были не напрасны, и вам понравилось и принесло пользу все описанное выше.
БлагодарностиБез них никуда, и я с радостью скажу спасибо за оказанную помощь в написании статьи Сказочник’у, reALien’у и отдельное спасибо Wulfrein’у, который давал множество ценных советов, всячески помогал, а также лично приложил руку к статье.
Ну и конечно же, спасибо нашему порталу – eXtreme Game Modmaking, его создателям и посетителям; Алексею за его Mdlvis, Magos’у за War3 Model Editor и NETRAT’у за его перевод. Спасибо за внимание!WebSter добавил:
Архив с модельками будет позже)
Пишите, плиз, если найдете очепятки или какие-то ошибки |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17.08.2011, 01:50 | #42
+17/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Инквизитор
offline
Опыт:
7,037Активность: |
писчи ищо |
17.08.2011, 02:16 | #43
+0/−1
Профиль |
Приват |
Поиск |
IP: Записан
|
RSQR
offline
Опыт:
29,316Активность: |
блин, молодчинка. всё разжевал дальше некуда. вот только я до половины дочитал больше не осилил) завтра буду дочитывать.
откуда столько терпения? :D |
17.08.2011, 02:21 | #44
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
WebSter
Товарищ Mechanicus
offline
Опыт:
86,111Активность: |
|
18.08.2011, 00:08 | #45
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Uber
Все любят статусы
offline
Опыт:
39,393Активность: |
Плюсую за анимацию света ты словно знал, что мне это как раз понадобится :О |
18.08.2011, 00:41 | #46
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
WebSter
Товарищ Mechanicus
offline
Опыт:
86,111Активность: |
Uber, это с самого начала было обязательным пунктом) |
18.08.2011, 22:22 | #47
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
iZucken
ШТО
offline
Опыт:
17,960Активность: |
бтв ошибку групп выдает 105 ме, 107 просто плюет на все и загружает первый кадр |
18.08.2011, 23:01 | #48
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
WebSter
Товарищ Mechanicus
offline
Опыт:
86,111Активность: |
как понять: "загружает первый кадр"? |
18.08.2011, 23:55 | #49
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
WebSter
Товарищ Mechanicus
offline
Опыт:
86,111Активность: |
В общем, статья в базе, а эту тему я переношу в "Желтую прессу". Свои замечания прошу писать в комментариях к статье или лично мне. |
25.08.2011, 23:32 | #50
+1/−0
Профиль |
Приват |
Поиск |
IP: Записан
|