跳到主要内容

Web SDK Performance Guide

在 soundtrace.js 中,提高 ray count、depth、source count 以及 geometry/BVH 设置, 可以改善声学路径的稳定性和空间感。同样的设置也会同时提高传播计算时间、内存占用、 主线程 frame time 和 AudioWorklet 负载。

本文是 SDK 集成方选择选项时的性能/质量参考。下面的预设是起点;实际推荐的 source 数量与各平台上限,会在测量完成后以数值表更新。

固定运行时契约

项目当前契约
Listener每个 scene 1 个
Realtime outputstereo/binaural 2ch
音频渲染路径ST/MT 均为 WASM AudioWorkletProcessor
Multi-source 音频每个 source 调用 source.play(input, 2)(facade)/ ST·direct-native 使用 createWorkletNode()
Native source cap16 sources(EXA_MAX_SOUNDSOURCE
Ray depth 上限16(EXA_MAX_DEPTH
默认质量预设quality: 'balanced' = listener ray 24 x 24,depth 8

16 是 native cap,即一个 scene 中可同时存在的 source 数量上限。面向客户应用推荐的 实时 source 数,必须在该上限之内,按平台、geometry 规模、ray budget、BVH 与 ST/MT 模式分别测量。

各质量预设设定的 listener ray grid 与 depth 如下。

PresetListener rayDepth
fast16 x 164
balanced(默认)24 x 248
quality32 x 3212

主要选项与取舍

选项质量影响性能影响
Listener ray width/height改善以听者为基准的路径发现与方向稳定性传播计算随 ray grid 面积成比例增加
Listener depth允许更深的 reflection/diffraction/reverb 路径path search 与 cache pressure 增加
Source reverb ray width/height改善 source 侧 late reverb 覆盖与材质响应稳定性成本随 source 数与 ray grid 面积增加
Source reverb depth增加 source 侧 late reverb 的追踪深度depth 越大,path search 与 cache pressure 越高
Source count同时空间化的 emitter 更多propagation 与 AudioWorklet mixer 成本增加
BVH type改变 traversal/build 特性依几何体与更新方式,build/refit/traversal 成本不同
BVH max depth控制树深度过浅会导致 traversal 低效,过深会增加 build/memory 成本
Prims per leaf控制每个 leaf 的三角形数依场景结构,traversal/build 的平衡点不同
Animated/refit geometry反映移动的 colliderrefit/rebuild 成本增加,作为 stress 项单独测量
Thread modeMT 可把 propagation job 分散到 worker 线程需要 cross-origin isolation,线程/内存开销增加

Reverb ray budget

Reverb ray 不是 listener ray 的复制值。source 侧 late reverb 的成本按 source count × width × height × depth 增长,因此生产默认值要与 listener ray 分开, 按场景逐步提高。QA 基准 sweep 为 source [4, 8, 12, 16],general ray 与 reverb ray 各自经过 4 x 4 x 38 x 8 x 716 x 16 x 1132 x 32 x 16 档位,path cache [256, 512, 1024]

起始预设

在实测表格填好之前,请把下面的值作为起点,并按应用的目标 FPS 与听感质量调整。

PresetThreadListener raysReverb raysDepthBVH用途测量状态
Mobile conservativeST16 x 164 x 48 x 84LBVH 或 platform default移动端最低基准Measurement pending
Desktop balancedST 或 MT24 x 248 x 88LBVH_SIMD8桌面基本基准Measurement pending
Desktop qualityMT32 x 3216 x 1612LBVH_SIMD8质量优先桌面Measurement pending
Stress onlyMT32 x 3232 x 327..16BVH matrix仅用于极限测量非 realtime 默认值

MT 的收益尚未测量,并非必然更快。 上表 MT 预设的速度收益仍是 Measurement pending。MT 会把 propagation job 分散到 worker,因此收益出现在 ray 预算与 source 数较大时(高 ray grid/depth、多 source);在小场景中,worker 往返与内存开销可能让 ST 更简单也更快。此外 MT 还有 cross-origin isolation (COOP/COEP)的部署成本。小场景与简单页面请从 ST 开始,在预算较大的场景中 实测对比 ST↔MT 后再选择 MT。

如果空间感偏弱,不要先增加 source 数量;应分别、逐级提高 listener ray 与 source reverb ray 的 count/depth。source 数量的增加放到最后测量。

需要测量的指标

在客户文档中给出数值时,请在相同 duration/warmup 条件下重复测量同一 scenario,并且 只公开汇总值而非 raw log。

分组指标
Browser frame平均 FPS、frame time p50/p95/p99、worst frame、dropped frame count
Main-thread stallPerformanceObserver longtask count/total/worst(仅支持的浏览器)
Engine propagationscene.tick() + scene.updatePropagation() 时间 p50/p95/p99/worst
Native job timingpropagation job timing frame、worker 分散/等待时间
Path qualityvalid path count 平均/最大值、material/path 变化的听感记录
AudioAudioContext.sampleRatebaseLatencyoutputLatency、state、setup time
Memorynative memory trace snapshot、JS heap snapshot
Manual observationdrop-out、定位偏弱、thermal、风扇噪音、体感耗电

仅靠浏览器 JavaScript 很难可靠地得到跨平台通用的功耗/thermal 数值。功耗与 thermal 不要作为自动测量值确定,应拆分为 manual observation 或专用设备的测量结果。

测量矩阵

Matrix
BaselineST/MT 各 1 source,listener 16 x 16 x 3,source 16 x 8 x 3,static small geometry
Quality scalelistener 16 x 1632 x 32;source reverb 4 x 48 x 816 x 1632 x 32;depth 371116
Source scale12481216 sources(native cap 16
Reverb ray scalesource [4, 8, 12, 16],general ray 步进 4 x 4 x 38 x 8 x 716 x 16 x 1132 x 32 x 16,reverb ray 同步进,path cache [256, 512, 1024]
Geometry/BVHsmall/medium/large geometry、HKDtree、LBVH、LBVH_SIMD4/8/16、LBVH_NWAY4/8/16
Stress onlyanimated/refit、rebuild-heavy、native source cap、high ray budget

公开准则

项目准则
已实测的值同时标注 platform、browser、SDK commit、STCoreV2 commit 与 scenario
未测量的值不要估算数字,标注为 Measurement pending
Source cap把 native cap 16 与实际推荐 source 数分开
Stress 结果作为极限/回归检测用途,而非 realtime 推荐值
Raw log不要原样放进客户文档,只公开汇总表与解读