No meu jogo 2D, eu tenho alguns sons do ambiente, como o ruído de uma cachoeira ou o zumbido de um gerador. No entanto, não é prático tocar esse som o tempo todo no volume máximo, pois em um nível amplo a sobreposição de muitos desses ruídos seria bastante desagradável para o ouvido.
Atualmente, estou pensando em um sistema que modula o volume de certos sons, dependendo da distância do jogador. No entanto, isso não é, em parte, uma ótima solução, pois (por exemplo) em um estado ampliado, o player pode estar muito longe da fonte de som (como uma queda de água), mas ainda assim pode vê-lo na tela, mas não o escuta (devido à distância), o que é bastante estranho.
Existe uma solução para esse problema?
Respostas:
Eu acho que você está no caminho certo. Seu sistema proposto de atenuação à distância deve funcionar se você
sempre use a distância do jogo em relação ao objeto do jogador, que permanece fixa, independentemente do nível de zoom (não use a distância "na tela", que muda conforme o zoom) e
configure seu sistema de atenuação para começar a tocar os sons de um objeto assim que a distância para o jogador no mundo for tal que o objeto fique quase visível ao jogador no nível máximo de zoom.
Dessa forma, os jogadores podem ouvir as coisas antes de vê-las, o que transmite uma sensação de realismo e descoberta. Também evita que a maioria dos cenários reproduza muitos sons do ambiente.
Obviamente, você ainda tem o potencial de sobrecarregar o canal de som ambiente se tiver muitos objetos emissores de som no mesmo local no mundo. Isso pode ser resolvido por
projetar seus níveis para não fazer isso ou, se isso não for viável,
dar aos objetos uma boa prioridade e receber apenas os
n
objetos de maior prioridade, oumodulando o volume de todos os sons do ambiente (mais ou menos) "dividindo pelo número de sons na cena", certificando-se de que você ainda desvanece suavemente os sons à medida que seus objetos se afastam, a fim de evitar "estalar" enquanto você discretamente pule de cinco objetos para quatro, por exemplo.
pré-computar, para um determinado nível ou o jogo inteiro, o número máximo de objetos que podem estar dentro do alcance e reproduzir sons de uma só vez (faça isso como parte do processo de criação de dados do nível ou do jogo). Com base nisso, você pode determinar a intensidade da reprodução de qualquer objeto, para que o pior caso nunca exceda um determinado volume.
Entretanto, as duas últimas opções abordam o problema puramente da perspectiva do volume - elas não explicam o fato de que, mesmo se você tocar 500 sons de fundo em silêncio o suficiente para não sobrecarregar os tímpanos de um jogador, ainda estará tocando 500 sons, o que pode seja barulhento, não no sentido do volume, mas no sentido confuso.
Para lidar com esse problema, acho melhor você tentar reduzir o número total de emissores ambientais ou usar apenas os
n
sons com prioridade máxima (para referência, assumir o topon
é mais ou menos o que decidimos em Guild Wars 2).fonte