Суббота, 29.07.2017, 19:52
Under sky of Half-Life
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
На движке Valve Source [29]
На движке Half-Life 1 [1]

Главная » Статьи » Статьи по мэппингу » На движке Valve Source

Как заставить Ваши анимированные модели издавать звуки.
Как заставить Ваши анимированные
модели издавать звуки.

Наверно многие, просматривая модели в Модельвьювере (HLMV), удивлялись тому факту, что некоторые модели издают звуки во время анимации. Удивлялся и я. И даже думал, что за этот процесс отвечает некий кусок кода игры  . Потом разобрался как это сделано. Все звуки (а точнее эвенты (event)) вставляются в модель на этапе подготовки QC файла для компилирования модели. Это не очень сложно сделать, и этому процессу посвящён этот небольшой тутор. Статья для тех, кто уже освоил компиляцию моделей, и поэтому я не буду распространяться о том, как делать QC файл «с нуля». Перейду сразу к делу. Итак - у вас есть модель с какой-то анимацией. Например, у вас есть некий механизм, делающий несколько манипуляций и вы хотите эти манипуляции озвучить, не прибегая к средствам маппинга (ambient_generic). Сначала подбираете звуки для движений вашего механизма, кладёте (в нужном формате) в папку звуков и прописываете их в скриптовом файле мода.

Пример.

Механизм делает движение неким «манипулятором», подводя его к нужному месту, останавливает «манипулятор», включает на конце «манипулятора» некий «доводчик» и потом, к примеру, некоторое время «пыхтит». Предположим, это анимация будет называться «open». Потом механизм делает всё это в обратном порядке до исходного состояния и эту анимацию назовём «close». В такой анимации нам нужно минимум три звука.

  1. «Лупленый» (loop) звук движения манипулятора. (manipulator_loops.wav)
  2. Звук «доводчика». (pump_move.wav)
  3. Звук «пыхтения». (mech_pump.wav)

Примечание: при движении модели звуки стартуют и останавливаются не по времени от начала анимации (в секундах) а по номеру фрейма в Вашей анимации и поэтому длительность не «лупленых» звуков надо подбирать вручную или рассчитывать по количеству фреймов каждого движения. Я рассчитывал по секундомеру.Звуки подготовлены в скриптах, прописаны и лежат где надо. Звуки в папке «моймод\sound\ambient» а скрипт файл в папке «моймод\scripts». И не забудьте, что ваш скрипт «моймод_ambient.txt» файл должен быть прописан в скрипт файле «моймод_manifest.txt».

Как это выглядит в скрипте у меня:


"mech.manipulator_loop"
{   

"channel"        "CHAN_STATIC"   
"soundlevel"    "SNDLVL_80dB"   
"volume"        "VOL_NORM"   
"pitch"            "PITCH_NORM"   
"wave"           "ambient/manipulator_loops.wav"

}

"mech.pump_move"
{   

"channel"        "CHAN_STATIC"   
"soundlevel"    "SNDLVL_80dB"   
"volume"         "VOL_NORM"   
"pitch"            "PITCH_NORM"   
"wave"            "ambient/pump_move.wav"

}

"mech.pump_job"
{   

"channel"        "CHAN_STATIC"   
"soundlevel"    "SNDLVL_80dB"   
"volume"         "VOL_NORM"   
"pitch"             "PITCH_NORM"   
"wave"            "ambient/mech_pump.wav"

}


Приступим к редакции QC файла. До добавления звуков секция анимаций выглядела примерно так:


$sequence idle_open "mech_idle_open" fps 30.00 
$sequence idle_close "mech_idle_closed" fps 30.00
$sequence open "mech_opening"  fps 30.00
$sequence close "mech_closed" fps 30.00

mech_idle_open , mech_idle_closed , mech_opening , mech_closed – названия SMD файлов анимаций.

idle_open , idle_close , open , close – названия анимаций, которые вы увидите в свойствах модели в Хаммере или Модельвьювере.

Предположим, что у вас 100 фреймов в Вашей анимации (начинается с «0» и кончается «99»). С 0 по 70-й движение манипулятора, с 71 по 90-й движение доводчика и с 91 по 99 -й звук помпы. В анимации «open» звуки будут стартовать с начальных фреймов движений. В анимации «close» - в обратном порядке. Стоповые фреймы звуков становятся стартовыми, и фреймы идут в обратном порядке. (фрейм №0 для анимации «open» становится фреймом №99 для анимации «close»).  В результате этот кусок QC будет выглядеть так:


$sequence idle_open "mech_idle_open" fps 30.00 
$sequence idle_close "mech_idle_closed" fps 30.00
$sequence open "mech_opening" fps 30.00
 
{ event AE_CL_PLAYSOUND 0
" mech.manipulator_loop " } 
{ event AE_CL_STOPSOUND 70 " mech.manipulator_loop " } 
{ event AE_CL_PLAYSOUND 71 " mech.pump_move "
{ event AE_CL_PLAYSOUND 91 " mech.pump_job " }
}
$sequence close "mech_closed" ACT_IDLE 1 fps 30.00 { 
{ event AE_CL_PLAYSOUND  0 " mech.pump_job " } 
{ event AE_CL_PLAYSOUND 10 " mech.pump_move " } 
{ event AE_CL_PLAYSOUND 70 " mech.manipulator_loop " } 
{ event AE_CL_STOPSOUND 99 " mech.manipulator_loop " }
}

В общем тут всё понятно. Принудительно останавливать необходимо ТОЛЬКО LOOP звуки. Хотя, если Вам лень сидеть с секундомером – вы можете использовать все звуки LOOPленые и останавливать их в нужный момент.

Вот и всё ребята..
Категория: На движке Valve Source | Добавил: monolife (06.03.2010) | Автор: PollL
Просмотров: 1527
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

© 2017, MonoLife Сайт создан в системе uCoz