Utilisation d'harmoniques sphériques pour créer des paysages sonores complexes

16

J'avais une discussion au travail aujourd'hui sur la façon d'améliorer la modélisation acoustique de la pièce. Il a été suggéré que très peu de travaux semblent avoir été effectués sur le sujet, mais que des tonnes ont été réalisées sous forme graphique. Il a également été suggéré que le son et la lumière n'étant que des formes d'ondes, il pourrait être possible d'utiliser des éléments comme le lancer de rayons et les radios pour obtenir une bonne approximation.

À ce stade, j'ai commencé à penser aux harmoniques sphériques pour simuler ce comportement. Vous pouvez simultanément effectuer des réflexions spéculaires et une diffusion audio modélisée sous forme de réflexions diffuses. En prime, vous obtiendrez également des obstructions bloquant le transfert du son. Le seul problème était de savoir comment gérer l'atténuation de plusieurs fréquences. Bien que cela puisse être modélisé en appliquant une certaine forme de transformation au spectre audio (FFT).

Quoi qu'il en soit, quelqu'un connaît-il des articles sur ce sujet, en particulier sur la façon dont il serait effectué en temps réel. A défaut que quelqu'un ait obtenu des conseils ou des informations générales utiles?

Goz
la source
1
Cela me rappelle le jeu indépendant Devil's Tuning Fork: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html (regardez la vidéo pour vous en faire une idée!)
Ricket

Réponses:

5

Ouais, c'est une bonne idée. Malham a déjà écrit un article à ce sujet, basé sur certains commentaires de Menzies (en 1999!).

Notez également la thèse MASc de Nosal sur l'utilisation de la radiosité pour l'acoustique.

Quant à l'éclairage, (qui fait 3 ensembles de fonctions, un pour R, un pour G, un pour B), vous devez faire un "ensemble" différent de fonctions SH pour chaque bande de fréquence approximative que vous souhaitez représenter (disons une pour basse fréquence, 60Hz-1kHz, une pour 1kHz-2kHz moyenne, une pour 10kHz-20kHz élevée, etc.). Laissez tout en dessous de 60 Hz traverser tout (ce qui est à peu près ce que fait le son dans la vraie vie)

Cependant, vous devez modéliser les capacités de réflexion acoustique de chaque matériau, tout comme les matériaux éclairés réagissent chacun différemment au RVB.

bobobobo
la source
3

Cela semble être un problème intéressant, bien que je me demande de combien de précision vous aurez besoin avant que les gens ne puissent pas le dire. Quoi qu'il en soit, cette réponse se concentre sur la partie "en temps réel", mais je ne connais aucun document car ce n'est pas quelque chose que j'ai étudié.

Évidemment, si vous voulez calculer cela avec précision en temps réel, avec des sources sonores mobiles, le calcul de la réflexion serait plus rapide en utilisant la carte graphique. Par exemple, si vous disposez d'une version simplifiée du monde qui s'exécute simultanément, vous pouvez l'utiliser pour restituer des «motifs de réflexion» à une texture ou à un cubemap et déduire de cette texture comment vous devez produire le son. Les sons (ou bandes de fréquences distinctes de sons) dans ce modèle seraient des sources lumineuses ponctuelles. Avec seulement des réflexions de base (1 rebond), vous constaterez peut-être que vous n'avez pas besoin de plus de précision de toute façon, alors que cela devrait être très rapide, en particulier avec une géométrie simplifiée et une résolution réduite. Je ne suis pas tout à fait sûr s'il y a des problèmes de performances avec plusieurs scènes sur une même carte graphique.

Pour aller plus loin dans des domaines que je connais peu, un arbre BSP semble être utile pour les vagues qui se plient dans les coins car (je pense) il définit les volumes et leurs connexions à d'autres volumes.

Selon la situation, une autre optimisation serait de mettre en cache les résultats des tests ci-dessus. Par exemple, le stockage d'un cubemap de son qui pourrait être tourné en fonction de l'orientation des joueurs mais pas recalculé entièrement, ou deux cubemaps que vous pouvez interpoler entre en fonction de la position du joueur.

