Добавлен Monoroh,
опубликован
Раздел:
Моделлинг
О статье
Доброго времени суток, уважаемые пользователи XGM!
В данной статье мы подробно рассмотрим как прикрепить к анимациям модели нестандартные звуки. План:
- Выбор модели и анимаций.
- Выбор звуков и конвертирование их в корректный формат.
- Работа с таблицами AnimLookups.slk и AnimSounds.slk.
- Присоединение звуков к анимациям.
- Импорт в игру.
(Весь используемый мной материал).
Ну что, приступим!
Подготовка
Используемые программы:
- Любой MPQ редактор. (Я использую Ladik's MPQ Editor v3.6.0).
- Любой аудио-конвертер, который умеет в wav.
- War3 Model Editor (Я использую 1.07).
- Любой редактор, который умеет работу с таблицами, например Microsoft Excel.
Выбор модели и анимаций.
Здесь вы можете выбрать любую модель, но я рассмотрю на примере своей модели Военачальника Горианской Империи. Сразу определимся к каким анимациям мы хотим прикрепить звуки. Я выбрал Attack, Attack 2, Attack 3, Attack Slam, Death.
Выбор звуков и конвертирование их в корректный формат.
Для анимаций Attack, Attack 2, Attack 3, я выбрал:
OgreNewAttackEffort1
OgreNewAttackEffort2
Для анимации Attack Slam, я выбрал:
OgreNewCriticalAttack1
Для анимации Death, я выбрал:
OgreNewDeath1
OgreNewAttackEffort1
OgreNewAttackEffort2
Для анимации Attack Slam, я выбрал:
OgreNewCriticalAttack1
Для анимации Death, я выбрал:
OgreNewDeath1
Важно: Для того, чтобы звук воспроизводился в игре корректно и вообще воспроизводился, нужно обязательно сконвертировать в wav:
- Sample rate: 22 050 Частота дискретизации
- Bit Depth: 16 Битрейт
- Channels: Mono аудио-каналы
Работа с таблицами AnimLookups.slk и AnimSounds.slk
С помощью MPQ редактора, мы открываем war3x.mpq до 1.29 включительно, я прикрепил таблицы к статье для тех, у кого 1.30 и выше. Проходим по пути UI\SoundInfo\ и экспортируем файлы: AnimLookups.slk и AnimSounds.slk.
Открываем AnimLookups.slk
Видим три столбца:
AnimSoundEvent, SoundLabel, InBeta.
AnimSoundEvent, SoundLabel, InBeta.
- AnimSoundEvent - здесь вводим 4-х значный идентификатор. Придумываем любой, но отличный от уже существующих. Я выбрал MNR1, MNR2, MNR3 (MNR сократил мой ник Monoroh :))
- SoundLabel - здесь что-то вроде описания того, какой звук будет воспроизводиться. Можно написать все, что угодно, но рекомендую писать под название анимаций, для которых этот звук будет воспроизводиться, чтобы самим не запутаться. Я выбрал OgreNewDeath, OgreNewAttack, OgreNewCriticalAttack.
- InBeta - от него ничего не зависит, я так полагаю это идентификатор версий. Я везде проставил 1.
AnimSoundEvent | SoundLabel | InBeta |
---|---|---|
MNR1 | OgreNewDeath | 1 |
MNR2 | OgreNewAttack | 1 |
MNR3 | OgreNewCriticalAttack | 1 |
Сохраняем, закрываем.
Открываем AnimSounds.slk
- Опускаемся в самый низ и в первый столбец (SoundName) вводим значение столбца SoundLabel из таблицы AnimLookups.slk. Соответственно это будет OgreNewDeath, OgreNewAttack, OgreNewCriticalAttack.
- Во второй столбец FileNames вписываем название аудиофайла, который будет воспроизводиться. Соответственно: OgreNewDeath1.wav; OgreNewAttackEffort1.wav,OgreNewAttackEffort2.wav; OgreNewCriticalAttack1.wav. Обратите внимание, что в строку OgreNewAttack, во второй столбец мы вписали два звука OgreNewAttackEffort1.wav,OgreNewAttackEffort2.wav через запятую. Это значит, что при воспроизведении анимаций атак, мы будет слышать либо первый, либо второй звук (рандомно).
- В третий столбец DirectoryBase мы прописываем путь, где буду находиться наши звуки. Я выбрал Units\Creeps\OgreNew.
- Остальные столбцы я заполнял по образцу соответствующих стандартных звуков. Например для OgreNewDeath я взял значения стандартного звука смерти Огра OgreDeath, а для OgreNewAttackEffort1.wav, OgreNewAttackEffort2.wav, OgreNewCriticalAttack1.wav я взял значения звуков атак Повелителя зверей BeastmasterAttack. Параметры очень гибкие, например можно отстроить дистанцию слышимости, изменяя параметры столбцов MinDistance, MaxDistance, DistanceCutoff, но я решил не импровизировать и оставить стандартные значения Blizzard.
На выходе получается такая табличка:
SoundName | FileNames | DirectoryBase |
---|---|---|
OgreNewDeath | OgreNewDeath1.wav | Units\Creeps\OgreNew |
OgreNewAttack | OgreNewAttackEffort1.wav,OgreNewAttackEffort2.wav | Units\Creeps\OgreNew |
OgreNewCriticalAttack | OgreNewCriticalAttack1.wav | Units\Creeps\OgreNew |
Сохраняем, закрываем.
Присоединение звуков к анимациям.
Итак, приступаем к самому вкусному, а именно присоединение звуков к анимациям. Делать мы это будем в War3 Model Editor'е. Но сначала подготовим его.
Идем в директорию, куда вы распаковали War3 Model Editor. Заходим в папку Data и там с помощью любого текстового редактора открываем файл SoundData. Спускаемся в самый низ и дописываем строчки:
Идем в директорию, куда вы распаковали War3 Model Editor. Заходим в папку Data и там с помощью любого текстового редактора открываем файл SoundData. Спускаемся в самый низ и дописываем строчки:
MNR1 OgreNewDeath
MNR2 OgreNewAttack
MNR3 OgreNewCriticalAttack
MNR2 OgreNewAttack
MNR3 OgreNewCriticalAttack
Сохраняем, закрываем.
Для чего эти манипуляции?...
Дело в том, что War3 Model Editor берет значения идентификаторов звуков не из таблиц как нам всем казалось и хотелось AnimLookups и AnimSounds, которые благополучно лежат в файлах игры, а как раз таки из этого SoundData файла. Проще говоря, если бы мы не добавили эти строчки в SoundData, то War3 Model Editor не увидел бы наши новые значения.
Дело в том, что War3 Model Editor берет значения идентификаторов звуков не из таблиц как нам всем казалось и хотелось AnimLookups и AnimSounds, которые благополучно лежат в файлах игры, а как раз таки из этого SoundData файла. Проще говоря, если бы мы не добавили эти строчки в SoundData, то War3 Model Editor не увидел бы наши новые значения.
Ключевые кадры
Теперь открываем War3 Model Editor.
File>Open>Наша модель.mdx.
Теперь нам нужны ключевые кадры анимаций, с которых будет воспроизводиться звук. Для этого идем в Windows > Sequence Manager. Открывается список анимаций. Делаем двойной клик по анимации Attack. Открывается окно Sequence: Запоминаем значение графы From:
File>Open>Наша модель.mdx.
Теперь нам нужны ключевые кадры анимаций, с которых будет воспроизводиться звук. Для этого идем в Windows > Sequence Manager. Открывается список анимаций. Делаем двойной клик по анимации Attack. Открывается окно Sequence: Запоминаем значение графы From:
Так же проделываем для анимаций Attack 2, Attack 3, Attack Slam, Death.
Вот мы получили значения нужных нам кадров.
Вот мы получили значения нужных нам кадров.
Привязка
Далее идем во вкладку Windows>Node Manager.
Перед нами список костей. Всесобытийные объекты привязываются к главной кости. Часто эти кости называются по-разному. Например bone root, root и т.д. В нашей модели это кость bone_b0 .
Перед нами список костей. Все
Кликаем на bone_b0 правой кнопкой мыши, и жмякаем Create Event Object. Появился объект под названием UNNAMED.
Кликаем по нему два раза, или правой кнопкой мыши>Edit . Открывается окно:
Правый клик по области Event Tracks > Create New.
Открывается окошко Enter a Track Time. В него мы вводим номер кадра, с которого будет воспроизводиться наш звук. Соответственно для анимации Attack вводим значение 74195.
Type оставляем SND (Sound).
Data разворачиваем список и ищем MNR2 - OgreNewAttack. либо в строку ниже вводим MNRH2
Data разворачиваем список и ищем MNR2 - OgreNewAttack. либо в строку ниже вводим MNRH2
Т.к. анимации Attack 2 и Attack 3 будут воспроизводить те же звуки, что и анимация Attack, то мы сюда же добавляем значения анимаций Attack 2, Attack 3. По итогу должно получиться вот так:
Жмем Ок и видим наш объект. Вот, собственно, мы и добавили звуки атак :)
Так же проделываем и для остальных анимаций:
Attack Slam
Attack Slam
Death
Итог. Объекты переименовались в тип объекта x идентификатор.
Сохраняем модель. File > Save
Добавление звуков закончено. Осталось только правильно импортировать в игру.
Импорт в игру
Способы:
Осталось дело за малым. Импортировать в игру. Выделю несколько способов:
- Добавить в архив war3x.mpq с заменой где нужно. до 1.29 включительно
- Добавить в карту.
- Создать отдельный архив war3mod.mpq и закинуть туда, не заменяя стандартные файлы. до 1.29 включительно
Пути импорта:
Для таблиц:
UI\SoundInfo\AnimLookups.slk
UI\SoundInfo\AnimSounds.slk
UI\SoundInfo\AnimSounds.slk
Для звуков:
Units\Creeps\OgreNew\OgreNewAttackEffort1.wav
Units\Creeps\OgreNew\OgreNewAttackEffort2.wav
Units\Creeps\OgreNew\OgreNewCriticalAttack1.wav
Units\Creeps\OgreNew\OgreNewDeath1.wav
Units\Creeps\OgreNew\OgreNewAttackEffort2.wav
Units\Creeps\OgreNew\OgreNewCriticalAttack1.wav
Units\Creeps\OgreNew\OgreNewDeath1.wav
Для модели и текстур:
Убрать war3imported из пути.
Заключение
Вот мы и научились прикреплять нестандартные звуки к анимациям :).
Спасибо за внимание! :)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Кстати, Sound Data править совсем не обязательно, достаточно просто забить ИД звука вручную в графу EventData. Ещё можно написать, что в AnimSounds есть интересные параметры priority (приоритет звука над другими, например при более высокой priority для звука смерти он будет заглушать звуки выстрелов и наоборот) и Volume - уровень громкости, правда, там сильно увеличить громкость не получится.
Отредактирован Lame Stallion
UPD. По триггеру позиционно (в 3D-формате) заработал нормально, надо было только поднять с нуля значение минимальной дистанции. Несмотря на то, что в AnimSounds у него стоит 600, при анимации выстрела все равно тишина. Значит, проблема не со звуком, а с моими руками. Кто поможет - пришлю ведро чая.
P.S.S. И помогите мне разобраться с третьим способом. Я так понял нужно заархивировать наши .slk и музычку. Но как же импортировать этот файл в карту плюс как это вообще может сработать???