ПрограммированиеФорумЗвук

Реализация звуковых материалов

#0
21:56, 6 дек 2019

Здравствуйте ребят, хочу попросить вашего совета, ибо на форуме ничего не нашел, да и хухл молчит. В общем, интересуют методы как реализовывается система звуковых материалов (?), мол звук хождения по стеклу, дереву и т.д (банальный пример, как в Half-Life 2). Буду благодарен вашей помощи.

#1
22:42, 6 дек 2019

Карта состоит из секторов. Каждый можно пометить флагом-тэгом.
Смотришь этот флаг, и при каждом шаге играешь "дерево.wav",  "стекло.wav" итд соответственно.
Еще на каждый посекторно можно применять эффекты окружения типа эхо-доплер-фланжер.
Еще есть триггеры, эмиттеры итд.

Вообще со времен чуть ли не первого дума такие вещи поддерживались движками на уровне редакторов.
Туда и гугли.

#2
11:03, 7 дек 2019

По поводу деления карт на сектора - не соглашусь.
Представь, у тебя огромная карта с множеством брашей. Так что теперь вручную делить всё?

В HL это работает на уровне материалов, каким-то образом. Собственно и вопрос стоит в том, как эти материалы хранить и считывать их свойства в игре.

#3
11:05, 7 дек 2019

rcsim
ну, по поводу деления карты на сектора - лютый не удобный костыль, имхо. представь, у тебя огромный уровень, много брашей с разными материалами и ты что, вручную будешь сектора эти делать? уверен, что в Half-Life 2 решили этот вопрос иначе, ибо там в материалах есть не только звуки хотьбы, но и следы от пуль, например.

я лазил по форуму и ничего особого не находил, нашел лишь одно сообщение, где парень советовал пускать луч с помощью физдвига в объект и после этого брать его материал. только в этом способе мне не понятно как получать этот самый материал. смотрите что я имею ввиду. есть физическое тело и оно соответствует одной модели, но при этом модель может состоят из нескольких материалов. моя трабла состоит в том, что я не понимаю как узнать с каким материалом столкнулся луч, ибо физическое тело одно на всю модель/браш, а создавать физтело для каждого куска модели не совсем хорошая идея

#4
11:10, 7 дек 2019

Так все уже придумано до нас :) В Unreal Engine это как раз материалами и реализовано. Движок определяет, по какому материалу движется игрок, и проигрывает присвоенный ему эффект (например, один из восьми рандомных шагов по поверхности + легкий питчинг и прочие возможные плюшки).
Вопрос про какой-то конкретный движок?
По Unreal есть целая книга: Game Audio Tutorial. Там очень много нюансов - и материалы, и создание сложных Cue, и диалоги. Все не расскажешь вот так в одном комментарии.

#5
11:18, 7 дек 2019

IK-Sound
> Движок определяет, по какому материалу движется игрок, и проигрывает
> присвоенный ему эффект
вот, это то что нужно

IK-Sound
> Вопрос про какой-то конкретный движок?
вопрос про сам алгоритм, который реализует эту возможность (как в UE), ибо мы пишем свой движок просто :)

#6
14:07, 7 дек 2019

SnikersMan
> В HL это работает на уровне материалов, каким-то образом. Собственно и вопрос
> стоит в том, как эти материалы хранить и считывать их свойства в игре.
к хл 2 исходники в сети были, не уверен что полные

#7
16:35, 7 дек 2019

SnikersMan
> По поводу деления карт на сектора - не соглашусь.

Откуда я знаю, что и как у тебя сделано? Ты сказал "гугл не работает" - из этого я
сделал вывод, ты не пользуешься мейнстримными двигами.

Я тебе самый примитивный способ обрисовал.

В HL2 - есть материалы. И вики у них есть, по поводу картостроительства.
А если у тебя уже есть браши - в чём тогда вопрос?
К ним и привязывай звукоизвлечение.

#8
17:27, 7 дек 2019

zombihello
> я не понимаю как узнать с каким материалом столкнулся луч, ибо физическое тело
> одно на всю модель/браш, а создавать физтело для каждого куска модели не совсем
> хорошая идея

Зачем именно физтело? Создавай боксы. Точность коллизий здесь нужна минимальная.

Видимо уже есть редактор. И видимо брашами там рисуются текстуры.
Вместе с рисованием текстуры можно рисовать и боксы. И/или гененрировать их из splat текстуры.

#9
14:43, 9 дек 2019

SnikersMan
> По поводу деления карт на сектора - не соглашусь.
> Представь, у тебя огромная карта с множеством брашей. Так что теперь вручную
> делить всё?

Можно генирить их в зависимости от материала. Можно расставлять зоны с эффектами типа эхо или ambient зоны.
В quake, например, в каждом узле bsp дерева может быть запечено до 4-х ambient-ов. Дерево генерится из брашей. В халфе примерно та же история - при коллижине с поверхностью (полигоном) считывается тип материала и в зависимости от типа материала выбирается соответствующий набор звуков. Для ландшафта можно сделать маску, в которой закодирован тип поверхности.

#10
14:47, 9 дек 2019

zombihello
> моя трабла состоит в том, что я не понимаю как узнать с каким материалом
> столкнулся луч, ибо физическое тело одно на всю модель/браш

Тут все просто. Физдвиг тебе дает физтело, далее делаешь рейкаст по брашам внутри этого визтела и извлекаешь материал.

#11
11:14, 10 дек 2019

0xc0de
> Тут все просто. Физдвиг тебе дает физтело, далее делаешь рейкаст по брашам
> внутри этого визтела и извлекаешь материал.
я то так и думал, но не имею понятия как правильно хранить/извлекать материал. я правильно ж понял, что физтело хранит в себе материал? если да, то а как быть если меш имеет несколько материалов?

// в качестве физдвигла - Bullet

#12
12:12, 10 дек 2019

zombihello
> не имею понятия как правильно хранить/извлекать материал. я правильно ж понял,
> что физтело хранит в себе материал?

Уточню, что речь идет не о физическом материале, а о звуковом, который ты можешь хранить где угодно (per mesh,per triangle,per pixel) в зависимости от потребностей твоей игры.

ПрограммированиеФорумЗвук

Тема в архиве.