三星S22 Ultra Chrome中<model-viewer> AR相机黑屏问题求解
问题根因
你贴的实现代码是model-viewer的标准用法,不存在配置错误,这个故障和业务代码、权限配置没有关系,属于三星S22 Ultra(含同代S22系列部分批次机型)Chrome浏览器WebXR模块与GPU驱动的兼容bug:
- 你观察到的「3D模型、AR放置标识正常显示,仅相机真实画面全黑」是典型的WebXR相机透传(passthrough)纹理采样失败特征:此时AR会话已正常启动,ARCore平面检测、设备位姿跟踪、WebGL 3D渲染链路全部正常,仅相机采集的画面帧没有被正确提交到渲染管线作为背景。
- 具体触发逻辑是:故障版本的Chrome在S22 Ultra上启动WebXR沉浸式AR会话时,默认请求的RGBA8格式相机纹理和机型Adreno 730/Mali GPU驱动输出的相机帧格式不匹配,驱动返回的帧数据无法被WebGL正确采样,最终显示为纯黑背景。
- 该bug仅影响Chrome浏览器内的WebXR AR渲染链路,调用系统原生组件的Scene Viewer(安卓)、Quick Look(iOS)AR模式不受影响,这也是官方示例在同环境下复现一致故障的原因。


修复方案
按落地成本、稳定性从高到低排序:
- 方案1:机型定向降级AR模式(推荐,零兼容风险)
你当前ar-modes配置为webxr scene-viewer quick-look,model-viewer默认优先调用WebXR模式启动AR。只要针对S22 Ultra机型调整配置,强制走系统原生Scene Viewer启动AR,即可完全绕开Chrome的bug链路。
实现只需要在页面初始化时加一段简单的机型检测逻辑即可,不需要修改核心AR代码:
这个方案的体验和WebXR模式几乎无差异,用户无感知,不会出现功能异常。const modelViewer = document.querySelector('model-viewer'); // 匹配三星S22 Ultra的UA标识 if (/SM-S908/i.test(navigator.userAgent)) { modelViewer.setAttribute('ar-modes', 'scene-viewer quick-look'); } - 方案2:显式指定WebXR相机纹理格式(需保留WebXR模式时使用)
如果你的业务必须使用WebXR模式(比如需要在AR场景里自定义DOM交互、叠加自定义WebGL内容),可以修改WebXR会话初始化参数,显式指定驱动兼容的相机纹理格式:在调用requestSession时,将XRWebGLBinding的纹理格式从默认的RGBA8改为SRGB8_ALPHA8或者RGB10_A2,这两个格式在S22 Ultra的GPU驱动上可以正常读取相机透传帧。
注意目前稳定版model-viewer没有暴露这个配置项,你可以fork对应版本的model-viewer源码修改WebXR初始化逻辑,或者等官方后续版本合入该兼容补丁。 - 方案3:引导用户升级浏览器版本
谷歌和三星在Chrome 118及以上版本已经修复了这个兼容bug,如果检测到故障机型的Chrome版本低于118,可以弹出轻量提示引导用户升级浏览器,升级后无需修改配置即可正常使用WebXR模式的AR功能。
注意不要引导用户反复开关相机权限、清除应用缓存,这类操作对该兼容bug完全无效,只会增加用户操作成本。
内容的提问来源于stack exchange,提问作者cuicmex
相关产品推荐
相关产品推荐

