Geração de ambiente baseado em som e música no Unity3D

Anotação


Olá pessoal. Este artigo é o primeiro de uma série sobre o tópico de geração de conteúdo com base em música e som. De fato, essa geração é uma tarefa técnica bastante complicada; portanto, este material será introdutório, mais focado no design de jogos e em uma compreensão geral do assunto, após o qual nos aprofundaremos nos aspectos técnicos deste tópico.



Neste artigo, consideraremos um gênero específico de jogos em que o conteúdo é gerado com base no som e na música. A teoria geral do som não será apresentada aqui, mas no material você pode encontrar links para fontes de informação e uma breve descrição dos termos que usaremos. O material, embora contenha informações técnicas sobre teoria e programação de som, foi projetado para um público iniciante. As ilustrações são feitas por conta própria e, como não sou artista, não as leve a sério, elas são necessárias apenas para uma melhor compreensão do material. Boa leitura!


1. Introdução


A geração processual baseada na música nos videogames é um tópico que, para mim, pessoalmente, sempre foi envolto em um certo toque de misticismo. Há algo incrível em como as formas sonoras não são apenas visualizadas, mas também afetam diretamente a jogabilidade. Tudo parece peculiar, mas muito divertido. É por isso que esses jogos têm seu próprio público pequeno, mas estável. O Steam adicionou tags separadas para estes jogos: "Geração baseada em música" e "Rhythm game". No momento, essas tags podem ser encontradas em cerca de 200 projetos, embora existam muito mais jogos que usam essa mecânica.


De fato, a geração baseada em som oferece espaço ilimitado para o desenvolvimento da jogabilidade, mas até agora essas idéias continuam sendo o destino de projetos independentes, enquanto em jogos AAA (com exceção do Guitar Hero) tais experiências não são aplicáveis ​​devido à sua instabilidade e incomum jogabilidade. .


Exemplos de bons projetos


Antes de passar para a essência da geração baseada em som (não confunda com geração de som!), Gostaria de dar exemplos de jogos bem-sucedidos que usam mecânica semelhante. Se você ainda não os jogou, tente! Você provavelmente nunca viu isso antes. Muitos desses projetos receberam prêmios de jogadores e da imprensa.


A rigor, a geração pura é usada apenas no Audiosurf. No resto dos jogos, eu uso um ou outro de seus elementos. Alguns jogos são mais focados no rastreamento de bits, outros no volume da faixa etc.


Esses projetos são muito difíceis de avaliar por uma captura de tela ou descrição. Portanto, se você não tiver tempo para reproduzir, assista ao vídeo no YouTube.


Audiosurf



Para muitos jogadores, o Audiosurf foi o primeiro jogo a usar a geração de conteúdo baseado em música. O projeto foi criado por um desenvolvedor independente do Invisible Handlebar - a empresa de Dylan Fiterer. Quando o Audiosurf apareceu no Steam, esse mercado estava apenas começando a se desenvolver e a taxa de crescimento monstruosa atual ainda estava longe. O Audiosurf parecia muito novo e não usual, além disso, foi o primeiro jogo no Steam (exceto nos jogos da Valve), que continha conquistas!


O slogan do Audiosurf - "Ride your music" - reflete com muita precisão a jogabilidade: com base na sua trilha, a trilha que você precisa dirigir é criada. O jogo leva em consideração a velocidade da pista, mudanças dinâmicas (aumento e diminuição de volume) e bit. Nele, você pode usar diferentes gêneros de música e combiná-los com diferentes modos de jogo. Além disso, cada faixa tem sua própria tabela de registros, e você pode se surpreender ao descobrir que seu "Undeground death metal" favorito é ouvido por mais dez pessoas.



Infelizmente, na estática, o Audiosurf não é percebido. Precisa jogar.


