日前,索尼公布了一款支持实时光场渲染、搭载眼球追踪技术的8K裸眼3D全息屏幕。该屏幕看起来是平面的,但通过眼球追踪技术,可根据观看者的注视角度来实时调节3D图像的深度/角度,给人一种裸眼3D的感觉。其中一项重要技术是光场,通常指的是利用光来渲染3D空间,视觉效果符合人眼视觉特性。
实际上,光场显示是AR/VR、全息领域一项重要的技术,比如Lytro用光场相机捕捉物理环境的光场信息,以在AR/VR中呈现亮度、色彩等细节逼真的3D图像。而在全息领域,通常会用光场技术来还原/显示裸眼3D动态图,看起来和真实物体一样具有体积,可从多角度查看。CREAL等AR/VR头显厂商也在探索基于光场技术的动态变焦显示技术。
近期,BBC研发部门开发了一个集成捕捉、编辑和渲染的光场系统,其特点是可以制作逼真的VR背景/场景,让光场捕捉更容易,只需要少量处理,即可兼容广播行业现有的工具和工作流程。因此也可以用于电视剧、电影的虚拟拍摄。在进一步了解该方案之前,先来讲讲光场是什么。
光场是什么?
光场指的是一种高密度的光线集合,这些光线可以重新创建任意视图。通常,360°全景相机仅捕捉进入一个特定点的光线,而光场则捕捉了组成场景的大量光线。光场技术的优势在于,可以模拟从多个角度查看的3D空间,支持6DoF运动。换句话说,看360°视频时你只能上下左右摆动头部(3DoF),视角固定在全景相机所在的位置,即使你的头部前倾或后仰,眼前的画面也没有变化。而在光场视频中,你全身都可以前后、上下运动,而且眼前的画面也会适应运动产生的视角变化。
也就是说,用光场技术渲染的场景包含更逼真的细节,可模拟视差、反射和遮挡等现实生活中的物理效果。
参考Lytro光场相机,光场通常用密集的平面摄像头阵列来捕捉,这些摄像头面向相同的方向。此外,也可以在单个摄像头前面加上小透镜阵列,将图像分为多个视图。也就是说,每个相机或每个透镜捕捉的视图,就像是从多个视角透过虚拟窗口去看特定场景,这些不同的视图通过重新组合和插帧,可以组合成一个光场。
因此,摄像头阵列或透镜阵列需要排列紧凑,才能捕捉和模拟连贯的动态图像视角变化,显示出透过虚拟窗口捕捉到的任意光线。如果排列不够密集,则可能会出现锯齿(aliasing)等图像问题。
单相机光场捕捉
为了适合现有的广播工作流程,BBC研发的光场捕捉方案采用了更简单的360°相机结构,其特点是具备多个镜头,每个镜头都能捕捉到独立的视角,而且具有足够大的视场角。它的优缺很明显:硬件方案简单、低成本,但只能捕捉静态场景。
据了解,科研人员将360°相机放在一个水平面上以360°缓慢运动的电动装置上,每绕一圈需要30秒,每移动1°可捕捉5帧图像(60fps),转一圈可捕捉1800帧图像。这个电动装置实际上是一个在原地转圈的金属杆,它的长度可达1米,因此相邻帧视角的间距小于2毫米。接着,系统可以通过360°旋转一周捕捉的密集数据,合成圆圈内任意位置的视图。
简单来讲,360°全景相机通过旋转捕捉到从多个视角查看的周围环境,假设在圈内任意点放置一个虚拟相机,那么这个虚拟相机可以根据前方360°相机捕捉的数据,来推算出所在位置能看到的自然图像视角。换句话说,原来360°相机只能从一个位置捕捉周围的场景,而如果将360°相机绕一定直径旋转,则可捕捉和模拟从多个视角查看周围环境的效果。因此,如果在VR中重现其捕捉到的光场,那么用户可以在圆圈场景内移动,而光场系统捕捉到的场景则位于用户周围,可作为VR的背景。
相比于Lytro相机,BBC开发的光场捕捉方案更简单,但也面临着一些局限。比如:360°相机在运动时,周围的场景需要完全静止,否则捕捉到的数据不连贯,在合成视角时会产生伪影。因此这个方案只能捕捉静态场景,科研人员表示可以在场景中加入动画角色来模拟动态场景。
此外,由于360°相机在同一条水平线上移动,它未能捕捉垂直的视角变化,观看者可以上下左右转动头部,也可以在水平方向后移动。如果观看者上下移动(如从下蹲到站立),则并不能感受到垂直的视差。也就是说,只要你不上下移动,就不会破坏立体、沉浸的视觉观看,比如在家里坐着看VR视频,或是在虚拟拍摄场景中,以水平方向在VR中运镜。
不过值得注意的是,缺少垂直视差会导致渲染图像中的物体出现在错误的高度,如果观看者向前移动,会发现前面不同距离的物体会以相同的速度放大,甚至导致直线变弯曲。而在真实场景中,近处的物体放大速度通常比远处物体更快。
捕捉前景光场
除了捕捉球形的背景光场外,BBC科研人员还开发了一个由11个相机组成的平面阵列方案,尺寸约为50厘米x40厘米,可安装在专业三脚架上。这个相机阵列分为三层,上下两层各有三个相机,而中间一层有五个。其中最中央的主摄像头主要用来帮助科研人员预览镜头构图,周围十个辅助摄像头则用来重建主摄像头周围的3D场景。
这个相机阵列可捕捉到前方的3D物体的位置和深度,同时还支持语义分割,理解3D物体与周围环境的关系。在3D重建的过程中,该系统将每个相机捕捉的深度图、语义和实例分割、超像素分割数据转化为一组3D场景对象,场景中的每个超像素会被分配一个深度和对象标签。
环形光场
前面提到,为了避免重影,360°相机在旋转时周围环境需要保持静止,因此只能捕捉到静态的场景。不过这并不绝对,一些特殊的场景变化可得到完整捕捉,比如:1)周期性重复的运动;2)在旋转拍摄过程中,动态对象一直在摄像头视野范围内;3)动态对象的位置可用平面来表示。
具体来讲,可以捕捉远处移动的汽车、行人,或是随风摆动的树木、流动的水等等。这些动态循环可以朝着一个方向,也可以来回反复的运动。如果动态对象是电视屏幕、河面等平面物体,或者动态对象在背景中足够远时,会在源视图中发生扭曲。
在渲染捕捉静态场景时,主要使用摄像头前方视野范围内的图像,而在渲染动态对象时,则锁定并采样每一帧图像中动态对象所在平面。
不过从BBC展示的视频效果来看,当视角改变时,动态对象在场景中的位置会朝着你移动的方向略有偏移。
处理和渲染
在捕捉光场数据后,只需要几个简单步骤即可开始进行渲染:1)通过寻找和开始帧像素差异最小的图像帧来确定旋转一圈所捕捉到的视频;2)转化成立方体贴图,只包含渲染所需的上下左右图像;3)在Unity游戏引擎中,将捕获的光场作为着色器材质,在场景表面(一个球体的内壁)上渲染,相当于光场投射到球形表面上。
而为了缓解缺少垂直光场而造成的画面失真,科研人员在Unity Editor中手动添加了一个粗略的3D模型(深度误差小于几厘米),作为代理几何结构,目的是将更接近建筑物等物体的结构与背景区分开来。此外,代理几何还可以允许前景中的物体(动态角色等)与光场背景交互,实现遮挡等效果。在实际应用时,只需要一个地平面和长方体、平面等几个基础结构,就能组成主要的场景模型。
使用代理结构效果
未使用代理结构效果
编辑简易
BBC开发的光场系统捕捉的源数据为传统视频格式,因此支持线下编辑,兼容任何图像或视频处理技术,可实现颜色分级、灰度校正、隐藏缺陷甚至添加场景元素等效果,同时保留反射、遮挡和视差等随观看视角变化的图像信息。
源数据为视频格式的另一个好处是,可以利用现有的视频编码器来压缩数据量,这对于电视广播、直播等场景足够友好。
接下来,科研人员继续针对电视广播场景进行优化,一方面需要大幅提升分辨率,另一方面演播厅的摄像机比VR使用者的移动范围更大,因此观看方向的范围通常更加有限。未来,可以通过增加摄像头转圈的半径,或是降低拍摄/移动速度(保持密集的源视图间距)来提升效果。此外,也可以限制旋转拍摄的范围,只需要捕捉面向演播室片场的视角(仅为摄像机提供必要的部分立体场景)。
另一方面,随着神经渲染技术发展,3D光场渲染的效果也越来越好,因此未来如果增加源相机之间的间距,也不会牺牲视觉质量。增加源相机间距的好处是,可提升视野范围,并在上下两个方向设置摄像头,以捕捉更多视角。参考:BBC