物理完美(或附近)的3d声音引擎[关闭]


11

我是游戏编程的新手,尽管我在控制台/网络开发方面有多年的经验。我的问题不仅仅在于找不到所需的内容,还在于我没有真正执行成功搜索的术语。

我正在寻找一个非常注重声音的物理引擎。实际上,我一点也不在乎。我的意思可以通过一个例子更好地解释:

假设一个第一人称游戏。您正对着北方,周围有人向您扔笛子(请不要理会这种情况的荒谬性)。笛子在前进的过程中旋转,通过其孔发出声音。有一阵风,南下五节。

我想象一个物理引擎将能够计算出长笛的轨迹以及击中笛子后的方向。我想要的是让物理引擎从任何听众的角度计算将发出的精确声音。

是否存在这样的引擎?如果有几个,那么上面的示例哪一个最好?

Answers:


10

您在问错问题。您正在犯许多新游戏程序员所犯的错误。游戏不是完美的模拟,甚至还不完美。游戏模拟得足够有趣/有趣。其他所有东西都是假的。

案例:
粘胶世界:模拟质量,抗张强度和弹性。其余部分是伪造的,因为它不会增加游戏的感觉。例如,它不模拟重力。所有物体均以恒定的力向下加速。博伊西是假的。气球以恒定的力向上拉,水下的粘球也受到恒定的向上力。这一切都对游戏很有用。但是,如果您尝试使用World of Goo的物理引擎制造太空电梯,它就会崩溃。

让我们想象一个接近完美的基于物理的声音引擎。那对环境的影响呢?长笛是在山洞中还是在田野中。引擎是否提供了一组预定义的环境(有多少个?),还是通过计算实际的物理地形来弄清楚(是的)?玩家是否有方向性的耳朵(阿拉人)或只是耳孔(阿拉海豚或外星人)或像动物一样具有多方向性?空气热吗?有多湿。此列表会很快失去控制。

现在假设存在这样一种真正的物理声音引擎。您真的要用它来制作游戏吗?您需要多长时间才能确定长笛在空中飞舞的声音。您必须正确设置多少个参数(100?)。

您应该问的是:
当长笛飞过播放器时,如何模拟长笛的声音?

OpenAL可以做您想要的。

  • 定向听众
  • 定向声源
  • 源速度和多普勒效应。

我建议重复吹奏长笛的声音效果。输入演奏者位置和长笛的位置/速度。暂时跳过定向内容。
您可以记录长笛两端流过的声音,让长笛使用两个声源。但是我怀疑,除非整个游戏机制都围绕投掷和旋转的长笛旋转,否则是否值得付出努力。


好吧,整个游戏的想法都围绕着移动物体发出声音。给出的示例故意过于复杂,但是游戏思路的确包含逼真的运动对象。
费利克斯Saparelli

实际上,大多数参数是可以控制的:考虑一个封闭的(密封的)立方房间,该房间的特定材料的壁(我定义的属性),温度,压力,湿度等都可以控制。耳朵是人的。我什至不需要考虑身体的其余部分。实际上,除了可以将其列入黑名单之外,我还可以确切地指定要使用的参数,并定义(恒定)其余所有参数。这是我的(虚拟)世界:我按自己的意愿定义它。
费利克斯Saparelli

我的观点是,在一般情况下,这样的音频引擎需要付出的努力是不值得的。尤其是当有才华的声音工程师可以令人信服地伪造您需要的任何效果时。多普勒是内置的。回声,阻尼等都可以通过滤波来完成。
deft_code 2011年

8

您要进行物理建模吗?尝试综合工具包:

https://ccrma.stanford.edu/software/stk/classstk_1_1Flute.html

您必须编写胶水代码,该代码可自行设置风速/振幅。

您想要的东西还没有真正发明出来。我们已经接近了-检查一下,前几天我看到了:

http://www.physorg.com/news198351307.html


有趣的东西。这就是我的意思,尚未完成并不妨碍我。我不打算在1-2年之前开始对其进行实际的(非概念性的)工作。
费利克斯Saparelli

4

我怀疑您会找到物理音频引擎。更可能的是使用您喜欢的任何物理引擎(例如Bullet)并将OpenAL用于声音。计算长笛的位置,并将其用作源的位置。


我想要的远不止于此。
费利克斯Saparelli

1
您还想要什么?根据我的建议,您可以使声音的位置每帧改变一次。我想我缺少了一些东西。
共产主义鸭子

6
我认为他的意思是模拟气流和其他振动以产生声音。并确保这是可能的,但是没有任何计算机(可能是某些超级计算机集群除外)可以实时计算出任何有用大小的空间,所以没有,如果您的意思是就没有这种东西(也没有任何实际需要,请使用物理引擎并读取碰撞数据以播放适当的样本是“足够接近”)。
Elva

3
如果您想使它更先进,不仅有:a)如Yourdoom所说,普通计算机无法做到,而且b)没有人能够分辨出区别。
共产党鸭子