Falando em jogabilidade, o Audiosurf é ótimo. Por exemplo, se a trilha começar com uma introdução silenciosa, seu barco subirá lentamente para cima, mas quando a textura musical se tornar mais saturada e encorpada, a velocidade aumentará e você se apressará o tempo todo. O chamado Drop é especialmente bem sentido, durante o qual o som "interrompe" no meio do desenvolvimento e depois retorna no momento do clímax. Um kit de bateria diversificado pode transformar sua trilha em uma estrada montanhosa, além de afetar os especiais. efeitos Além disso, os blocos que você deve coletar ao passar o rastreio gerado também são colocados sob o bit.


10 anos se passaram desde o lançamento do jogo, mas ainda é muito popular entre os jogadores. No momento, duas partes do jogo foram lançadas, e o desenvolvedor Dylan Fitterer continuou a desenvolver suas idéias e criou o Audioshield, onde você se afasta de blocos de realidade virtual voando em você sob uma batida de bits.


Recomendamos a reprodução em faixas como:


  • Sistema de um Down - Chop Suey!
  • Martin Garrix - Animais
  • Skrillex - Bangarang

Compartilhe suas faixas favoritas do Audiosurf nos comentários!


O jogo pode ser comprado no Steam .


Perigo de batida


Neste projeto, os criadores adotaram a mecânica padrão do Shoot'em e adicionaram uma análise das suas músicas lá. Acabou muito legal. A música afeta tudo: o poder do seu navio, o número de oponentes, a velocidade geral do jogo. O melhor de tudo é que o jogo pode ser sentido com música, onde há transições nítidas do silêncio para um som poderoso, então sua tela explode com os efeitos e o navio começa a disparar em raios enormes.


O jogo tem uma mecânica bastante rica, vários modos e chefes enormes. Em geral, tudo o que você precisa para se divertir!



Recomendamos a reprodução em faixas como:


  • The Prodigy - Os invasores devem morrer!
  • Cogumelo Infectado - A Lenda dos Shawarma Negros
  • Daft Punk - Contato

Escreva nos comentários as faixas que você mais gosta de destruir naves inimigas!


O jogo pode ser comprado no Steam .


Soundodger +


O jogo é uma espécie de mistura de Beat Hazzard e o popular Super Hexagon. A essência da jogabilidade é que você precisa se esquivar de objetos cuja atividade depende da sua faixa de música. O processo é muito complicado e, portanto, super emocionante.



O jogo pode ser comprado no Steam .


Cripta do necrodancer


Um jogo que transfere com precisão o ritmo com uma precisão insana e faz você dançar com um gamepad. Crypt of the NecroDancer é um projeto do tipo Roguel, no qual você e os monstros devem se mover estritamente com a música. Se você não entrar no ritmo, o jogo o multará quando você se mover. Todo o local ao mesmo tempo pulsa ao ritmo, o que cria uma atmosfera irreal. A trilha sonora foi escrita pelo famoso Danny Baranowsky (Super Meat Boy, The Binding of Isaac). A propósito, o jogo suporta tapetes de dança!



O jogo pode ser comprado no Steam .


Traço de geometria


É um corredor muito incondicional, no qual você confia não apenas na sua reação, mas também no senso de ritmo, já que todos os obstáculos são claramente vencidos e no final da pista (se você alcançar) você já está se movendo em um nível intuitivo. A rigor, não há geração como tal, mas os desenvolvedores usaram a análise de faixas de música para melhor construir o nível.



Como quase todos os jogos desse gênero, o Geometry Dash parece muito brilhante


O jogo pode ser comprado no Steam .


Beatbuddy: conto dos guardiões


Um magnífico jogo de plataformas musicais, cuja ação ocorre no mundo subaquático, vivendo sob uma batida eletromagnética brilhante. Cada criatura neste jogo gera seu próprio som. Krabik bate rapidamente, as anêmonas são responsáveis ​​pelo cano ... Ao mesmo tempo, o personagem principal pode influenciar os habitantes do mundo e mudar a música e a própria jogabilidade. Para o jogo, foram utilizadas faixas de músicos como Parov Stelar, Austin Wintory, Sabrepulse e La Rochelle Band.



O jogo pode ser comprado no Steam .


Depois de termos sido inspirados por excelentes projetos, podemos prosseguir com o estudo da pergunta "como tudo funciona?"


Opções básicas de som


Opções de áudio analógico


