BBC研发团队分享如何创建可捕获、编辑和渲染的光场系统原型
光场系统
(映维网Nweon 2022年02月16日)BBC研发团队创建了一个可以捕获、编辑和渲染光场的系统,而成品可以用作逼真的虚拟现实背景,甚至是虚拟电视制作。相关光场易于捕获,只需少量的处理,并且与广播行业建立的工具和工作流程兼容。
日前,BBC的弗洛里安·施威格(Florian Schweiger)撰文介绍了所述系统。下面是映维网的具体整理:
1. 什么是光场?
光场是密集的光线集合,你可以从中重建任意视图。与只捕获进入单个点的光线的360度全景不同,光场包含大量在空间中传播的光线。360度全景只允许你转动头部(三个自由度)来环视周遭,但除了camera所在的确切位置之外,你不能行走移动。这种感觉就像是身体卡在一个固定的地方,你只能活动头部。
然而,光场能够提供六个自由度,允许你看到依赖于视图的细节,包括视差、反射和遮挡。在虚拟现实中,这种额外的自由度会令一切都变得不同。
通常,光场是由一个密集的摄像头阵列所捕获。其中,一系列的摄像头将布置在一个平面并都指向同一个方向。或者等效地,在一台摄像机前面有一个透镜阵列,并将图像分割成多个视图。
然后,平面阵列充当一个虚拟窗口。透过这个窗口,可以通过在实际捕获的光线之间重新组合和插值来查看场景。
只要镜头足够紧密地排列在一起,就可以从源数据中插入穿过所述窗口的任意光线。
2. 单摄像头光场
为了实现一个更简单、符合既定广播工作流程的系统,BBC团队采用了一种稍有不同的方法:用一台摄像机捕获光场。当然,他们使用的是360度摄像机,所以涉及多个摄像头,但记录的全景图像都来自一个视点,只是它们恰好有一个更大的视场。
如图所示,这是一个机动式装置,它可以将摄像机缓慢地绕水平圆移动。一次完整的旋转需要30秒。在这一期间,团队以每秒60帧的速度录制曝光锁定的视频。产生的数据集包含1800帧,即每度5帧。圆的典型直径为1米,这意味着可以有效地捕获相距不到2毫米的视图。然后从这组密集的源视图中,研究人员可以在圈内的任何位置合成虚拟camera位置的视图。
当然,这个简单的设置存在一定的取舍。最明显的限制是,由于摄像机移动,场景本身必须完全静止。否则,伪影将出现在由不一致数据合成的视图中。尽管这排除了特定用例,但对于为虚拟现实创建背景并用动画角色填充的目的来说,这很少是一个问题。实际上,有一种方法可以处理有限的背景运动(在下面描述)。
与六自由度完整光场的另一个区别是,BBC的源视图阵列仅为一维。所有捕获的视点都位于一条线上(尽管这条线是弯的,因为是圆),但数据集中没有任何视点覆盖垂直方向。所以,用户只有五个真正的自由度:头部三个,在圆内移动两个(缺少上下)。但上下移动时,你不会像在现实生活中那样感知到垂直视差。这通常是可以接受的,因为由于我们眼睛的相对位置,水平视差对人类立体视觉更为重要。另外,如果你仔细思考,在大多数日常情况下(尤其是在坐姿VR体验中),以及在电视制作中,人类的主要运动方向通常是水平。
不过,缺少垂直视差会导致渲染视图中的对象显示在稍微不正确的高度。当用户向前移动时,这一点变得最为明显,因为你将理所当然地期望近距离对象比远距离对象更高。但如果没有垂直视差,所有对象的高度都将以相同的速率变化,而与它们在场景中的深度无关,这会导致直线明显弯曲。下面将介绍更多关于这种深度相关的垂直扭曲,以及如何在瞬间缓解它们。
3. 处理和渲染
从捕获的全景视频中,只需几个简单的处理步骤即可获得直接用于渲染的光场数据集。
第一步是调整视频,使其包含一个完整的旋转。这是通过最小化开始帧和结束帧之间的像素差来实现。接下来,将全景视频重新采样为更有效的格式。团队使用的立方体映射表示只包含渲染所需的立方体面:向上,(径向)向外和向下。
BBC已经在Unity游戏引擎中将渲染器实现为一组可以应用于曲面的着色器材质,然后曲面可以显示捕获场景的光场。在最简单的情况下,这个曲面是一个大型球体的内部,而光场则投射到球体(实际上假设场景深度恒定)。尽管这会产生包含视图相关效果的相干图像,但前面提到的垂直视差的缺乏会导致扭曲。这种扭曲会随着场景对象的深度而变化。摄像机附近的对象最为明显,你可以注意到它会出现桶形变形,例如人行道和酒吧窗户上方的檐口。当虚拟camera移向附近的对象时,这一点会变得尤为明显。
为了减轻这种不必要的影响,团队在Unity编辑器中手动添加一个粗略的3D模型,并将光场材质应用于它。这个代理几何体的目的不是捕获环境的细节,而是将较近的结构(如建筑物)与背景区分开来。它同时允许前景对象(例如动画角色)与背景光场交互。在实践中,一个地平面和几个基本体(例如长方体或平面)代表主导结构就已经足够。
渲染过程非常简单,只需从源视图中查找正确的光线即可。对于需要在虚拟camera中渲染的每个像素(如下图蓝色所示),团队选择位于相应光线方向的源视图(橙色)。场景深度确定要在所选源视图中采样的垂直像素位置。
请注意虚拟光线和源光线之间的角度。这意味着,即便代理几何体的深度相当不准确(实际上在几厘米以内),采样位置都不会发生太大变化。
4. 额外的功能:光场编辑
由于系统中的源数据是传统的视频,任何图像或视频处理技术都可以用来改变光场的外观。这包括相对简单的修改,例如colour grading或gamma correction,以及更复杂的操作,比方说通过rotoscoping来隐藏缺陷,甚至是添加场景元素。BBC系统的主要优点是,处理过程可以离线进行。下面的示例说明了应用于源视频的 Neural Style Transfer是如何完全改变渲染场景的外观,并同时保留所有与视图相关的效果,例如反射、遮挡和视差。仅使用视频表示的另一个优点是,可以利用现代视频编码器的高压缩比,从而大大减少必须交付给最终用户的数据量。
5. 特定的动态场景
上面提到,为了防止伪影,BBC的系统通常需要静态场景。但只要满足以下条件,它依然可以支持特定类型的背景运动:
- 背景运动可以周期性地重复。
- 在完整的捕获旋转过程中,动态对象保持在(立方体贴图视频的)视图之中。
- 动态对象可以用平面近似。
可以周期性地重复而不引起怀疑的示例包括人来车往、风中摇摆的树木或流水等等。这种循环既可以是单向(例如汽车一次又一次地驶过);又可以是来回往返的、像溜溜球一样的模式,从而避免不连续性(例如风吹的树梢)。
当动态对象为平面时(例如电视屏幕或河流表面),或者当它在背景中的距离足够远,可以被平面足够精确地近似时,动态对象可以从捕获过程中看到它的每个源视图扭曲到虚拟camera的视图中。
在Unity实现中,团队为动态对象指定了一个恰好满足的着色器材质:根据捕获动态对象的时间对源视图进行采样,而不是像静态场景部分那样对空间上最近的对象进行采样(如上面的处理和渲染中所述)。
6. 下一步
BBC的光场系统目前只是一个原型。它采用标准游戏PC硬件,可以产生适合虚拟现实应用的输出分辨率。
虚拟电视制作的要求非常不同。尽管分辨率必须大大高于广播标准,并且摄像机的运动范围需要大于坐姿VR体验,但在电视演播室设置中,浏览方向的范围通常更为有限。
对于这一点,BBC系统的解决方案包括增加捕获圈的半径,降低捕获速度(以保持密集的源视图间距),同时将捕获范围限制在最终将面对摄影棚和朝向场景的捕获圈部分。一种更灵活但更复杂的方法是使用完整的六自由度光场。随着神经渲染技术的最新进展,源摄像机之间的间距可以显著增加,从而满足运动范围和浏览方向的要求,无需不牺牲视觉质量。