我也考虑了一下。我感到最主要的担心(就真实性/性能取舍而言)是,您的耳朵在空间上不如您的眼睛,并且很容易接受某些可能不像您的眼睛所需要的现实。极有可能在本地环境中对声音进行完美建模是过大的尝试-EAX可能“足够好”。
在封闭的环境(例如Quake)中,我首先将计算每个房间的两个属性:“传递”和沉浸式:
传递会指示声音在此房间中的传播方式会受到怎样的影响,并且最有可能计入参数均衡器(理想情况下,您会在每个房间中添加回声/混响,但您的EAX芯片可能没有那么大的带宽)。参数均衡器还将最终模拟声音衰减。
通过将房间分成九个立方体(可能甚至只有一个就足够)来计算沉浸感,并从该角度计算本地声音属性。这些参数将在EAX环境中使用。
最终,您的每个房间都将通过图形连接起来,其中图形中的每个点都是连接每个房间的门户。
当声音触发时,您将进行洪水填充(不进行A *搜索)并跟踪传递和行进距离。当声音到达播放器时,您将排队等待将来播放。根据行进的距离。您可能会跟踪通过的图形点的数量,并最终“剔除”声音(换句话说,就是连续填充)。您可能必须使用CUDA来执行此操作,因为它可能会束缚CPU。
播放声音时,您将使用3D声音API(OpenAL)并将其放置在其进入的门户中,然后您将找出播放器当前所在的9个立方体中的哪个,并应用该EAX环境。
整洁的事情是,如果您的环境足够复杂,您将获得免费的“全局”回声,并且播放器将感知到来自正确方向的声音。如果您希望EAX环境正确,那么效果将令人信服,使大脑能够接受。