Como o tópico escolhido não é muito simples e contém muitos aspectos técnicos, decidi não inflar o artigo com teoria, mas definir conceitos básicos. Se você deseja estudar a teoria do som mais de perto, no Habr havia muitos artigos sobre esse assunto. No final do artigo, você encontrará muitos links úteis.


Os parâmetros básicos do som, incluiremos o seguinte:


  • Frequência ou tom da onda sonora, Hz
  • Amplitude da onda sonora ou volume do som, dB
  • Coeficiente de atenuação é a taxa de diminuição da amplitude ao longo do tempo.
  • Forma de onda - uma visão geral de uma onda sonora. Usando este parâmetro, você pode dividir os sons em grupos (nítidos, suaves, ruídos, etc.)

Para maior clareza, citei as principais características da onda sonora nos gráficos a seguir (as unidades não estão definidas, peço desculpas):



Som alto com grande amplitude



Som silencioso com menos amplitude



Alta frequência, alta frequência



Som baixo com menos frequência



Som alto e alto (cuide dos seus ouvidos!)


Em geral, esses dados são suficientes para entender o que é o som e seguir em frente. Mas se você estiver interessado neste tópico, é claro que precisará estudá-lo mais profundamente.


Opções de áudio digital


Ao escrever jogos e outros programas, trabalharemos com a forma digital do som. O som digital é obtido por amostragem (divisão em pequenos pontos no tempo), quantização (arredondamento para um determinado nível) e codificação (na verdade, transformando o som em zeros e uns). Você pode encontrar muitas informações sobre esse tópico no artigo Teoria do som. O que você precisa saber sobre o som para trabalhar com ele. Experimente o Yandex.Music , que eu realmente gostei. Lá você encontrará informações sobre como medir volume e uma descrição dos filtros que mencionarei.


A principal coisa que precisamos saber sobre o sinal digital é:


  1. Taxa de amostragem - caracteriza a precisão com que o som será digitalizado. Por exemplo, quando dizemos que a taxa de amostragem é 44,1 kHz, isso significa que o sinal é medido 44.100 vezes em um segundo. Hoje, as taxas de amostragem mais comuns são 44,1 kHz e 48 kHz.


  2. Profundidade de bits de um sinal digital - caracteriza o quão ampla faixa dinâmica se encaixa no seu digital. É medido em bits e geralmente é de 16, 24 e 32 bits. A faixa dinâmica é a diferença entre o som mais alto e o mais silencioso, expresso em decibéis. Por exemplo, para um sinal de 8 bits, é 48 dB, para um sinal de 16 bits, é 96 dB, para um sinal de 24 bits, é 144 dB e para um sinal de 32 bits, é 192 dB.


  3. A taxa de bits é o que todos os internautas viram em 2002 quando baixaram músicas. Taxa de bits é o número de bits usados ​​para transmitir ou processar dados por unidade de tempo. Nos formatos de streaming de vídeo e áudio (por exemplo, MPEG e MP3) que usam compactação com perda de qualidade, o parâmetro "taxa de bits" expressa o grau de compactação do fluxo.



Metadados em arquivos de música


Além dos próprios parâmetros de som, podemos usar informações ocultas nos próprios arquivos de som. Essas informações geralmente são chamadas de Tags e cada formato de arquivo tem seu próprio formato de tag. Vamos falar sobre os arquivos mp3 como os mais comuns.


As tags são mais fáceis de ler usando uma biblioteca pronta, por exemplo, usando TagLib .


O formato mp3 contém metadados em sua estrutura ID3, na qual podemos armazenar muitas informações. Existem várias opções para o formato ID3, mas falaremos sobre o ID3 v2.3, no qual você pode armazenar a maioria dos dados. A partir de informações úteis, você deve prestar atenção a: nome, ano de gravação, gênero, BPM (número de batidas por minuto), duração da faixa . Como esses campos podem nos ajudar na geração de conteúdo? Se tudo está claro com o BPM, ele é usado durante a geração o tempo todo e falaremos sobre isso separadamente, então por que precisamos de outros campos? Aqui você precisa mostrar imaginação.


