Здравствуйте ребят, хочу попросить вашего совета, ибо на форуме ничего не нашел, да и хухл молчит. В общем, интересуют методы как реализовывается система звуковых материалов (?), мол звук хождения по стеклу, дереву и т.д (банальный пример, как в Half-Life 2). Буду благодарен вашей помощи.
Карта состоит из секторов. Каждый можно пометить флагом-тэгом.
Смотришь этот флаг, и при каждом шаге играешь "дерево.wav", "стекло.wav" итд соответственно.
Еще на каждый посекторно можно применять эффекты окружения типа эхо-доплер-фланжер.
Еще есть триггеры, эмиттеры итд.
Вообще со времен чуть ли не первого дума такие вещи поддерживались движками на уровне редакторов.
Туда и гугли.
По поводу деления карт на сектора - не соглашусь.
Представь, у тебя огромная карта с множеством брашей. Так что теперь вручную делить всё?
В HL это работает на уровне материалов, каким-то образом. Собственно и вопрос стоит в том, как эти материалы хранить и считывать их свойства в игре.
rcsim
ну, по поводу деления карты на сектора - лютый не удобный костыль, имхо. представь, у тебя огромный уровень, много брашей с разными материалами и ты что, вручную будешь сектора эти делать? уверен, что в Half-Life 2 решили этот вопрос иначе, ибо там в материалах есть не только звуки хотьбы, но и следы от пуль, например.
я лазил по форуму и ничего особого не находил, нашел лишь одно сообщение, где парень советовал пускать луч с помощью физдвига в объект и после этого брать его материал. только в этом способе мне не понятно как получать этот самый материал. смотрите что я имею ввиду. есть физическое тело и оно соответствует одной модели, но при этом модель может состоят из нескольких материалов. моя трабла состоит в том, что я не понимаю как узнать с каким материалом столкнулся луч, ибо физическое тело одно на всю модель/браш, а создавать физтело для каждого куска модели не совсем хорошая идея
Так все уже придумано до нас :) В Unreal Engine это как раз материалами и реализовано. Движок определяет, по какому материалу движется игрок, и проигрывает присвоенный ему эффект (например, один из восьми рандомных шагов по поверхности + легкий питчинг и прочие возможные плюшки).
Вопрос про какой-то конкретный движок?
По Unreal есть целая книга: Game Audio Tutorial. Там очень много нюансов - и материалы, и создание сложных Cue, и диалоги. Все не расскажешь вот так в одном комментарии.
IK-Sound
> Движок определяет, по какому материалу движется игрок, и проигрывает
> присвоенный ему эффект
вот, это то что нужно
IK-Sound
> Вопрос про какой-то конкретный движок?
вопрос про сам алгоритм, который реализует эту возможность (как в UE), ибо мы пишем свой движок просто :)
SnikersMan
> В HL это работает на уровне материалов, каким-то образом. Собственно и вопрос
> стоит в том, как эти материалы хранить и считывать их свойства в игре.
к хл 2 исходники в сети были, не уверен что полные
SnikersMan
> По поводу деления карт на сектора - не соглашусь.
Откуда я знаю, что и как у тебя сделано? Ты сказал "гугл не работает" - из этого я
сделал вывод, ты не пользуешься мейнстримными двигами.
Я тебе самый примитивный способ обрисовал.
В HL2 - есть материалы. И вики у них есть, по поводу картостроительства.
А если у тебя уже есть браши - в чём тогда вопрос?
К ним и привязывай звукоизвлечение.
zombihello
> я не понимаю как узнать с каким материалом столкнулся луч, ибо физическое тело
> одно на всю модель/браш, а создавать физтело для каждого куска модели не совсем
> хорошая идея
Зачем именно физтело? Создавай боксы. Точность коллизий здесь нужна минимальная.
Видимо уже есть редактор. И видимо брашами там рисуются текстуры.
Вместе с рисованием текстуры можно рисовать и боксы. И/или гененрировать их из splat текстуры.
SnikersMan
> По поводу деления карт на сектора - не соглашусь.
> Представь, у тебя огромная карта с множеством брашей. Так что теперь вручную
> делить всё?
Можно генирить их в зависимости от материала. Можно расставлять зоны с эффектами типа эхо или ambient зоны.
В quake, например, в каждом узле bsp дерева может быть запечено до 4-х ambient-ов. Дерево генерится из брашей. В халфе примерно та же история - при коллижине с поверхностью (полигоном) считывается тип материала и в зависимости от типа материала выбирается соответствующий набор звуков. Для ландшафта можно сделать маску, в которой закодирован тип поверхности.
zombihello
> моя трабла состоит в том, что я не понимаю как узнать с каким материалом
> столкнулся луч, ибо физическое тело одно на всю модель/браш
Тут все просто. Физдвиг тебе дает физтело, далее делаешь рейкаст по брашам внутри этого визтела и извлекаешь материал.
0xc0de
> Тут все просто. Физдвиг тебе дает физтело, далее делаешь рейкаст по брашам
> внутри этого визтела и извлекаешь материал.
я то так и думал, но не имею понятия как правильно хранить/извлекать материал. я правильно ж понял, что физтело хранит в себе материал? если да, то а как быть если меш имеет несколько материалов?
// в качестве физдвигла - Bullet
zombihello
> не имею понятия как правильно хранить/извлекать материал. я правильно ж понял,
> что физтело хранит в себе материал?
Уточню, что речь идет не о физическом материале, а о звуковом, который ты можешь хранить где угодно (per mesh,per triangle,per pixel) в зависимости от потребностей твоей игры.
Тема в архиве.