开发
开发
选择平台

Unity 声学射线追踪最佳实践

概览

声学射线追踪功能通常用于预计算静态场景。但也有一些方法可以用于从工具中获取动态场景行为。实现这一目标的最佳实践如下。

动态对象

通过烘焙声学,可在声音渲染中包含动态对象,但这些对象对声音渲染的影响是有限的。动态对象是指任何可以独立于静态场景几何图形移动的几何图形,如门或移动的车辆。
A dynamic door object that can move independently of the static parts of the scene.
使用烘焙声学时,动态对象会对声音渲染产生以下影响:
  • 如果视线被动态几何图形阻挡,直达声将被遮挡。这会导致低通滤波,而低通滤波是衍射以及材料透射系数(若其不为零)共同作用的结果。
  • 动态对象不会对后期混响或反射产生任何影响。这意味着,关闭两个房间之间的门不会阻止混响从一个房间传播到另一个房间,但会阻碍直达声。混响和反射的渲染效果可忽略门产生的阻挡作用。动态对象也不会对衍射声音路径(即:声音在拐角处传播)的阻塞产生任何影响,因为这些效果已过预计算。

案例分析:动态门

要在具有烘焙声学效果的场景中实现动态门,可以使用以下工作流程。
  1. 所有不能移动的世界几何图形都应标记为“静态”。在 Unity 中,只需勾选 GameObject 检查器顶部的“静态”框即可。这表示相关几何图形在运行时永远不会移动,并允许进行一定优化(例如,所有静态对象可以合并到一个单一网格用于图形渲染)。
  2. 使用声学几何组件标记静态世界几何图形,并将这些网格烘焙到文件中。几何图形组件的粒度在此并不重要(例如,可以在所有静态对象的根部放置一个几何图形组件,也可以为每个静态对象放置一个组件)。较少的大型几何图形比多个较小的几何图形更有效。
  3. 场景中的所有动态物体(如门)都应标记为每个独立可移动对象的独立几何组件。这样就可以在运行时将几何图形与场景的其他部分分开移动。确保动态对象未勾选“静态”按钮。动态对象可以处于任何位置(例如,门可以打开或关闭)。
  4. 确保声学地图组件上的“仅静态”选项已启用。这会导致在烘焙声学时忽略动态对象。
  5. 照常烘焙声学。
  6. 在播放模式下,动态对象现在应能移动并影响遮挡(但不影响混响/反射)。

案例分析:带有内部空间的移动车辆

对于动态对象的一个更复杂的情况,可能是具有声学封闭内部空间的大型移动车辆。例如火车车厢、建筑起重机驾驶室、电梯或汽车。在这种情况下,车内与车外的声学效果可能会大相径庭。
有几种可能的实现方式,各有利弊:

选项 1:控制区

  • 使用该选项时,车辆外壳将被视为动态几何图形,与车门类似(见上文)。这样就可以确保在烘焙声学时不包括外壳的几何形状。直达声会被外壳自动屏蔽。起初,车辆外壳不会对混响或反射产生影响(听起来就像在车外一样)。
  • 将控制区组件附加到车辆游戏对象上,使其跟随动态几何图形移动。控制区的大小应与车辆内部相匹配。如果车辆形状不是矩形,则可同时使用多个控制区。控制区用于改变车外的烘焙声学效果,使其达到车内应有的音效。需要手动调整控制区的参数,以获得所需的混响音量和 RT60。
  • 利:最有效的解决方案。
  • 弊:需要手动微调。如果外部声场非常干燥或潮湿,就很难使汽车内部发出正确的声音。控制区可能不完全匹配几何图形。

选项 2:多声学地图

  • 该选项包括在车辆上安装一个单独的声学地图组件。第二张地图将存储车辆内部的声学数据。在运行时,每当车辆移动到一个新位置,车辆的烘焙地图就会自动与静态世界几何图形的烘焙地图合并。在车内,信号源将使用车辆的声学地图数据,而在车外,则使用外部地图数据。
  • 工作流程包括首先将静态世界几何图形与车辆分开烘焙。在此,车辆的几何图形应标记为动态,这样就不会包含在声学烘焙中。然后,在一个仅包含车辆及其几何图形(本场景中为静态)的单独场景中,烘焙车辆内部地图。然后,在主场景中的动态车辆上附加声学地图组件,并将其指向在车辆专用场景中烘焙的文件。这将导致两张地图同时处于活动状态。
  • 利:由于车内声学效果正确,声音可能最好听。
  • 弊:如果车辆每帧都在移动,运行时合并地图的速度会非常慢。车外的混响/反射在车内听不到,反之亦然(但直达声仍会通过部分透明材料传播)。如果静态地图点穿过车内,则可能会产生不自然的声音(这可能会导致车内临时使用车外声学效果)。

特殊情况:仅限车辆旋转

  • 在某些情况下(如起重机驾驶室),车辆可能只能绕轴旋转,而不能移动位置。在这种情况下,起重机驾驶室可视为静态对象进行声学烘焙。这将使预计算数据点被置于内部。由于车辆不会平移,只会旋转,因此当车辆旋转时,这些点通常会留在车内。
  • 烘焙后,将车辆几何图形改为动态(而非静态),但不要重新烘焙网格或声学地图。这将使正在旋转的车辆能够影响声学系统,帮助其确定在特定听众或声源位置哪些预设点是相关的。动态几何图形决定了哪些预计算点是重要的。
  • 利:音质好、性能佳,内部和外部之间混响传播正确。
  • 弊:车辆无法平移。如果听众或声源靠近车壁,而车辆的旋转导致监听点或声源更接近外部地图点而非内部地图点,则可能会出现轻微的混响误差。

案例分析:透声玻璃窗或墙

另一种涉及类似概念的情况是玩家隔着玻璃进行对话(例如在监狱探视室)。在这种情况下,最好能让玻璃一侧的某些混响传播到玻璃的另一侧。遗憾的是,在进行声学烘焙时,这种方法无法自动生效,因为两房之间的玻璃几何结构阻碍了模拟系统识别它们在声学上的连接关系。
在这种情况下,玻璃墙的处理方法与动态对象(如门)类似。
  • 确保所有静态世界几何图形都标记为静态。玻璃墙不应为静态,也不应包含在静态几何图形组件中。
  • 将玻璃墙标记为动态(而非静态),并为该对象附加一个单独的几何图形组件,使其与其他世界几何图形分开。
  • 烘焙场景声学,并启用“仅静态”选项。这样就可以在烘焙时省略玻璃墙,使两个房间在声学上相连。确保墙的两侧至少各有一个预计算点。如果没有,可手动在两侧各创建一个,然后重新烘焙。
  • 当您运行场景时,玻璃墙应根据材料的透射系数削弱直达声,从而产生更安静的遮挡声。混响不会受墙壁的影响,应能够在两个房间之间传播。
  • 要调整直达声衰减量,可修改玻璃材料的透射系数,使其更加透明或不透明。建议:在更高频率下降低透射系数,使声音听起来更沉闷。