Por exemplo, lemos o gênero e o ano. Para começar, precisamos processar essas informações um pouco. Para simplificar, consideraremos apenas o inglês. As tags Mp3 (e outras tags) geralmente são preenchidas manualmente; a partir daqui, seguem diferentes grafias de gêneros, pontuação diferente etc. É melhor trazer a tag resultante para um único formato para facilitar a comparação com outras pessoas. É recomendável remover todos os sinais de pontuação, espaços e converter a string em minúsculas. Isso pode ser feito usando expressões regulares.


Após essas manipulações, será muito mais fácil comparar os gêneros de músicas. Em seguida, você precisará criar uma base de gêneros, com base em alguma fonte, e passar por ela para compilar seu banco de dados de tags. Aqui está um exemplo de uma lista de todos os gêneros: musicgenreslist.com . Naturalmente, você precisa escolher apenas o mais básico.


Eu não respondi, por que essas dificuldades? Vou dar exemplos (muito simplificados).
Com base no gênero, podemos:


  • Alterar local (rock - floresta sombria, música eletrônica - espaço, país - deserto, pop - cidade etc.)
  • Mudar personagem
  • Mude inimigos, etc.


Um exemplo de personagem baseado nas tags rock, electro, pop.


E então você pode inventar qualquer coisa! Ano de lançamento do álbum: 1960-1970? Vista o personagem com as roupas desse período. Duração da trilha 10 minutos? Deixe sua "cobra gerada musicalmente" ter uma cauda longa. Existem muitas oportunidades e sempre há uma chance de surpreender o jogador.


Representação de arquivos de áudio no Unity



Tudo parece ser simples ...


O Unity possui vários componentes principais para trabalhar com som:


  • O ouvinte de áudio (ouvinte) se comporta como um microfone. Ele recebe entrada de qualquer fonte de som (fonte de áudio) na cena e reproduz sons pelos alto-falantes. Para a maioria dos aplicativos, faz sentido adicionar um ouvinte à câmera principal - o objeto Câmera Principal.
  • Fonte de áudio reproduz o clipe de áudio em cena. Se o clipe de áudio for um clipe 3D, a fonte será reproduzida em uma determinada posição no espaço e será silenciada, dependendo da distância.
  • Clipes de áudio (clipes) contêm dados de áudio usados ​​em fontes de áudio. O Unity suporta ativos de áudio mono, estéreo e multicanal. O Unity pode importar os seguintes tipos de arquivo: .aif, .wav, .mp3 e .ogg.


Se você estiver profundamente imerso no trabalho com som, precisará interagir diretamente com os clipes de áudio. Um clipe de áudio contém uma matriz de quadros de som (amostras) que você pode ler e substituir. Com isso (e montes de matan), você pode determinar os parâmetros das trilhas sonoras e produzir efeitos sonoros.


Configurações da faixa de música


Então, lemos alguns dados iniciais de nossa trilha e obtivemos os primeiros rudimentos de geração. Agora você pode passar para a parte mais difícil. Precisamos entender quais parâmetros dinâmicos da pista podemos determinar e como eles podem ser usados ​​na jogabilidade. Parte do material é baseada no blog do estúdio Parallelcube . Os caras criam recursos e tutoriais para o Unreal Engine, pelos quais muitos agradecem a eles.


As seguintes tarefas podem ser distinguidas:


  • Definindo um barril como um gatilho para efeitos especiais
  • Determinando momentos calmos e altos em uma faixa
  • Usando esses dados para criar um nível
  • Usando esses dados para criar efeitos

Detectando um bumbo em uma faixa e usando esse som como gatilho.


Para começar a trabalhar na determinação dos parâmetros da faixa, você precisa selecionar a música. Para facilitar o trabalho, você precisa de uma faixa na qual haja um barril óbvio e, de preferência, transições nítidas em volume. Eu escolhi a faixa Perturbator - Future Club , que você pode ouvir no jogo Hotline Miami 2: Wrong Number.


