有了那么多 新功能概述2017.1 “新特性”,您在迁移到 Wwise 2017.1 时注意几件事。
在 Wwise 2017.1 中听者现在是游戏对象了。现在 8 个听者的限制也已不复存在,API 也进行了简化,以删除只在听者上运行的调用——它们现在可在任何游戏对象上运行。在 Wwise 中使用多个听者的游戏需要为每个听者注册一个游戏对象——它们现在对每个听者都会进行完整混音。
总线不再是全局实体,它们可以用类似 Actor-mixer 层级结构中声部的方式进行多次实例化。现在可以在属于混音总线的参数上设置游戏对象范围的 RTPC。但是,要注意到总线一般性设置选项卡中的“声部”参数属于播放声部的游戏对象,而不是总线的游戏对象。
关联到总线实例的游戏对象是由两点结合而决定的:Wwise 工程中的Enable Positioning属性,以及由游戏定义的发声点-听者关联。请参阅 设计工具中的行为或‘Positioning Enabled(已启用定位)’标志已经变更 和 构建 Voice Graph 的算法已更改 了解更多详情。动态信号联通和 3D 定位总线现在在 Wwise 中成为了可能,但是,基本的设置会有不同的声源从一个或更多“发声点”游戏对象进行播放,并且整个混音总线链在另一个游戏对象“听者”上播放。
Wwise 不会为你提供游戏对象。想要迁移到 2017.1 并拥有相应的行为,需要在初始化时注册一个游戏对象,并将其设置为默认听者。
AkGameObjectID MY_DEFAULT_LISTENER = 0; // 注册主要听者。 AK::SoundEngine::RegisterGameObj(MY_DEFAULT_LISTENER, "My Default Listener"); // 将一个听者设置为默认。 AK::SoundEngine::SetDefaultListeners(&MY_DEFAULT_LISTENER, 1);
指派一个游戏对象作为默认听者只是为了方便。这样做就不需要在注册之后的游戏对象后调用 SetListeners()
——会有默认听者被自动指派为它们的听者。
请注意,如果您使用 SoundFrame,那么就不需要访问 AK::SoundEngine::SetDefaultListeners
API,而是需要直接调用 SetListeners()
。
当通过 API 来设置一个游戏定义的发送时,现在需要填写一个附加字段来指定哪个游戏对象将收取这次发送(需要辅助总线 ID 和游戏对象 ID 两者来确定一个混音总线实例)。在设置游戏定义的辅助发送时指定游戏对象也是一种添加发声体-听者关联的方式。这比较类似于 SetListeners()
API,它会为主总线输出定义发声体-听者关联(也叫做“干路径”)。
AkGameObjectID myListenerID = 1; AkGameObjectID myEmitterID = 123; AkAuxSendValue auxSendVal; // 必须指定 listenerID。 auxSendVal.listenerID = myListenerID; auxSendVal.auxBusID = AK::SoundEngine::GetIDFromString(“MyAuxBusName”); auxSendVal.fControlValue = 1.0f; AK::SoundEngine::SetGameObjectAuxSendValues(myEmitterID, &auxSendVal, 1);
为了方便,可以把 listenerID 字段设置为 AK_INVALID_GAME_OBJECT,这样就会让声音引擎直接使用那些已用 SetListeners()
或 SetDefaultListeners()
API 指定的听者。这个功能有助于代码迁移以及最常见的辅助发送场景,这样可以让听者与直接输出的听者相同。
在 Wwise 2017.1 中,总线可以辅助发送到其他总线,这打开了信号通路方面的创新大门。就像声部一样,辅助发送可以由用户定义,也可以由游戏定义。当从总线中创建辅助发送时,有几件事需要牢记:
设计工具中的 Enable Positioning(启用定位)标志现在有了一个很重要的目的:它会决定是否要在声部图中该节点处评估当前游戏对象的发声体-听者关联。此外,2D 声像摆位器已脱离 Enable Positioning 标志;现在可以不用定位声音直接进行声像摆位。而且,现在可以有 Positioning Enabled 的 2D 声音了;这意味着我们将会评估发声体-听者关联(下游节点将在别的游戏对象上),但不会进行 3D 空间化。以下是一些 Enable Positioning 标志使用的例子:
|
Note: 如果您在 Voice Graph 中出乎意料地看到了 Master Audio Bus 的两个实例,那么它很可能表示您在信号链中某处忘了设置 Enable Positioning 标志。 |
在 2017.1 版之前,播放声音时构建的声部图完全由 Wwise 工程指定,游戏能控制的部分非常少。在 Wwise 2017.1 中,声部图基于两点的结合:由 Wwise 工程中的层级所定义的通路,以及游戏中定义的发声体-听者关联。构建声部图的算法可以总结为以下:
定义声音通路的规则可能比较复杂。在 Wwise Advanced Profiler 中的新声部图现在会根据游戏对象来对节点进行分组,在针对通路问题进行调试时是极为有用的工具。
为了保持一致性,AkGameObjectID
现在在所有平台上都是 64 位,包括原生 32 位平台。
游戏对象 ID 现在可以是任意 64 位无符号整数,范围是从 0 到 0xFFFFFFFFFFFFFFDF(它是 -33,一个有符号的整数)。游戏对象 ID 范围 0xFFFFFFFFFFFFFFE0(-32)到 0xFFFFFFFFFFFFFFFF (-1) 是保留给内部使用的。transport 游戏对象,由设计工具注册,现在使用的游戏对象 ID 是 0xFFFFFFFFFFFFFFFE(-2)。
随着游戏对象和听者系统的变更,Watch 不再兼容,并将被重置。
使用官方 2017.1 之前版本所构建的插件与 Wwise 2017.1 不兼容。它们需要重新构建。
以下这些标志不再需要,所以它们被移除了。
AkPluginInfo::bIsAsynchronous
AkFileSystemFlags::bIsFromRSX
在 Wwise 2017.1 之前,声音引擎会对 Random 和 Sequence Containers 的 Trigger Rate 的 Transition Time 做值域限制,使这个时间不可能小于 22 ms。我们移除了这一限制来鼓励更有创意的内容。
Metro 平台重命名为 Universal Windows Platform,并且也支持 Visual Studio 2017。
不再为所有发声体-听者对进行球坐标的系统计算。因此,它们不再直接从 AkEmitterListenerPair
中可用。Azimuth()
和 Elevation()
属性访问方法已被移除。使用 AkEmitterListenerPair
球坐标的插件和游戏代码将需要调用新服务 AK::IAkGlobalPluginContext->ComputeSphericalCoordinates()
来获取坐标。推荐的方法是使用笛卡尔(Cartesian)坐标和接受笛卡尔变换的 AK::IAkMixerPluginContext::Compute3DPositioning()
的重载。
使用 UseExisting 选项来导入制表符分割文件时的行为已经变更了。和以前一样,如果某处的 Wwise 已经存在,那么它会被重新使用。但是,如果找到了匹配的对象,而且声源的 WAV 文件名不同,那么新的声源将被作为非活动版本导入。
ak.wwise.core.object.get
中添加了 where
变换。请参阅 transform 了解更多信息。在 ak.wwise.core.object.create
中添加了新的 merge
模式。请参阅 理解名称冲突模式 了解更多信息。
ak.wwise.core.object.create
中创建 Virtual Folder(虚拟文件夹)的支持。使用 Folder
类型。请参阅 ak.wwise.core.object.create 了解更多信息。ak.wwise.core.object.preDelete
重命名为 ak.wwise.core.object.preDeleted。
ak.wwise.core.object.postDelete
被重命名为 ak.wwise.core.object.postDeleted。
ak.wwise.core.object.create
中创建 Events 和 Event Actions 的支持。ak.wwise.core.object.get
的支持。请参阅 ak.wwise.core.object.get 了解更多信息。ak.wwise.core.object.nameChanged,ak.wwise.core.object.notesChanged,ak.wwise.core.object.created,ak.wwise.core.object.preDeleted,
ak.wwise.core.object.postDeleted,ak.wwise.core.object.childAdded,ak.wwise.core.object.childRemoved,ak.wwise.core.object.curveChanged,ak.wwise.core.object.attenuationCurveChanged,
和
ak.wwise.core.object.attenuationCurveLinkChanged
中返回选项的支持。