文章摘要
文章解释了作者在运行自制游戏时耳机出现嗡嗡声的问题。通过排查发现,游戏渲染时GPU负载不均衡导致电流波动,通过USB供电的DAC将电噪声传导至耳机。大型游戏因优化良好不会出现此问题,而自制游戏因渲染效率不足引发了电流干扰。
文章总结
标题:为什么运行游戏时耳机会出现电流杂音?
背景
我正在开发一款受《矮人要塞》《边缘世界》等启发的等距视角游戏,使用自研的简易引擎(基于Rust和wgpu-rs)。每当启动游戏时,USB接口的MODI 2数字音频转换器连接的耳机就会产生电流杂音,而运行《堡垒之夜》《守望先锋》等大型游戏时却无此现象。
硬件配置包括RTX 3090显卡、32GB内存和通过电脑USB端口供电的DAC设备。更换USB接口无效后,我首先怀疑电源问题,但无法解释为何小型游戏比大型游戏更耗电。测试发现,禁用渲染时杂音消失,说明问题与GPU相关。
渲染流程分析
游戏采用WebGPU技术(具体为wgpu-rs),通过计算着色器筛选可见实体后执行间接绘制。渲染管线最终输出两个内容:屏幕显示缓冲区和用于点击检测的"拾取纹理"。后者将物体ID写入纹理,点击时通过读取鼠标位置对应的ID实现交互。
问题根源
通过逐步禁用渲染管线模块,最终锁定问题源:每帧将整个拾取纹理从GPU内存回传至RAM的操作。当改为每250ms传输一次时,杂音显著减弱;传输频率越高,杂音越强。经同行讨论,推测是GPU满负荷工作后突然暂停等待数据传输,这种间歇性峰值负载导致USB供电波动。
解决方案
优化为仅传输鼠标悬停区域的纹理数据后,不仅彻底消除杂音,GPU负载曲线也趋于平稳(对比图示可见优化前后差异)。事后反思,这种按需传输的方案本应是最佳实践——既降低数据传输量,又避免了电源干扰。
(注:保留了三张关键配图说明:游戏画面截图、渲染管线示意图、优化前后GPU负载对比图)
评论总结
以下是评论内容的总结:
关于电气噪声问题的普遍性
- 多位用户反映电气噪声是常见问题,尤其在GPU高负载时更明显
- 引用:"These effects used to be much worse in the nineties"(vardump)
- 引用:"Moving my cursor makes an audible sound over my (builtin) audio card"(thenthenthen)
解决方案讨论
- 主流方案建议使用外置DAC和光纤连接
- 引用:"The only way...is using external DA/AD converters and connecting them using optical wires"(Garvi)
- 引用:"optical connections for audio...exactly for this reason"(klamann)
对Schiit DAC的争议
- 部分用户认为该品牌DAC存在设计缺陷
- 引用:"Schiit Modi 2 is notorious to struggle with cleaning up USB power"(mistyvales)
- 也有用户表示使用同品牌产品无问题
- 引用:"I've never had a problem like this...should contact Schiit"(ericbarrett)
其他解决方案分享
- 包括使用独立电源、不同USB端口、电源滤波等
- 引用:"Just get a power strip...on a different outlet"(Night_Thastus)
- 引用:"$10 Apple USB-C adapter...buzzing completely stopped"(LUmBULtERA)
游戏开发相关讨论
- 部分用户对文中游戏开发技术细节提出疑问
- 引用:"why overengineering a solved problem this way?"(diath)
- 也有开发者表示方案具有参考价值
- 引用:"directly applicable to my own projects"(kg)
注:所有评论均无评分数据(评分均为None),总结时保持了正反方观点的平衡,并选取了最具代表性的引用。