Toeofdoom
la source
Cela me frappe cependant que vous puissiez obtenir des réflexions spéculaires et diffuses ainsi que des "coins arrondis" et des occluseurs pour, à peu près, gratuitement en utilisant des harmoniques sphériques d'une manière ou d'une autre ...
Goz
D'accord, après avoir réellement commencé à comprendre ce que sont les harmoniques sphériques et comment elles s'appliquent, la section de la carte graphique (paragraphe 2) est assez hors de propos. Le bit sur un arbre BSP peut toujours être utile, en supposant que vous ayez un jeu assez 3e personne / 1ère personne, car il s'agit généralement d'une géométrie simplifiée pour un niveau. (similaire au "graphe d'adjacence cellulaire" dans l'article AShelly lié). Le fait de ne pas recalculer chaque image pourrait également économiser du traitement.
Toeofdoom
2

Je n'ai pas vraiment essayé cela, mais je me suis toujours demandé si une approche telle que les volumes de propagation de la lumière pouvait être utilisée pour l'audio. Dans les volumes de propagation de la lumière, une petite texture 3D est utilisée (32x32x32 je crois) dans laquelle les rebonds de lumière et les occlusions sont simulés en inondant la texture 3D. Puisqu'il utilise des harmoniques sphériques, il pourrait également le faire avec l'audio. Je ne suis cependant pas un expert audio

Sander van Rossen
la source
2

Le programme d'infographie de Doug James de Cornell a fait beaucoup de travail dans la modélisation précise des sons dans un environnement. Cependant, la plupart de ses papiers traitent de cas spécifiques de générateurs de sons (objets à coque mince, flammes, etc.). Ils ne sont probablement pas non plus assez efficaces pour effectuer en temps réel les autres tâches de votre jeu.

Cependant, il peut être utile pour vous de lire certains d'entre eux. Il peut vous donner des idées sur la façon de procéder et / ou de modifier ses approches pour être plus grossier mais suffisamment efficace pour des performances en temps réel.

Son site est ici:

http://www.cs.cornell.edu/~djames/

Ses articles sur les «fluides harmoniques» et les «coquilles harmoniques» pourraient être particulièrement intéressants.

coderunner
la source
1

J'ai également réfléchi à cela. Je pensais que la principale préoccupation (en termes de compromis réalisme / performance) était que spatialement vos oreilles soient inférieures à vos yeux - et acceptent assez facilement quelque chose qui pourrait ne pas être aussi réaliste que vos yeux auraient besoin. Il y a de très bonnes chances que tenter de modéliser parfaitement le son dans l'environnement local soit exagéré - EAX est probablement «assez bon».

Dans un environnement fermé (par exemple Quake), je calculerais tout d'abord deux propriétés de chaque pièce: la «transferrance» et l'immersion:

La transferrance indiquerait comment le son serait affecté par le déplacement dans cette pièce et compterait très probablement pour un égaliseur paramétrique (idéalement, vous ajouteriez un écho / réverbération de chaque pièce, mais votre puce EAX pourrait ne pas avoir autant de bande passante). L'égaliseur paramétrique simulerait également en fin de compte l'atténuation du son.

L'immersion serait calculée en divisant la pièce en neuf cubes (éventuellement, même un seul pourrait suffire) et en calculant les propriétés sonores locales dans cette perspective. Ces paramètres seraient utilisés dans l'environnement EAX.

Enfin, chacune de vos chambres serait connectée par un graphique, où chaque point du graphique représente les portails reliant chaque chambre.

Lorsque le son se déclenche, vous effectuez un remplissage (pas de recherche A *) et gardez une trace du transfert et de la distance parcourue. Lorsque le son atteint le lecteur, vous devez le mettre en file d'attente pour jouer à un moment donné dans le futur; en fonction de la distance parcourue. Vous pouvez garder une trace du nombre de points du graphique passés et éventuellement «éliminer» le son (en d'autres termes, un remplissage continu de l'inondation). Vous devrez peut-être utiliser CUDA pour ce faire car il pourrait être lié au processeur.

Lorsqu'un son est joué, vous utilisez une API de son 3D (OpenAL) et le placez sur le portail par lequel il est entré, vous découvrirez alors dans lequel des neuf cubes le joueur se trouve actuellement et appliquerez cet environnement EAX.

La chose intéressante ici est que si votre environnement est suffisamment complexe, vous obtiendrez des échos «globaux» gratuits et les joueurs percevront le son venant de la bonne direction; et si vous obtenez l'environnement EAX correct, j'espère que l'effet sera suffisamment convaincant pour que le cerveau l'accepte.

Jonathan Dickinson
la source