接触VR有几年了,对VR开发也有了一定的了解。不过最近发现有许多概念和原理是不够清晰的,所以这里特地写一篇博客进行梳理,把涉及到的一些人体生理特性如视觉暂留和视频拍摄及播放技术结合起来进行较深入的理解。
下面很多概念可以从百度百科等找到,由于涉及太多,挨个贴引用链接影像阅读,就不这么做了。本来没想写很多,但是确实涉及了较多概念,博客也变很长了,感觉应该能算个不错的科普文章了。
首先是视觉暂留,英语说法是Persistence of Vision,意思是人眼观察景物时,光信号进入大脑神经过一段时间结束后,视觉形象不会立刻消失。应用该人体生理特性,人们设计了电影的拍摄和放映。物体在快速运动时,当人眼看到的影像消失后,人眼仍会保留0.1~0.4秒左右的影像。对于该现象的这个解释其实不一定正确,比如有更合理的解释如phi和beta运动。不过这里不深究,这里主要说的是人眼的该生理特性,具体背后原因原理不关心。
下面就是视频拍摄及播放帧率的问题了。根据网上找的资料,1888年的时候,大家就确定了一个比较统一的结论,就是每秒至少播放16张图片,视觉效果才会流畅。当时电影胶片实在太贵了,能少用就少用,所以就一直用最低16帧率拍摄视频。最早的电影都是无声的,后来发现声音录制到胶片上需要提高帧率,每秒最低24帧才可以。所以电影行业就把24帧率的标准用了起来,一用就是一百多年。现在我们许多的视频就是24帧的,可能会发现播放1939年卓别林的电影像是快镜头一样,因为他们当时用的是16帧率,以现在24帧率来播放每秒就会多出很多内容,显得加快了。
24帧率说完了,或许还有30帧率的,但是:
这个23.98是什么啊?这个类似的还有29.97的帧率,具体原因还是比较复杂的。电影胶片是24帧的,为了让电影内容可以在电视上播放,将帧率降低了千分之一。这个稍微知道一下就算了,不深究,就理解成24帧和30帧即可。
接下来我想看看3D视频的原理,前面根据人眼视觉暂留特性可以和普通2D视频拍摄和播放较好结合起来理解,但是3D视频的一些原理究竟是怎么样的呢?这就应该从人眼产生立体感的原理说起了。
人有两个眼睛,双眼距离约6.5cm,观察一个物体的时候,两个眼睛从不同的位置和角度观察,左眼看到左侧,右眼看到右侧,然后在视网膜上成像,大脑则使用这两个图像产生立体感,区分远近。另外,我们观察原离我们的物体时,两眼视线几乎平行,则很难判断物体远近,更不会产生立体感。比如晚上遥望星空,发现所有星星似乎都在一个球面上,分不清远近。
话说回来,如果只有一只眼睛,则无法产生立体感。简单测试下,闭上一只眼睛,做穿针引线的活,那么看着线穿过针孔了,实际却没有。
所以区别就在于是否是两只眼睛观察。普通的视频,我们用一个摄像机拍摄,观看的时候虽然是两个眼睛看,但是看到的是完全相同的画面,自然没有立体感。所以想要获得立体感,就需要两张图片,二者有一定的视差。那么3D电影的拍摄就需要用到模拟双眼的双目摄像头了:
拍摄的原理好像很容易理解了,那么把拍摄好的图像给眼睛来看就不那么容易了,这也会涉及到3D眼镜的概念,等下也会对电影院用到的眼镜稍微加以介绍。观看的时候,要左眼看左摄像头的图像,右眼看右摄像头的图像才可以,而3D眼镜正好有这种功能。3D眼镜采用时分法,通过3D眼镜与显示器同步信号来实现。当显示器输出左眼图像时,左眼镜片为透光状态,而右眼为不透光状态;当显示器输出右眼图像时,右眼镜片透光而左眼不透光,这样两个镜片就分别看到了不同的游戏画面,达到欺骗眼睛的目的。这样频繁切换双眼获得细微差别的图像,经过大脑自动得到3D立体图像。放一个图吧:
这段描述需要注意到,摄像机同一时刻拍到的左眼和右眼图像,在显示的时候则不是同一时刻显示。因为它的工作原理是,一个屏幕在一个时刻只能显示左眼或者右眼,而不是像VR头盔或者VR应用在手机上直接分为左右两个半屏那样,同时显示左右眼图像。这个后面关于VR视频的介绍会再详细解释,而且对需要用到的3D显示器,我也要稍微介绍下。
还是回到3D眼镜来,就上面这个图来说,它是红蓝眼镜,是3D眼镜的一种。3D眼镜可以分为色差式,偏振光,时分式和不闪式等。红蓝眼镜是色差式眼镜的一种,用两台不同视角的摄像机拍摄的影像用两种不同的颜色印制在同一幅画面中,用肉眼观察的话会呈现模糊的重影图像,用红蓝眼镜则会看到立体效果。就是对彩色进行红色和蓝色过滤,红色的影像通过红色镜片,蓝色的则通过蓝色镜片,从而让大脑看到3D立体效果。
另一种是影院用的偏振光3D技术,它对输出设备角球较高,辅助设备的成本则较低,很适合商业影院等有很多观众的场所。这种也要求拍摄的时候有所不同,就是拍摄的时候,左边镜头的影像经过一个横偏振片过滤,得到横偏振光;右边的影像经过一个纵偏振光过滤,得到纵偏振光。而立体眼镜则在左眼和右眼分别装上横纵偏振片,让左相机拍摄的内容进入左眼,右侧同理,从而得到立体效果。
再看一种时分式,它又称为主动快门式3D眼镜,可以为家庭用户提供高品质的3D显示效果。根据人眼对影像频率的刷新时间来实现,通过提高画面的快速刷新率,至少达到120Hz,左右眼各60Hz进行快速刷新。该方式会导致画面闪烁问题,长时间观看会导致眼球负担增大。这个就要和3D显示器结合来说了,下面介绍。
3D显示器目前分为需要佩戴立体眼镜和不要佩戴两大体系。传统3D电影在荧幕上有两组图像,来源于拍摄时的两台相机,观众必须戴上偏振镜才能消除重影,让一个眼只接受一组图像,从而形成视差,产生立体感。而利用自动立体显示技术,也就是真3D技术,不用佩戴眼镜就能看到立体影像了。这种技术利用视差栅栏,使两只眼睛分别接受不同的图像。平面显示器要形成立体感的影像,必须至少提供两组相位不同的图像。其中,快门式3D和不闪式3D是目前最常用的两种技术。
不闪式是偏光式的一种。偏光式3D技术也叫偏振式3D技术,英文为Polarization 3D,配合使用的是被动式偏光眼镜。偏光式3D技术的图像效果比色差式好,而且眼镜成本也不算太高,比较多电影院采用的也是该类技术,不过对显示设备的亮度要求较高。
偏光式3D是利用光线有“振动方向”的原理来分解原始图像的,先通过把图像分为垂直向偏振光和水平向偏振光两组画面,然后3D眼镜左右分别采用不同偏振方向的偏光镜片,这样人的左右眼就能接收两组画面,再经过大脑合成立体影像。因为偏光3D技术采用的是分光法成像原理,会使画面分辨率减半,难以实现真正的全高清3D影像,而且降低了画面的亮度。此外,偏光式3D技术对显示器的要求较高(达到240赫兹刷新频率)。
其主要优点是没有闪烁,缺点是分辨率低,不闪式1080P画面播放出来就540P了。
快门式3D技术主要是通过提高画面的快速刷新率(至少要达到120Hz)来实现3D效果,属于主动式3D技术。当3D信号输入到显示设备后,120Hz的图像便以帧序列的格式实现左右帧交替产生,通过红外发射器将这些帧信号传输出去,负责接收的3D眼镜刷新同步实现左右眼观看对应的图像,并且保持与2D视像相同的帧数,观众的两只眼睛看到快速切换的不同画面,并且在大脑中产生错觉(摄像机拍摄不出来效果),便观看到立体影像。
该方式的主要缺点是画面闪烁,且眼球负担增加。
除去前面百度百科的这些介绍,我还要介绍点别的,因为确实对此不太了解。3D电视大约2010年就出现了了,而时至今日都没有火起来,确切点说是已经死掉了。现在去京东上搜索下,你会发现都没有卖的。16年的时候三星停更3D电视,2017年CES上的电视产品也都取消了3D功能,默认了3D电视消亡。总的来说,内容,也就是片源,非常之少,是导致其走向灭亡的根本。目前4K电视或者4K显示器也慢慢火起来,但是还有很长的路要走。一方面可能是Windows对高清屏支持不好,还有非常多的旧版软件要兼容,可能高清屏幕会出现缩放问题。另外高清屏幕 也会带来更大的性能负担等,但是最主要的应该还是内容问题。目前1080P的视频其实都不是很多,尤其是在线点播的,甚至有在分辨率和码率等方面做了较大阉割的伪高清。那么受限于4K视频巨大的体积以及当前网络速度较差的现状,4K显示器还不能像SSD那样被广泛配置也是可以理解的了。
顺便补充介绍下裸眼3D。从技术上来看,裸眼式3D可分为光屏障式柱状透镜技术和指向光源三种。裸眼式3D技术最大的优势便是摆脱了眼镜的束缚,但是分辨率、可视角度和可视距离等方面还存在很多不足。在观看的时候,观众需要和显示设备保持一定的位置才能看到3D效果的图像(3D效果受视角影响较大),3D画面和常见的偏光式3D技术和快门式3D技术尚有一定的差距。
介绍了这么多相关的概念和原理,总算到VR视频了。直接介绍VR视频之前,需要先介绍VR的概念。这里不会对VR这个概念做太多介绍,但是要提几个关键的特性。VR是Virtual Reality的所写,也就是虚拟现实。VR技术主要是通过计算机创造一个虚拟的世界,给人身临其境的感觉,也就是沉浸感。目前的形式基本就是戴上一个VR头盔,人眼就完全被头盔遮蔽,无法看到外部的真实世界,看到的全是头盔屏幕中渲染出来的东西,也就是虚拟的世界。这样完全屏蔽真实世界,让人与虚拟世界进行交互,从而得到完全的沉浸感。VR有很多应用,比如下面这个图就是用VR玩射击游戏(当然其他人看不到你头盔中的虚拟世界,你的动作在他们看来可能比较难以理解):
对应VR,还有一个AR概念。AR就是Augmented Reality,即增强现实。它与VR最大的区别是,它不再完全屏蔽外部真实世界,而是与它合二为一。比如这个:
设备用摄像头拍真实的世界,在屏幕中显示。AR技术则在该镜头拍摄的内容中的特定目标上做一些处理,如动态增加一些东西(比如扫描牛奶盒做AR翻译等应用)。
VR和AR不再赘述,回到VR视频来。VR视频又称为全景视频(Virtual Reality Video,360 Video,Panorama),说全景就是因为能让人360度自由观看,这一点是与前面提到的3D视频的关键区别。实际上,全景视频和VR视频是不一样的,这个可能还没有明确定义,都是模糊的叫法。全景视频是单个摄像头拍摄的,能让用户随便转动角度观看。和前面的3D视频拍摄类比下,用双摄像头,各自得到一个左眼和一个右眼图像,这样得到的才是VR视频,因为它有了深度信息。这样看,全景视频和VR视频就和普通平面视频和3D视频的区别那样。
即使是VR视频,和VR头盔中的虚拟世界相比也还是不一样的。因为这涉及到一个自由度(Degree of Freedom,Dof)的概念,即3Dof和6Dof的区别。针对VR来说,比如HTC Vive头盔,你可以走动或者转动,走动有前后、上下和左右三个自由度,转动对应也有三个自由度,合起来是六个自由度,从而让该虚拟世界与真实世界一样。但是呢,视频则和普通交互有区别,因为像我们环顾一个屋子一样,是站在一个点的。这就是现在的360视频的观看方式,它是三自由度的,你只能转动看不同视角的景象,而无法进行走动来观看不同的景象。关于该部分的具体实现,网上有很多资料,比如全景图查看器,就是在Unity引擎中设置两个球,分别放一个左眼图片,一个右眼图片,然后再场景中加入两个摄像机来进行分屏渲染,在电脑或者手机上渲染两个图像,左边占一半,右边占一半。然后头盔中观察,左眼只能看到左边一半,右边只能看到右边一半。这就和前面的3D视频相通了,只不过它用了分屏方式,同一时刻左右图像都能显示,自然没有前面提到的有些3D眼镜的闪烁问题。
放个动图体会一下360视频和虚拟现实的区别吧(主要就是自由度):
全景视频是不能交互的,不像VR那样能走到不同的位置,以不同视角无缝查看。
前面介绍了3D视频的拍摄,那么VR视频的拍摄有何区别呢?这个主要是角度问题,3D视频拍摄拍多少角度都行,但是想要拍VR视频,就要360度全覆盖。而摄像头是有一定视口角度的,想拍摄360度需要好几个相机配合,比如这个:
这个是GoPro相机,有六个摄像头,各自拍摄一定角度的画面,然后通过后期软件拼接,得到360度全景视频。下面是一个全景图:
想要拍摄VR视频,则需要两组这样的相机,分别得到一个左眼全景图和一个右眼全景图才可以。
要注意的是,现在没有谁能做悬浮的相机,这些镜头都要有支撑杆的,所以可能还要对自拍杆做一些后期处理,将其遮挡。