版本

menu_open
Wwise SDK 2021.1.14
射线投射引擎几何构造指南

简介

“射线投射”是一种可以高效地估算 N 阶反射和衍射的技术。它的基本理念是从听者端随机地投射射线,并通过一系列反射和衍射来追踪其路径。这种技术是在图形渲染技术的基础上演化而来的。当前实现支持在听者端和发声体端实施最高 4 阶的反射和衍射。

概念

  • 初级射线:直接从听者端投射的射线
  • 反射:声波被表面反弹
  • 衍射:声波绕过物体曲线传播
  • 路径:从听者到发声体的一系列反射/衍射
  • 发声体接收器:以发声体为中心的包围盒或包围球

切换开关设置

  • 初级射线数 (uNumberOfPrimaryRays):从听者端投射的射线数。通过增加初级射线数可以获得更好的结果,但 CPU 需要花费更多时间来进行处理。对大部分应用来说,使用默认值就足够了。
  • 最高反射阶数 (uMaxReflectionOrder):射线连续经过表面反弹的最大次数。通过增加最高反射阶数可以获得更加精细的声学模拟,但有可能会对 CPU 性能产生很大影响。
  • 直接衍射路径 (bEnableGeometricDiffractionAndTransmission):听者和发声体之间的直接衍射路径仅由衍射线段构成。在启用直接衍射路径计算时,会大大增加 CPU 用量。
  • 反射衍射 (bEnableDiffractionOnReflection):在反射路径的起点和终点启用衍射(反射路径仅由反射线段构成)。通过针对反射启用衍射可以在发声体或听者移到障碍物后面时,避免意外漏掉反射声。跟直接衍射路径一样,它会大大增加 CPU 用量。
  • 最大路径长度 (fMaxPathLength):路径线段的最大长度。该数值越大,所能计算的路径就越长,但会增加 CPU 用量。
  • CPU 限制模式 (bEnableCPULimitMode):若启用,则射线投射引擎自动限制初级射线数量,以确保 CPU 使用率维持在 CPU 限制百分比值上下。
  • CPU 限制百分比 (fCPULimitPercentage):射线投射引擎在计算反射和衍射时的目标 CPU 用量(表示为音频帧的百分比)。

CPU 限制模式

初级射线数调节起来比较麻烦,具体要看场景的复杂性(三角形数量、衍射边缘数量…)和发声体数量。在启用 CPU 限制模式时,射线投射引擎会自动调节初级射线数量,以确保 CPU 使用率维持在用户定义的目标值上下。该模式可最大限度地避免 CPU 用量达到峰值,不过并没有办法完全消除短时和瞬时峰值。 通过设置较高的目标值,可提升品质(增加找到的反射和衍射路径数),但性能会有所下降。通过设置降低的目标值,可提升性能,但品质会有所下降。 在启用 CPU 限制模式时,初级射线数的上限为 500。在初级射线数降至 0 时,射线投射引擎停止扫描环境。不过,仍会验证和更新现有声音传播路径。这时射线投射引擎仍会消耗 CPU 资源。 注意,CPU Limit Mode 不会对 Portal 射线追踪产生影响。

限制

在针对射线投射引擎定义几何构造时,存在一些限制。这些限制会对 CPU 性能和应用效果产生影响。

几何构造可见角度

在三角形小于采样密度时,射线投射引擎有可能会找不到它。

几何构造的可见角度 α 是指听者可从怎样的角度看到几何构造。两条射线之间的平均角度 γ 则会随着初级射线数变化。α 和 γ 之间的关系会影响找到与物体的交点(反射点或衍射点)的可能性。若 γ 小于 α,则找到交点的可能性较高。若 γ 大于 α,则找到交点的可能性较低。

在本例中,γ 小于 α。因此,找到与物体的交点的可能性较高。
在本例中,γ 大于 α。因此,找到与物体的交点的可能性较低。

三角形数

几何构造中包含的三角形数会直接影响引擎的 CPU 用量:三角形越多,CPU 用量就越高。这是因为需要对物体进行更多的相交检测。通常,声音传播并不需要太过精细的几何构造。在不影响应用效果的前提下,可通过适当减少三角形数来提升 CPU 性能。

此处的平面由 4 个三角形组成:需要针对每个三角形对射线进行相交检测。

几何构造形状

有些几何构造形状会比较不好处理。通常,像平面和箱体这样的几何构造处理起来较为简单,在声音传播方面的应用效果也最好。球体和圆柱体则容易出现错误。这是因为球体和圆柱体会涉及到曲率的问题。有些衍射边缘可能会无法找到,从而导致部分衍射路径丢失。大部分情况下会借助各种启发式算法来克服这一问题。通过增加初级射线数或简化几何构造也可解决该问题。

在此情形下,我希望找到从 L 经过 E2、E3、E4 到 E 的衍射路径。然而 E1 和 E2 之间的表面太小了,所以很难找到所需交点来生成衍射边缘 E2。在这种情况下,比较有可能找到跟 E1 的交点。但是,L 不在 E1 的阴影区。这样算法就很难从 E2 找到衍射路径。

提升性能

现在可将 Performance Monitor 配置为显示多个与 Spatial Audio CPU 用量相关的计数器。有关详细信息,请参阅 Performance Monitor Settings。利用下表中提供的信息,可基于执行性能分析时的计数器值来提升 Spatial Audio 性能。

故障 可能的解决方案
所有 Spatial Audio 相关计数器值都很高
  • 降低反射阶数:在大多数情况下,一阶和二阶反射就足够了。
  • 在非必要时禁用衍射和/或对衍射的反射:衍射的计算会占用大量 CPU 资源。禁用 bEnableGeometricDiffractionAndTransmission 和/或 bEnableDiffractionOnReflection。
  • 减少场景中的边缘数:若对象的细节层次 (LOD) 较高,不仅会增加 CPU 用量,而且会降低整体品质。
  • 使用 Room 和 Portal:若场景由相互独立的部分组成,可考虑使用 Room 和 Portal 将其分隔。
  • 增大振动阈值:若数值较小,可能会过于频繁地对环境进行扫描(取决于几何构造的尺寸)。可考虑在保证结果品质的情况下将此项设为尽可能高的值。
  • 在可能的情况下减少三角形数量:若对象的细节层次 (LOD) 较高,不仅会增加 CPU 用量,而且会降低整体品质。
Spatial Audio - Raytracing CPU 很高
  • 减少初级射线数量:即便数值低于 20,也能产生不错的结果。
  • 启用 CPU 限制 (CPU 限制模式 ):只需设置需要的 CPU 百分比,便可自动调节初级射线数量,来将 CPU 用量控制在规定值附近。注意,这并不会对 Portal 射线追踪产生影响。
  • 增大振动阈值:若数值较小,可能会过于频繁地对环境进行扫描。这样会降低 CPU 的平均性能,但不会对峰值产生明显的影响。
Spatial Audio - Path Validation CPU 很高
  • 在非必要时禁用衍射和/或对衍射的反射:衍射的计算会占用大量 CPU 资源。禁用 bEnableGeometricDiffractionAndTransmission 和/或 bEnableDiffractionOnReflection。
  • 减少场景中的边缘数:若对象的细节层次 (LOD) 较高,不仅会增加 CPU 用量,而且会降低整体品质。
patial Audio - CPU 很高(路径验证和射线投射均有涉及)
  • 大振动阈值:在这种情况下,增大振动阈值主要会降低平均 CPU 用量(相较于峰值 CPU 用量)。

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