menu
版本
2022.1.18.8567
2024.1.4.8780
2023.1.12.8706
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
2024.1.4.8780
2023.1.12.8706
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
Wwise SDK 2022.1.18
|
我们可以使用传给 Wwise Spatial Audio 的几何构造来模拟声音的衍射和透射。如此一来,便可完全替代游戏引擎在声障计算中使用的射线投射法。
在发声体和听者之间有物体阻挡时,Spatial Audio 会沿着物体边缘(如有)计算路径,并计算这些边缘周围声波弯曲产生的衍射系数。同时,相应地修改发声体的视入射角,并将衍射值发送给 Wwise,以便控制对声音的最终影响。通常,衍射会造成低通滤波。
此外,Spatial Audio 还会计算声音穿透几何构造的路径。在传播过程中穿透障碍物的声音需要应用透射损失系数。该系数取决于通过 API 指派给几何构造的表面属性。通常情况下,会使用低通滤波器和音量衰减来对透射损失进行建模。
下图为 Wwise 中 3D Game Object Viewer 的截图。它显示了声音在薄壁边缘周围的衍射路径以及透射损失为 100% 的透射路径。
dangerous | 警告: 虽然我们可以使用几何衍射和透射来完全替代游戏引擎在声障计算中使用的射线投射法,但要注意,随着几何构造越来越复杂,占用资源也会逐渐增加。因此,传给 Spatial Audio 的几何构造应尽量简单。另外,为了降低 Geometric Diffraction 的计算复杂度,最好结合运用 Room 和 Portal 抽象概念,这样会更加高效(参见“ 使用房间和门户 ”部分)。 |
几何衍射可用来影响发声体和听者之间的直达声音传播路径。在结合使用 Reflect 时,还可用来影响早期反射路径。
对于传给 Spatial Audio 的每项几何构造集,都要明确声明是否要将其用于计算衍射路径。为此,可使用 AkGeometryParams::EnableDiffraction
标记。此标记方便生成衍射计算所需的边缘数据,其在直达路径的几何衍射和反射路径的衍射中均有应用。
另外,还要考虑是否允许网格的边界边缘衍射声音。对于给定网格,边界边缘被定义为多重三角网格边界上仅与一个三角形相连的边缘。边缘数量越多,衍射计算的复杂度越大。因此,在网格包含不会衍射声音的边界边缘时,应禁用相应选项。
最后还要注意,指派给声学表面的声学材质不会对衍射产生任何影响,因为边缘材料并不吸收能量。边缘只会造成声波弯曲。
在针对声音透射设置几何构造时不用执行额外的步骤,不过可能要针对各种几何构造类型调节透射损失系数。比如,混凝土结构可能会阻挡几乎所有的声音透射,而胶合板材质的几何构造则可能只会阻挡很少一部分声音。
AkGeometryParams::Triangles
数组中的每个 AkTriangle
都包含对 AkGeometryParams::Surfaces
数组的索引 AkTriangle::surface
。AkAcousticSurface::transmissionLoss
字段用于描述要将多少透射损失应用于穿透对应三角形的声音。该字段的取值范围为 0 ~ 1。透射损失会换算为百分比并用来评估 Wwise 曲线。对于具有给定透射损失的声音,最终应用的音量衰减和滤波器值取决于工程中定义的曲线。在默认情况下,使用工程 Occlusion 曲线。自定义透射曲线可在添加到声音的 Attenuation ShareSet 中创建。另外,您还可以将透射损失作为内置参数来加以应用,并将其映射至 RTPC。
如需了解如何使用几何构造来确定直达路径的几何衍射,请参见 Integration Demo 示例中的 Geometric Diffraction 演示(SDK/samples/IntegrationDemo 中)。请转至 Demo Positioning > Spatial Audio: Geometry(演示定位 > Spatial Audio: 几何构造)。
在 Wwise 设计工具的 Positioning 选项卡中,确保选中 Enable Diffraction and Transmission。此复选框用来启用与衍射和透射相关的 Spatial Audio 功能,包括:
AkRoomParams::transmissionLoss
还是与三角形关联的 AkAcousticSurface::TransmissionLoss
。AkSpatialAudioInitSettings::bCalcEmitterVirtualPosition
的情况下,针对衍射路径生成虚拟位置并将其发送到声音引擎来渲染声音。在默认情况下,工程 Obstruction 曲线用于衍射,工程 Occlusion 曲线用于透射。若游戏还通过 AK::SoundEngine::SetObjectObstructionAndOcclusion
设定了声障值或声笼值,则会添加这些值。
可通过向声音添加 Attenuation ShareSet 来创建自定义衍射和透射曲线。使用 Attenuation Editor 创建自定义 Volume、LPF 和 HPF 曲线并在监控过程中进行微调。有关详细信息,请参阅 Wwise Help 的应用衰减章节。
通过适当设置性能分析设置和视图选项,可以在 3D Game Object Viewer 中查看衍射和透射设置(见下图)。
在此,将针对各条衍射边缘显示计算得出的发声体与听者之间路径的衍射系数。您可以通过将所绑定的 Game Parameter 添加到 Game Sync Monitor 来分析内置游戏参数值,并在 Profiler 的 Obs/Occ 选项卡中分析 Obstruction 和 Diffraction。
在 Game Object 3D Viewer 中,会在对应透射路径的旁边显示计算得出的透射损失系数。若透射损失源自于几何构造,则指示碰撞点及相应的透射损失百分比。若透射损失源自于 Room,则显示透射损失百分比并在下方附加 (Room) 文本。
跟 Portal 一样,在发声体位于听者视线之内时,Diffraction 值为 0。在穿过阴影区的过程中,该值不断增大(参见“衍射 ”部分)。有关阴影区衍射的更多详细信息以及如何使用曲线和 Built-in Diffraction Game Parameter 的论述,请参阅“Room 和 Portal”的 衍射 部分。
在使用 Spatial Audio Room 和 Portal(参见“ 使用房间和门户 ”部分)时,Portal 也会对相邻房间内直达声音的衍射建模。这两个系统互为补充,对于与听者不在同一房间的发声体,确保不会搜索几何构造驱动的衍射路径。Room 和 Portal 比几何构造的计算效率高很多。为了降低计算复杂度,最好结合使用两个系统。
如上文所述,早期反射可能会在边缘附近发生衍射。在发声体连通 Reflect 的情况下,Spatial Audio 支持对这一现象建模。
在解释如何建模之前,我们需要先定义可视区衍射。
在下图中,发声体位于听者视线之内,但听者并不在镜面反射路径上。因此,它在可视区。如“衍射 ”中所述,可视区也会出现衍射。不过,在 Wwise Spatial Audio 中,无论是 Room 和 Portal 还是直达路径模型的 Geometric Diffraction,都不考虑可视区的衍射,因为其相较于实际直达路径可以忽略不计。然而,对于反射来说,可视区衍射会产生很大影响。若没有衍射,则只有反射区能听到早期反射(纯镜面反射)。一旦听者进入可视区,反射就会不起作用。在启用衍射后,边缘会衍射反射波。这样在进入和离开反射区时虽然有滤波和衰减,但听者仍可感知到反射。
在反射区中,镜面反射占据主导,没有衍射路径,因此也不会计算衍射值。在反射区和可视区之间的边界处,给定边缘的可视区衍射计算值为 0;在可视区和阴影区之间的边界处,该值为 100。
对于高阶早期反射,同时存在可视区和阴影区衍射。
在 Wwise 设计工具中,针对所有需要反射的声音将所需的早期反射发送设置为带有 Reflect 的辅助总线。有关更多详细信息,请参阅 Wwise 工程设置 。在此,既不需要针对衍射反射专门设置并启用衍射,也不需要为几何构造启用衍射。
在 Reflect 中,受衍射影响的反射将呈现为镜像声源。您可以根据衍射状况使用以下三条曲线来设计衍射对反射的影响:Diffraction Attenuation(衍射衰减)、Diffraction LPF(衍射 LPF)和 Diffraction HPF(衍射 HPF)。有关更多详细信息,请参阅 Reflect 文档。
我们可以结合 Wwise Spatial Audio 中的 Room 和 Portal 使用几何构造 API 来构建反射和衍射模型。为此,可将 Room 和 Portal 网络视为对周围几何构造的上层抽象(或者说细节程度较低)。适当地结合 Room 和 Portal 使用上层几何构造,可以让声学环境的模拟具有一定细节并且高效。
若发声体正在播放声音且正确设置了几何衍射(参见 针对衍射和透射设置声音 部分),但其与听者不在同一 Room,则按照以下方式计算几何路径:
即便有多达两个平面与门户开口相交,反射声也可穿过门户。因为 Portal 本身来说就是声学开口,所以不用在三角形几何构造上另建开口,声音也能穿过。如此一来,便大大减少了所需的三角形数量。比如,在采用箱体构建 Room 的几何构造时,会为六个侧面分别使用两个三角形。若用户希望声音能传到箱体外部,只需添加一个与墙壁相交的 Portal (其 Z 轴垂直于墙面)即可。照例来说,游戏会使用 AK::SpatialAudio::SetGameObjectInRoom
来判定游戏对象是在 Room 内部还是外部(参阅 Room 和 Portal 概述 )。 若发声体正在播放声音且正确设置了反射,但其与听者不在同一 Room,则只要声音位于其传播网络范围内就会执行反射模拟。反射的计算方式如下:
下图举例展示了 Portal 朝向的正确设定。
![]() |
|
![]() |
|
![]() |
|
为了限制射线-三角形相交检测和潜在反射表面的搜索范围,现在可将几何构造手动指派给特定的 Room。为此,请将 AkGeometryInstanceParams::RoomID
设为特定 Room 的 ID。这样可以告知 Spatial Audio,该 Room 内的 Geometry Instance 只能通过 Portal 从另一 Room 看到,无法直接看到。因为一项 Geometry Instance 只能关联一个 Room ID,所以除非将 AkGeometryInstanceParams::RoomID 设为无效,否则 Room 不能包含可在多个 Room 内看到的几何构造。另外,假如几何构造集被关联到了特定 Room ID,那么在该 Room 内便无法再看到未与其明确关联的几何构造。在将 Geometry Instance 指派给 Room 后,在模拟该 Room 内的反射和衍射时,Spatial Audio 仅会查找与对应 Room ID 关联的特定几何构造。