Добавлен , опубликован

War3ModelEditor: создание источников частиц

Содержание:
Нам понадобятся:
Это самый распространённый вид частиц, используемых в варовских моделях, поэтому приступим.
Конечно, необходим пример. Сегодня вы под моим руководством сделаете (по крайней мере, попытаетесь)… огненную эльфийскую лучницу!
  1. Отрываем (как это не странно звучит) W3ME. Заходим в MPQ-браузер («Окна –> Браузер MPQ-архивов»). Жмем «Файл –> War3.mpq» Там открываем лучницу эльфов (Units\NightElf\Archer\Archer.mdx).
Не забудьте её либо экспортировать («Файл –> Экспорт»), либо сохранить («Файл –> Сохранить как»), чтобы потом открыть mdlVis'ом.
  1. Для начала нужно прилепить по источнику огня к двум шарам на концах лука (ну они прям напрашиваются). Так, текстура… Откройте ещё один раз W3ME, там браузер MPQ, вытащите из War3x.mpq текстуру «Textures\Clouds8x8.blp» и киньте ее в папку с сохраненной лучницей.
  1. Жмем «Окна –> Менеджер текстур». Щелчок правой кнопки мыши (ПКМ) вызовет меню. Выберите там «Импорт». В открывшемся окне найдите ту текстуру Clouds8x8.blp, которую вытащили на предыдущем шаге.
  1. Открываем «Окна –> Редактор узлов». Там много костей и прочего. Теперь надо определить, куда прикреплять источники. Для этого воспользуемся mdlVis'ом.
  1. Откройте сохраненную вами модель в mdlVis. Зайдите в редактор анимаций (F3), вкладку "Скелет". Там несложно обнаружить, что те самые шары прикреплены к костям Box12 и Box02. Выбираем Box02, жмем «Двигать».
  1. В W3ME в редакторе узлов находим кость Box02, щелкаем правой кнопкой, выбираем «Создать источник частиц 2». Потом щелкаем правой кнопкой по новому источнику «UNNAMED», там выбираем «Редактировать узел».
  1. Теперь из mdlVis'а в открытое в W3ME окно копируем координаты X, Y и Z соответственно. Потом вместо «UNNAMED» напишите что-нибудь осмысленное (я написал «FireBall1»). Жмем ОК.
Координаты должны быть эти: (-3.92160, -31.97090, 63.99700).
  1. Самое интересное. Теперь сделайте двойной щелчок по FireBall1. Объясняю по порядку:
  • 8.1) Видимость. Список кадров, в которые видимость источника изменяется.
  • 8.2) Частота излучения. Количество генераций (spawn) частиц в секунду.
  • 8.3) Скорость. Скорость полёта. Также влияет на время жизни и дальность полета.
  • 8.4) Кучность. Увеличивает скорость и направляет поток также и в противоположную сторону.
  • 8.5) Широта. Отвечает за угол отклонения частицы - фактически это максимальный угол для вектора случайного отклонения. Максимальное значение - 180 (при нем частицы образуют сферу; при значении 90 - полусферу)
  • 8.6) Ширина/Длина. Дело в том, что частицы появляются в плоском прямоугольнике. Это его длина и ширина.
  • 8.7) Рендеринг. Там указывается используемая текстура и фильтрация.
  • 8.8) Сегмент 1-3. Переход между цветами (напр, огонь – красный-оранжевый-желтый). Цвет, альфа (видимость: 255 – видно полностью, 0 – не видно), масштаб (размеры частиц данного цвета).
  • 8.9) Голова/Хвост (появление/затухание). Появление и исчезание головы и хвоста (см. далее). Начало/конец – на каком расстоянии от центра; Повтор – кол-во повторов. Хотя как это работает и какая разница между разными значениями, непонятно…
  • 8.10) Флаги:
  • 8.10.1) Незатуманенный – на него не влияют источники света (он всегда освещен) – NETRAT поменял названия «незатуманенный» и «незатененный» местами…
  • 8.10.2) Незатененный – это значит, что он будет виден сквозь туман войны (задается в параметрах карты). Также на него не накладывается затеняющий фильтр при открытии меню.
  • 8.10.3) Альфав стандартных моделях не встречал
  • 8.10.4) Линейный излучатель – излучает только в плоскости YZ
  • 8.10.5) Sort primitives far Z – указывает движку War'а на то, что частицы нужно отображать в порядке "от дальней к ближней" (иначе они рисуются в произвольном порядке). Обычно указывается при создании эффекта лёгкого дыма (фильтр Blend). Для тех же целей используется параметр "PriorityPlane".
  • 8.10.6) Model Space. На источник не действует движение – он как бы в невесомости.
  • 8.10.7) XY квадрат - излучает квадраты (плоские то бишь) в пл-ти ХУ
  • 8.10.8) Струя. Параметр используется для создания реалистичных взрывов (и во "взрывных" моделях War попадается часто). Он влияет на анимацию частиц и учитывается War'ом, только если "EmissionRate" (частота излучения) источника анимирована, а тип контроллера анимации - Bezier. В этом случае в ключевых кадрах частицы появляются очень резко и кучно. В остальных случаях параметр игнорируется.
  • 8.10.9) Голова. Если не устанавливать галку на «Струя», она идет по умолчанию, так что ей галку можно не ставить. Частицы просто отдаляются от центра без деформации.
  • 8.10.10) Хвост. Тут частицы растягиваются, т.е. она остается прикреплена к центру, но при этом тянется до места исчезновения.