Aqui está uma pequena análise da entrada dessa faixa (a faixa de áudio foi especialmente reduzida)



  1. O chamado fade in, ou introdução. Neste momento, a faixa aumenta de volume.
  2. A principal força de choque aparece - o barril. Os momentos da aparência do barril são muito fáceis de ler na representação visual da faixa de áudio. Além disso, um sintetizador de fundo soa aqui e seu ruído é visível na faixa. Se a pista não tivesse sido comprimida, teria sido ainda mais clara. (detalhes sobre compactação aqui )
  3. Um sintetizador adicional aparece, o que diminui levemente a clareza da representação visual do barril
  4. Uma pausa que aparece antes de um momento brilhante na faixa (soltar).
  5. A parte principal, onde, além do barril, aparece um sintetizador de baixo, o que distorce bastante a representação visual do sinal, mas o barril ainda pode ser distinguido.

Portanto, nossa principal tarefa é determinar em que ponto nosso barril soa. Essa é uma tarefa bastante difícil, para a qual geralmente são usadas bibliotecas de áudio especiais. Lembre-se, se houver opções prontas, e você tiver o objetivo de fazer um efeito, e não estudar o tapete. parte, faça opções prontas. Se seu jogo tiver um orçamento e US $ 25 extras, você poderá comprar um ativo especial do desenvolvedor 3y3net, chamado Beat Detection . Além disso, você pode considerar uma ótima opção do desenvolvedor Allan Pichardo . Se você quiser entender como esses algoritmos funcionam, é claro, escreva você mesmo do zero.


Como vimos na faixa de áudio, uma batida é sempre claramente distinguida pelo nível de som. Essa é a sua essência. Os músicos processam e compactam a faixa especialmente para que a batida não fique entupida com outros sons e tenha seu lugar na faixa de frequência da faixa. O bit é sempre mais alto que o nível médio de volume (Média). Se o som for mais alto que um determinado limite (Threshold), então, apenas olhando para a exibição gráfica da onda sonora, podemos dizer com confiança "Sim, isso é um pouco!".



Gostaria de apresentar uma descrição técnica mais detalhada e algoritmos específicos para determinar um pouco em um artigo separado (será publicado depois de um tempo), pois esse tópico vai muito além do escopo deste material. Em resumo, nesses algoritmos, o som passa primeiro pelos filtros para facilitar o processo, após o qual a dinâmica da energia sonora é analisada. Aqui está um exemplo de um algoritmo desse tipo (atenção, matlab!) .


Uma descrição matemática completa desse algoritmo pode ser encontrada neste artigo: Projeto e implementação de um algoritmo do Beat Detector .


Portanto, vamos imaginar que fomos capazes de escrever um script que determina em tempo real em que ponto um barril é acionado. Além disso, com a ajuda do algoritmo, também podemos determinar o BPM geral e entender onde o ritmo principal "bate" conosco. O que podemos fazer com as informações recebidas?


Você pode usar o Beathazard como exemplo e garantir que, para cada batida do ritmo principal, nossa nave atire com um laser convencional comum e, quando o cano atinja, atire com um super laser. Será algo parecido com isto:



Além disso, podemos adicionar mais promoções. efeitos E faça o nível pulsar junto com o bit:



O mesmo algoritmo que determina o bit em tempo real, podemos usar para calcular o BPM (batimentos por minuto ou o número de batimentos por minuto). As informações de BPM podem ser usadas, por exemplo, para gerar níveis de dificuldade e calcular pontos de bônus. Se a pista for rápida (150-180 BMP), o jogador receberá um bônus X5, etc.


Determinando momentos calmos e altos em uma faixa


Uma maneira de determinar momentos altos e silenciosos é processar a faixa com um filtro passa-baixo e obter uma média móvel para o nível de volume. Depois disso, podemos salvar esse nível de volume em um formato conveniente para nós, por exemplo, em uma matriz flutuante.


, . , , , . , . , .



.


, , , , ( ). , , 2D-? . :



3D, 2D . , Audiosurf , .



Elastomania, ? !?


, , , - .


Conclusão


, , . , , , , . , , , . , , . Unity. !



Links úteis


Source: https://habr.com/ru/post/pt429872/


All Articles