视频与虚拟背景

视频通话中的实时 3D 虚拟背景

Voxal 的 3D 虚拟背景是由你的设备实时绘制、围绕你打光的动态场景,在直连通话中还可由对方设备重新绘制。了解其工作原理、测量结果与使用局限。

  • 作者:Voxal
  • 更新于
  • 阅读约 7 分钟
一个人在书桌前使用 Voxal,视频参与者出现在热带岛屿虚拟背景前。

Voxal 的 3D 虚拟背景会用一个由你的设备实时绘制的场景取代你身后的房间,并通过打光和投影让场景与你融为一体,而不是一张静态图片。 在兼容的直连视频连接上,对方的设备可以自己绘制同一个场景,因此无需把合成好的背景当作视频发送。

下文将介绍:这项功能做了什么、如何工作、哪些已经测量过而哪些没有,以及在依赖它之前应该了解的局限。

认识 Voxal:没有负担的 push-to-talk

Voxal 是一款 push-to-talk(按键通话)应用,基于一个简单的理念:对话应该易于发起、跨平台可用,并避免不必要的基础设施。你无需账号即可创建或加入语音房间,网页版也无需安装。Voxal 还提供桌面端和移动端应用,支持噪声抑制、麦克风控制、免提模式、视频和屏幕共享。

打开一个房间,与朋友或同事一起加入,想说话时按住即可。喜欢免提?同样可以。

语音音频始终是点对点(peer-to-peer)的。Voxal 不会让你的语音经过媒体服务器。

视频和屏幕共享则是另一回事。它们可以使用直连,也可以在较大的房间中根据你的设置使用可选的视频中继。无论哪种方式,语音都保持点对点。

这种轻量的做法正是 Voxal 的有趣之处:它不想把每次对话都变成沉重的会议。而当你打开摄像头时,背景也不必再是被忽视的细节。

不只是一张图片的背景

大多数虚拟背景都遵循同一套做法:软件找出摄像头前的人,把人与房间分离,再与静态图片或视频合成。

Voxal 也支持这些常见选项。你可以保持摄像头原样、模糊背景,或选择自己的图片。

动画背景的工作方式不同。Voxal 不是播放预先渲染好的视频,而是构建一个三维场景,并在你的设备上实时渲染。场景由几何体、材质、光线和动画构成,而不是在你身后播放的一段影片。

Voxal 内置六个场景:

  • Office: 十月清晨的哥本哈根建筑师工作室,低低的阳光透过高大的窗户洒入。
  • Island: 潟湖上水上平房的阴凉露台,有青绿色的浅水和一棵倾斜的棕榈树。
  • Cyber café: 里斯本一家由 90 年代网吧改成的浓缩咖啡吧,有彩绘瓷砖和老式终端。
  • Mountain: 石灰岩尖峰下如镜的湖面,金黄的落叶松,远处水面笼罩着薄雾。
  • Countryside: 六月傍晚托斯卡纳起伏山丘上的金色麦田。
  • Neon rain: 夜晚港口城市上空的顶层公寓,玻璃上有雨水,地面如镜面般光亮。
六个插画环境:建筑师办公室、热带岛屿露台、里斯本网络咖啡馆、高山湖泊、托斯卡纳乡村,以及雨中的城市顶层公寓。
六种场景主题的艺术示意图,并非渲染后背景的屏幕截图。从左到右依次为:Office、Island、Cyber café、Mountain、Countryside 和 Neon rain。

每个场景都由你设备的图形硬件绘制。应用无需为此附带背景图片或视频。

这改变的不仅是外观。由于场景是生成的而不是回放的,它可以重新打光、可以带有你的影子,也可以对动作做出反应。在手机上,倾斜手机时场景会随之轻微转动。

背景会回应你

一个令人信服的虚拟空间不能只是好看,还应该让你觉得自己属于那里。

Voxal 的处理流程使用本地人像分割,把你从摄像头画面中分离出来,然后将你的轮廓与渲染好的 3D 场景合成。

它还会估算照在你身上的光线,并据此设置场景的曝光、色调和光照方向。目标是得到统一的画面:你和环境拥有相近的光照氛围,而不是像两个互不相干的图层。

你的轮廓还会在场景上投下柔和的阴影,帮助你感觉自己置身其中。

如果愿意,你也可以自己选择光照。选项包括固定的一天中的时段(早晨、正午、下午、傍晚或夜晚)、本地时钟,或你的屏幕主题。

带上你自己的世界