3
还有很多现代游戏可以做的事情(以及FMOD提供的高级API),OpenAL不能做到,或者至少不能做到即开即用-例如(几何)基于体积的效应器,可以附加使用它门户以模拟通过多个房间的音频。这并不常见,但是已经完成了,您可以分辨出区别。

4

Phya是一个基于“物理采样”的碰撞音频合成库,可以由游戏物理引擎来驱动。(在示例中使用了子弹)

http://www.zenprobe.com/phya/

不知道最新的是什么,最近的站点更新是一年多以前。

它不是特别适合于模拟一个体积中的空气共振,而是可能是一个如何从物理上推动实时音频合成的好例子。

我认为这不必是cpu昂贵的工作,所述问题完全是确定性的,应该可以在现代硬件上实现。(至少达到适合娱乐/学习产品的水平。)

要回答的问题是,您需要模拟多少,您可以伪造多少?对于音频,仅以某种合理的说服力对声音进行某种实时调制即可获得很多,而无需建模直至分子的声振动。

也许这会有所帮助。好问题,顺便说一句。

-j


我可以假很多。只是……比当代电子游戏少得多。关键是:我不是在创建视频游戏,而是在创建音频游戏。金田
费利克斯Saparelli

3

实际上,对此处涉及的物理学进行准确的模拟比像Havok或Bullet这样的常规物理学系统要复杂得多(并且计算量很大)。传统的物理系统针对刚体和软体进行了优化,由于速度原因,它们的网格复杂度均受到限制。

另一方面,声音是波在空气中的传播,像您的示例所产生的频率取决于成千上万的属性。它用什么材料制成?对于与该材料相互作用的空气颗粒,我们应该使用什么数学模型?如果是管形,管的尺寸是多少?(这决定了谐振频率。)等等。

最重要的是,您必须运行相当复杂的粒子模拟以对空气进行建模,并提取粒子运动波,这些运动波实际上是撞击您的耳膜的声波。而且,不要说耳膜,因为耳道中的波的共振也会影响您听到的声音。

总而言之,这对于当前的游戏来说实在是太模拟了,特别是如果您希望交互式帧率的话。正如deft_code指出的那样,游戏很少是准确的模拟,而是光荣的伪造游戏。解决此问题的最佳方法可能是从大量声音样本集开始,然后通过DSP开始运行,直到您了解如何影响这些声音的效果为止。DSP对于实时游戏绝对足够快,并且如果声音是重要组成部分,那么将相当一部分帧时间用于声音处理是很有意义的。

tl; dr:准确的仿真可能在未来许多年内都是不可能的。伟大的游戏会伪造它。有了足够大的样本集和足够的DSP调整,您也可能会伪造它。


2

检查我们的方法。

http://dsp.agh.edu.pl/en:research:rayav

开发的库利用波束跟踪为用户提供逼真的音频听觉化。所有音频效果都是基于给定游戏级别的实际几何形状及其声学特性(声学材料,空气衰减)来计算的。声音随着游戏角色和声源的移动而动态变化。声径创建算法支持镜面反射,漫反射和边缘衍射等现象,而音频处理则支持信号过滤(建模空气倾倒,反射/衍射影响等),多普勒效果建模和空间效果。最后,每个声音路径使用HRTF实现定向声音。


0

我意识到这是一个古老的问题,但是在最近几年中,事情一直在发展,您所描述的内容在计算上变得越来越可行。

诸如综合工具包之类的工具可用于回答以下问题:“我的物理引擎告诉我,笛子以某种方式振动。这会产生什么音符?”

但是,还有另一个主要问题需要回答:“从听众的位置来看,这条音符听起来像什么?”

常见的误解是,像OpenAL这样的音频API会解决这一问题。实际上,他们所做的就是所谓的位置音频。他们没有对声音传播建模声波与环境之间的相互作用。声音传播涉及回答以下问题:

  • 这个房间足够大,可以看到明显的混响吗?
  • 还是房间的家具吸收了大部分声音?
  • 站在户外时,我应该听到远处山丘的回声吗?附近的建筑物?
  • 声音会远距离消散吗?
  • 听众是否遮挡(隐藏)了声源?
  • 如果是这样,声波是否可以使用其他途径到达听众?也许是从封闭的门下面,走廊的拐角处或通过通风孔?

声子是一种音频物理引擎,可以回答这些问题。(全部披露:我参与了Phonon的开发。)使用Phonon,用户需要指定非常小的一组参数(吸收系数和散射系数)。然后,声子只需执行足够的计算,就可以令人信服地为听众重新创建声音传播效果。

Phonon当前可作为Unity的插件使用。除了PC和移动设备外,Phonon还可以在Oculus Rift等VR平台上运行,并且在此方面也有明显的不同。

希望这可以帮助!


0

阅读您的问题时,我可以将其翻译为两种方式。

  1. 是否有可以根据物理模拟产生声音的引擎?例如,空气吹过芦苇,还是锤子敲打琴弦?

在游戏中?不是我听说过的。

  1. 是否有一个引擎可以播放预先存在的声音,但会根据物理信息(例如与麦克风的距离)对其进行修改,以模拟“环绕声体验”?

是! 它们被称为“ 3D声音引擎”,著名的是OpenAL

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.