最近我最主要的特征是逢人就念叨:“卡马克错了。”(嗯,在Bungie工作还是很富有生趣的)
在今年(2004 年)GDC的主旨演讲上,卡马克大神提到时下的游戏音效得益于处理能力来解决,而未来两年内将得到彻底解决。虽然从技术上讲,此说成立(用DSP我们能模拟很多东西),但这番话忽略了游戏日益增长的数据瓶颈。虽然图像是游戏最光彩夺目的一面,但声音目前是,而且将一直会是游戏中所占容量最大的一部分。至少好游戏都是如此。
以下是有关游戏音效的一些惊人事实。我们假设一款游戏同步播放256个单声道音效。根据今天游戏行业的标准,假设采样率(sample rate)为44.1kHz,稍稍高出“Nyquist人耳听力范围”标准,采样的数据大小为16位(2 bytes)。
那么,该游戏音效每秒种要播放256个独立的声音,每秒就必须占用(声道数)x(采样率)x(采样大小)=256x44100x2bytes=22.5MB的数据空间。
当然,一般情况下不需要那么多音效。那么我们就算一般的游戏过程中,每秒平均需要40个独立的声音同步播放。那么带宽就从22.5MB/s降低到3.5MB/s。目前游戏使用的硬件压缩能进一步把带宽降低到1MB/s。
看起来还比较合情合理。但不幸的是,如果我们要连续播放40秒以上的声音,我们就需要更多数据。实际上,要多出许许多多。Halo一代的游戏音效数据在未经压缩的状态下,一共有2.5GB,22kHz和44kHz兼有。压缩后约为700MB,每个关卡大约有150-200MB数据。
200MB 的数据听起来也不可怕。但既然没有人能真正精打细算地用足声音内存,那我们就必须实现存储媒介上声音“流”播放(流媒体那样的边读取边播放)。而且我们必须完美地实现什么声音该在什么时候放(实际上因为游戏多变的环境,不可能做到这一点)——我们需要的是:要么有更多的声音缓存,要么有真正随心所欲的磁盘读取速率。不幸的是,大多数存储设备都是针对区块读取而优化的,而且也从来没有人愿意把更多的内存留给声音,真是让我们求生不能求死不得。我能解决一些问题,但通常解决这种问题的办法(压制声音数据的容量)并不尽人意。
就算内容/数据的问题解决,想营造一个令人信服的声音环境所消耗的计算量还是要远远高于图形。要实现真实的声音环境,我们需要混响(reverberation),或者说直白点,回音问题。
混响描述的是一个声音所处的声学环境的反应。举个直白的例子,混响就是你在浴室里唱歌和在轿车里唱歌的区别。更为完整的声音传播过程被展现了出来。
要决定某一个声音的回响效果,我们就需要确定音源和听者之间所有的(传播)路径。这其中包括了音源到听者之间所有直接的路径,加上可以听到的反射路径。如果你真地想做到精确,那么你就要把这些声音归类到不同的频谱。(低频的震动能比高频的传播更远)在游戏图形技术里,同样的问题就是全局光照,目前的游戏都是预先计算出一个静态的光照,用一个总体趋势来逃避问题的复杂性。就算动用全部现有的运算能力也不可能实现以上两者的实时运算。怎么能说有什么已经被“基本解决”了呢。
[当然这不是说我们没有够牛的变通手段。本代的声音硬件(指Xbox/PS2)遵守的是I3DL2标准,所以我们至少还能改善声音品质,当然彻底颠覆听觉的表现就表指望啦。]
这就是我喜欢干声音编程这一行的理由:)
原帖由 hugang 于 2008-6-12 18:27 发表
Halo一代的游戏音效数据在未经压缩的状态下,一共有2.5GB,22kHz和44kHz兼有。压缩后约为700MB,每个关卡大约有150-200MB数据。
PC版HALO果然渣啊,我记得整个游戏都不到700MB,可见压缩成什么鸟样了:D
原帖由 csitd 于 2008-6-12 18:39 发表
我知道你的意思,音源当然越多越好和声道无关,但是耗费了巨大人力物力,如果要准确还原还需要大量运算资源的东西,最后因为只有少数人用达标的多声道高品质音响系统导致这些效果都大打折扣,短板效应太明显了
欢迎光临 TGFC Lifestyle (http://club.tgfcer.com/) | Powered by Discuz! 6.0.0 |