内置场景只是起点。在设置 → 视频 → 背景中,你可以添加:

  • 360° 全景图。 任何等距柱状投影照片都可以,例如来自手机全景模式或 360° 相机的照片。你置身其中,拖动预览或转动手机时,画面会随之旋转。
  • 3D 模型,格式为 .glb 文件(glTF 的二进制形式),例如从 Blender 导出。Voxal 会使用模型自带的摄像机、灯光和动画。

自定义场景保存在你设备本地,不会上传到服务器,最多可保留 12 个。

巧妙之处:你的朋友可以渲染你的背景

在传统视频通话中,发送方发送的是成品画面:你、背景和其他所有内容合成在同一帧里。

对于内置场景,Voxal 提供了另一种选择。当 Let others draw my scene 开启,且有兼容的参与者与你直连时,对方收到的是以纯绿色底为背景的你,而不是成品画面。对方的设备会找到画面中的小角标,把你抠出来,并在你身后绘制对应的场景。

实际上,是两台设备各自独立地绘制了同一个世界。

示意图:发送方通过直连把站在纯绿色底前的人物和场景设置发送出去,接收方在本地渲染岛屿背景。
在兼容设备上,使用直连视频连接和内置场景时,对端渲染的工作原理。

该设置默认开启,你可以在设置 → 视频中关闭。只有当你选择了动画场景且有兼容的对端连接时,它才会生效。

为什么这很重要?对视频编码器来说,一片纯色比细节丰富的动画场景便宜得多。而且场景本身不必经过网络传输,因为它由几个数值构建而成:哪个场景、亮度多少、光从哪里来。

已测量的内容与未测量的内容

在受控的离线测试中(VP9、固定画质、1280 × 720、每秒 30 帧,使用移动的替身对象),内置场景上的合成画面约占 130–287 kb/s,而纯绿色底上的人物约占 96 kb/s。在相同画质下,比特数减少了 26–67%。

阅读这些数字时请牢记其局限:

  • 它们来自使用替身对象的离线测试,而非实际通话。
  • 真实通话并不以固定画质运行。其编码器会用掉所分配的全部码率上限。在实时通话中,好处是发送方的码率上限更低,而这一点尚未在真实通话中测量。
  • 节省的幅度取决于场景、编码器、网络连接和相关设备。

此外,它能否生效也有条件限制:

  • 它需要直连(点对点)视频连接(参见点对点是什么意思)。在默认路由下,这意味着两人房间。当视频经过中继(即 SFU)时,中继收到的始终是成品画面。
  • 接收设备必须能够绘制该场景:需要 WebGL2、基于 Chromium 的引擎和硬件 GPU。如果做不到,发送方会继续发送常规的成品视频。
  • 如果出现问题,例如头部遮住了角标,Voxal 同样会回退到常规视频。
  • 它不适用于你自己的自定义场景,因为其他人没有你的文件。

我们不对与其他产品的带宽对比作任何声明,因为我们没有测量过任何其他产品。

为本地处理而设计

背景所需的图像处理都在你的设备上完成。一个小型机器学习模型通过 WebAssembly 在本地运行,在摄像头画面中找出你。背景在视频发送之前就已绘制并与你合成。不会有任何摄像头画面被发送到服务器来计算背景。

你的自定义全景图和 .glb 文件保存在设备的本地存储中,不会上传,也不会与其他设备共享。

你不必使用其中任何功能。当背景设为 None 时,Voxal 发送原始摄像头流,完全不运行背景处理流程。

有一点值得明确区分。语音音频始终保持点对点。摄像头视频有自己的路由选项,在较大的房间中可能经过可选的中继。中继在技术上可以看到它所转发的视频。本文描述的是这项功能的构建方式,并不是对绝对隐私的承诺,通话中的其他人仍然能看到你的视频。

面向开发者:场景是小型程序

内置场景是 Voxal 仓库中的一个小模块。场景必须是确定性的(由时间和带种子的随机函数驱动),这样另一台设备才能仅凭名称和几个数值重建出完全相同的世界。场景引擎文档说明了模块格式,自定义场景则介绍了你可以自行带来的文件。

对用户来说,这意味着有更多个性化通话的方式。对开发者来说,这意味着背景可以是一个小巧、可复现的程序,而不是一个庞大的媒体文件。

试试 Voxal

你可以使用简单的模糊、选择动画 3D 场景、上传图片、探索 360° 全景图,或试试你自己的 3D 模型。

虚拟背景不必是你身后的一张静态图片。它可以是由你的设备实时创建、打光并赋予动画的世界,而且在条件允许时,也是对方设备同样在创建的世界。

Voxal 以 MIT 许可证开源。功能和平台支持可能因设备和连接而异。

返回博客