Sound(音效)
重要性仅次于图形组件的是Sound(音效)对象,它属于非常重要的实时技术范畴。 音效是用于在虚拟世界中营造合适的沉浸式体验的重要资源。 其作用是不仅能让用户听得见周围环境,还能分辨出不同地点。 虽然普通的2D环境声可以构建总体氛围,但还不足以动态呈现变化的环境。 而通过采用3D音效,使听者不仅能下意识地估测自身到音效源的距离,还能准确找出该音效源的位置,因此,用户也就能在理解的基础上很好的体验场景了。 此外,Unigine引擎几乎支持无限数量的音效源。 您可以让整个声波世界来代表经音响师之手所创造的现实。
音效的应用可以说是潜力无限。 它可用来指示某种建筑特性。 例如,隆隆的回声预示着高高的穹顶下有某种事情要发生。 石头的轻轻拍打声则证明有人在不加注意地走路,或者是小汽车正以闪电般的速度飞快移动 — 所有的这些都可以从听觉层面来塑造。 Unigine引擎可通过对象间的联系来分配要播放的音效,从而在声音层面模拟对象的物理属性。 对移动的音效源而言,比如说小汽车,会为其应用Doppler Effect(多普勒效应),从而使相对于听者的音效源的运动是被真实模仿的。 声音环境中的所有这些变化为我们的大脑提供了更多有关对象(Objects)所处方位以及如何准确移动的特定信息。 通过音效,使我们不仅能在头脑中构建场景,还能感知场景。
音频素材的表现和品质本质上是赋给了虚拟世界,因此,开发者们(比如说影视创作者们)想要在他们的作品中拥有对自己所用工具的完全控制权也就顺理成章了。 Unigine引擎提供有如下对象可用于在3D环境中定位声音:
- Sound Source(音效源)代表了定向的或全向的音效源。
- Sound Reverb(混响)代表了音效的混响区。
通过一组通用的双扬声器以及多通道音频系统就可以营造3D音效。
加载音频
开发者们要想将音频素材添加进他们的作品中,那遇到的第一个问题就是如何来加载声音,当然这里指的音频不是那些动态合成的。 在游戏中大体上有两种加载声音的方式:
- 可以从文件中完整地加载声音。 这是一种比较传统的做法,其好处是所有必要的音频资源随时可用,且在上传时不存在时间延迟问题。 但这种方法只适合时长短的声音,原因就在于它比第二种方法更耗费内存。
- 可以从某个存储单元串流声音,例如,从远程主机串流声音。 对于这种情况,音频数据先会以一个一个数据块的形式被读入特定缓冲区,之后再通过缓冲区将音频播放给用户。 在声音回放期间,会逐步更新缓冲区。 尽管这一方法增加了磁盘的吞吐量或是加重了整体的网络负荷,但它仍然不失为一种适用长音轨的有效解决方案。
Unigine引擎支持如下音效文件格式:
- WAV(单声道和立体声)
- Ogg Vorbis(或Oga,指的是Ogg中的音频编码部分)
音频API
Unigine引擎兼容由Creative Labs公司出品的,支持该公司推出的环境音效扩展集(EAX)技术的声卡产品。 EAX中提供了大量的音频预设,可用来更快更准确地模拟音频环境。 有了它,音效设计师就可以借助其中的预设或是通过创建专属预设的方式来使用多个参数描绘环境,音效源和听者。 当环境发生改变时,预设也跟着改变,并且为了能实现平滑过渡,这些预设的存储值也会被执行插值计算。
想操纵这些参数,预设,以及执行所有像距离衰减,多普勒效应等等这些必要计算,就要使用另一种API集:OpenAL,这是一个跨平台的开源3D音频库。 它同样支持非EAX音频技术。