Если поставить одновременно «Голова» и «Хвост», сначала будет растянутая частица, а за ней обычная.
Поставьте значения, как на скрине 1. В видимость запишите
199333: 0
Теперь скопируйте этот источник (ПКМ –> Дублировать) и с помощью нажатия ПКМ в выбирания там «Вверх», «Вниз», «Вправо», «Влево» сделайте этому источнику родительской кость Box12. Из mdlVis'а вставьте копии источника новые координаты.
Они должны быть (-3.92160, 74.16950, 64.32700).
Я назвал этот источник «FireBall2».
Также придется открыть свойства двойным щелчком и выбрать текстуру (так как она сбрасывается). Огонь на шарах готов. Теперь можно дублировать каждый из источников и сделать в настройках размеры частиц поменьше. Это нужно для того, чтобы огонь оставлял за собой след при движении (в этом случае у больших поставьте галку на Model Space, а у маленьких - не ставьте).
Примечание: эти два источник можно прикрепить и к кости Cylinder02, но тогда придется нажать правой по источнику, там выбрать «Редактировать узел» и поставить галку на «Billboarded» (т.е. участок будет всегда повёрнут лицевой стороной к пользователю). Я сделал именно так (см. скрин 2).
Теперь сделаем огненную тетиву.
В mdlVis’е видно, что тетива прикрепляется к костям Box01 и Mesh03.
Щелкните по Box01 правой кнопкой мыши и создайте новый источник. В координатах запишите координаты кости-родителя (-3.66772, -24.3604, 67.1364). Галки не ставьте. Также щелкните там по кнопке «Поворот», затем ОК. Потом объясню. Теперь списывайте со скрина 3, пока никто не видит… У меня это «FireLine1»
Дублируйте источник и присоедините его к Mesh03. Настройте текстуру. В координатах – координаты родительской кости (-3.66772, 68.1433, 66.836). Щелкните по кнопке «Поворот», потом ОК. Это «FireLine2». Готово, но одна проблема – распространение частиц направлено вверх…
Беда в том, что поворот в W3ME настроить нельзя (он как-то криво работает – перед тем, как в окне «Поворот» вы нажали ОК, там стояли координаты { 0, 0, 0, 1 }, а после этого - { 0, 0, 1, 0 }, хотя ничего не меняли…), поэтому придется это настраивать с помощью блокнота. Сохраните модель в *.mdl. (я сохранил как «FArcher.mdl»).
Теперь вернёмся к mdlVis'у. В редакторе анимаций выберите кость Box01 в поверните её в плоскости YZ на -90 градусов, а кость Mesh03 – на 90. Это надо будет для поворота источников. Сохраните эту модель как-нибудь типа 1.mdl (смотрите не перепишите модель из W3ME!!!). Откройте 1.mdl в блокноте и в поиске (Ctrl+F) найдите «Box01». Там в блоке поворотов самая первая строка будет
0: { -0.7071067, 0, 0, 0.7071068 }
Это результат недавнего вращения кости. То же самое с Mesh03. Там строка отличается на один «минус»:
0: { 0.7071067, 0, 0, 0.7071068 }
Теперь откройте FArcher.mdl и там найдите через поиск «Line1». Он найдет источник «FireLine1». В нем будет блок поворотов (Rotation), который вписался благодаря тому, что вы нажимали «Поворот –> ОК». Так бы пришлось создавать вручную, но зачем это нужно? В блоке написано
0: { 0, 0, 1, 0 }
Нужно все координаты заменить на { -0.707107, 0, 0, 0.707107 }, но если заменить только в нуле, при первой же анимации они восстановят начальное положение, птму надо менять для каждой анимы. В mdlVis’е перебирайте все анимации по очереди и записывайте начальный кадры, присваивая им нужные координаты. В итоге должно получиться так:
…
ParticleEmitter2 "FireLine1" {
	ObjectId 62,
	Parent 21,
	Rotation 12 {
		DontInterp,
		167: { -0.707107, 0, 0, 0.707107 },
		1500: { -0.707107, 0, 0, 0.707107 },
		3667: { -0.707107, 0, 0, 0.707107 },
		7467: { -0.707107, 0, 0, 0.707107 },
		11500: { -0.707107, 0, 0, 0.707107 },
		15933: { -0.707107, 0, 0, 0.707107 },
		17100: { -0.707107, 0, 0, 0.707107 },
		18267: { -0.707107, 0, 0, 0.707107 },
		34333: { -0.707107, 0, 0, 0.707107 },
		39733: { -0.707107, 0, 0, 0.707107 },
		46667: { -0.707107, 0, 0, 0.707107 },
		99333: { -0.707107, 0, 0, 0.707107 }
	}
Additive,
…
Для FireLine2 будет то же, но только без «минусов»:
...
ParticleEmitter2 "FireLine2" {
	ObjectId 62,
	Parent 21,
	Rotation 12 {
		DontInterp,
		167: { 0.707107, 0, 0, 0.707107 },
		1500: { 0.707107, 0, 0, 0.707107 },
		3667: { 0.707107, 0, 0, 0.707107 },
		7467: { 0.707107, 0, 0, 0.707107 },
		11500: { 0.707107, 0, 0, 0.707107 },
		15933: { 0.707107, 0, 0, 0.707107 },
		17100: { 0.707107, 0, 0, 0.707107 },
		18267: { 0.707107, 0, 0, 0.707107 },
		34333: { 0.707107, 0, 0, 0.707107 },
		39733: { 0.707107, 0, 0, 0.707107 },
		46667: { 0.707107, 0, 0, 0.707107 },
		99333: { 0.707107, 0, 0, 0.707107 },
	}
Additive,
…
Внимание! Если в строке «Parent» у вас стоит другое значение, не меняйте его!
Вернитесь в начало файла в блок текстур и измените «Clouds8x8.blp» на «Textures\Clouds8x8.blp», чтобы Вар использовал стандартную текстуру.
Ну а теперь последний штрих – горящие глаза.
В mdlVis'е выберите треугольники, которые текстурируются как левый глаз. У меня получилось так:
(3.94080, -1.97630, 92.70400)
Координаты правого глаза, не задумываясь, принимаем за (3.94080, 1.97630, 92.70400), т.к. модель симметрична относительно XOZ
Глаза движутся вместе с головой, а голова прикреплена к кости «Head mesh», так что создаем на ней источник частиц. Пишем координаты левого глаза, ставим «Billboarded» и жмем ОК. Воруем информацию с 4-ого скрина. Дублируем источник, изменив название и стерев «минус» у координаты Y.
Последний скрин иллюстрирует результат.
Тихо радуемся…
Ну вот. Пока хватит)

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
15
14 лет назад
2
Wulfrein, огромное спасибо за статью) очень помогла))
1
16
13 лет назад
1
Да, статья хорошая, жаль что я её так поздно нашёл...
0
22
11 лет назад
0
Как сделать так, чтобы частицы появлялись не во всех кадрах, а только в определенный момент? Ответ — скрывать в нужный момент кость, к которой крепятся частицы. Для этого можно использовать MdlVis.
P. S. Я написал это, на случай если у кого-нибудь возникнет такая же проблема, какая возникла у меня. В статье я этого не нашел.
1
22
11 лет назад
Отредактирован Стратег
1
Подскажите пожалуйста, как сделать , чтобы частицы не были квадратными, а то у меня куча квадратиков летает:)
Вот скриншот
Скрин
Мне нужно, чтобы не было квадратов и чтобы частицы не отлетали далеко, что для этого нужно, какие параметры за это отвечают?
Загруженные файлы
0
22
11 лет назад
Отредактирован Zahanc
0
Чтобы не было квадратов нужно текстуру подходящую подобрать. А какие параметры за что отвечают легко определить методом тыка в War3ME. Я так и разобрался, но уже забыл.
1
22
11 лет назад
1
Действительно, изменил текстуры на ту, что предложена здесь (т.е. клауд) и действительно квадраты исчезли. Но прошлая текстура тоже являлась какой-то текстурой для эффекта, в том эффекте нету квадратов, хоть он и использует эту же текстуру. В чем же дело?
0
22
11 лет назад
0
Эффекты разные бывают. Видимо в данном случае поддерживается только определенное разрешение текстуры.
0
30
11 лет назад
Отредактирован Tiodor
0
проблема в том, что ты установил неверное значение рядков и колонок
колонки эти... в общем если это одно изображение то там должно стоять 1 и 1
если их там 3х4, то ставишь соответственно
2
22
11 лет назад
Отредактирован Стратег
2
Ах
Действительно, ты прав Тиодор, спасибо большое за помощь, и тебе, bladget, спасибо
У меня еще вопрос появился:). Если кому-то не трудно ответить, то отпишитесь.
Вот я сделал посох. Посох сияет (правда не весь, а только шар на конце). Посох я прикрепляю к руке модели, а модель уже анимированна. Во время игры модель шатает рукой, посох шатается вместе с ней, но сияние всегда на одном месте(что, в общем, не удивительно). И мне бы хотелось узнать, как сделать, чтобы эффект следовал за посохом, а точнее за рукой, ведь она совершает анимацию.
0
30
11 лет назад
Отредактирован Tiodor
0
в одном месте относительно модели или движется вместе с посохом, но не идет шлейф за ним?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.