WarCraft 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. Теперь откроем её через блокнот и найдем блок, отвечающий за материалы; в нем – материал, который использует анимированную текстуру, на данный момент у меня он выглядит так:
	Material {
		Layer {
			FilterMode None,
			staticTextureID 2,
			TwoSided,
			Unshaded,
		}
	}
Чтобы заставить анимацию текстур работать, нужно выписать "TVertexAnimId #", где вместо символа # указывают порядковый номер анимации текстур (начиная с нуля). Вписать эту строчку необходимо после статичного ID текстуры. Таким образом, получаем:
	Material {
		Layer {
			FilterMode None,
			staticTextureID 2,
			TVertexAnimId 0,
			TwoSided,
			Unshaded,
		}
	}
Теперь сохраняем модель и конвертируем в *.mdx. После этого даже w3me сам по себе не сможет убрать данные об анимации текстуры из материала.
Я показал лишь один из множества возможных способов использования анимаций текстур: танковые гусеницы, бегущие строки, различные спецэффекты – все это вам еще предстоит реализовать.
Ну а теперь настал черед переходить к предпоследней главе этой статьи.

Просмотров: 3 305

Комментарии пока отсутcтвуют