跳至主要内容

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 成長,因此 production 預設值要與 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不要原樣放進客戶文件,只公開彙總表與解讀