使用球谐函数建立复杂的声场


16

我今天在工作中讨论如何改善室内声学建模。有人建议在这个问题上做的工作很少,而图形方面的工作却很少。进一步建议,由于声音和光只是波形,因此可能可以使用光线追踪和无线电之类的方法获得良好的近似值。

在这一点上,我开始考虑球谐函数来模拟这种行为。您可以同时进行镜面反射以及建模为漫反射的音频散射。作为奖励,您还会遇到阻碍声音传输的障碍。唯一的问题是如何处理多个频率的衰减。当然可以通过对音频频谱(FFT)进行某种形式的转换来建模。

无论如何,任何人都不会知道有关此主题的任何论文,尤其是有关如何实时执行的论文。如果没有人得到任何建议或有用的一般信息?


1
这让我想起了独立游戏《魔鬼的音叉》:indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html(观看视频以获得很好的感觉!)
Ricket

Answers:


5

是的,这是个好主意。 Malham已经基于Menzies的一些评论(早在1999年!)就已经撰写了一篇论文。

还要注意Nosal的MASc论文讨论了使用光能传递性进行声学处理。

至于照明(它具有3组功能,一组用于R,一组用于G,一组用于B),您需要为要表示的每个粗糙频带执行不同的一组“ SH”功能(例如,针对一组)低频(60Hz-1kHz),其中一种用于1kHz-2kHz中频,一种用于10kHz-20kHz高频,等等)。让所有低于60Hz的东西通过所有东西(这几乎是现实生活中的声音)

您需要对每种材料的声反射能力进行建模,就像每种照明材料对RGB的响应不同一样。


3

这听起来像是一个有趣的问题,尽管我想知道在人们无法分辨之前您需要多少精度。无论如何,这个答案集中在“实时”部分,但是我不了解任何论文,因为这不是我研究过的东西。

显然,如果要使用移动声源实时准确地计算出反射率,则使用图形卡计算反射率最快。例如,如果您同时运行一个简化版本的世界,则可以使用它来将“反射模式”渲染到纹理或立方体贴图,并从该纹理推断出应该如何输出声音。该模型中的声音(或声音的单独频带)将是点光源。仅使用基本反射(1次反射),您可能会发现您不再需要任何精度,而这应该非常快,尤其是在简化几何体和降低分辨率的情况下。不过,我不确定一个图形卡上的多个场景是否存在性能问题。

深入到我鲜为人知的领域,BSP树似乎对于弯曲拐角的波浪很有用,因为(我认为)它定义了体积及其与其他体积的连接。

根据情况,进一步的优化将是缓存上述测试的结果。例如,存储可以根据播放器的方向旋转但不能完全重新计算的声音的立方图,或者存储可以根据播放器的位置在其间进行插值的两个立方图。


令我印象深刻的是,您可以得到镜面反射和漫反射以及“弯曲的圆角”和光遮挡器,几乎都可以以某种方式自由地使用球谐函数...
Goz 2010年

好吧,在实际上开始理解什么是球谐函数及其应用之后,图形卡部分(第2段)就变得无关紧要了。假设您有相当的第三人称/第一人称游戏,那么有关BSP树的内容可能仍然有用,因为它通常是关卡的简化几何体。(类似于AShelly链接的论文中的“单元格邻接图”)。不重新计算每个帧也可以节省一些处理。
Toeofdoom


2

我实际上没有尝试过,但是我一直想知道是否可以将诸如光传播体积之类的方法用于音频。在光传播体积中,使用较小的3d纹理(我相信是32x32x32),其中光的反弹和遮挡是通过填充3d纹理来模拟的。由于它使用球谐函数,因此也许也可以用音频来做到这一点。我不是音频专家


2

康奈尔大学计算机图形学程序的道格·詹姆斯(Doug James)在对环境中的声音进行精确建模方面做了很多工作。但是,他的大多数论文都处理特定的声音生成器案例(薄壳物体,火焰等),它们可能还不够高效,无法实时完成游戏中必须完成的其他任务。

但是,可能需要您通读其中的一些内容。它可能为您提供有关如何进行和/或修改他的方法的想法,以使其更粗糙但效率更高以实现实时性能。

他的网站在这里:

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

特别令人感兴趣的可能是他的“谐波流体”和“谐波壳”论文。


1

我也考虑了一下。我感到最主要的担心(就真实性/性能取舍而言)是,您的耳朵在空间上不如您的眼睛,并且很容易接受某些可能不像您的眼睛所需要的现实。极有可能在本地环境中对声音进行完美建模是过大的尝试-EAX可能“足够好”。

在封闭的环境(例如Quake)中,我首先将计算每个房间的两个属性:“传递”和沉浸式:

传递会指示声音在此房间中的传播方式会受到怎样的影响,并且最有可能计入参数均衡器(理想情况下,您会在每个房间中添加回声/混响,但您的EAX芯片可能没有那么大的带宽)。参数均衡器还将最终模拟声音衰减。

通过将房间分成九个立方体(可能甚至只有一个就足够)来计算沉浸感,并从该角度计算本地声音属性。这些参数将在EAX环境中使用。

最终,您的每个房间都将通过图形连接起来,其中图形中的每个点都是连接每个房间的门户。

当声音触发时,您将进行洪水填充(不进行A *搜索)并跟踪传递和行进距离。当声音到达播放器时,您将排队等待将来播放。根据行进的距离。您可能会跟踪通过的图形点的数量,并最终“剔除”声音(换句话说,就是连续填充)。您可能必须使用CUDA来执行此操作,因为它可能会束缚CPU。

播放声音时,您将使用3D声音API(OpenAL)并将其放置在其进入的门户中,然后您将找出播放器当前所在的9个立方体中的哪个,并应用该EAX环境。

整洁的事情是,如果您的环境足够复杂,您将获得免费的“全局”回声,并且播放器将感知到来自正确方向的声音。如果您希望EAX环境正确,那么效果将令人信服,使大脑能够接受。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.